Doctrine load from YAML (#3291)

This PR refactors the Doctrine class to load from YAML files in the
resources folder instead of being hardcoded as a step towards making
doctrines moddable (Issue #829).

I haven't added anything to the changelog as a couple of things should
get cleaned up first:
- As far as I can tell, the flags in the Doctrine class (cap, cas, sead
etc.) aren't used anywhere. Need to test further, and if they're truly
not used, will remove them.
- Probably need to update the Wiki
This commit is contained in:
zhexu14
2023-12-18 13:42:31 +11:00
committed by GitHub
parent a213215c3f
commit 4631ee0d74
9 changed files with 235 additions and 143 deletions

View File

@@ -0,0 +1,43 @@
import pytest
from game.data.doctrine import Doctrine, GroundUnitProcurementRatios
from game.data.units import UnitClass
def test_ground_unit_procurement_ratios_empty() -> None:
r = GroundUnitProcurementRatios({})
for unit_class in UnitClass:
assert r.for_unit_class(unit_class) == 0.0
def test_ground_unit_procurement_ratios_single_item() -> None:
r = GroundUnitProcurementRatios({UnitClass.TANK: 1})
for unit_class in UnitClass:
if unit_class == UnitClass.TANK:
assert r.for_unit_class(unit_class) == 1.0
else:
assert r.for_unit_class(unit_class) == 0.0
def test_ground_unit_procurement_ratios_multiple_items() -> None:
r = GroundUnitProcurementRatios({UnitClass.TANK: 1, UnitClass.ATGM: 1})
for unit_class in UnitClass:
if unit_class in [UnitClass.TANK, UnitClass.ATGM]:
assert r.for_unit_class(unit_class) == 0.5
else:
assert r.for_unit_class(unit_class) == 0.0
def test_ground_unit_procurement_ratios_from_dict() -> None:
r = GroundUnitProcurementRatios.from_dict({"Tank": 1, "ATGM": 1})
for unit_class in UnitClass:
if unit_class in [UnitClass.TANK, UnitClass.ATGM]:
assert r.for_unit_class(unit_class) == 0.5
else:
assert r.for_unit_class(unit_class) == 0.0
def test_doctrine() -> None:
# This test checks for the presence of a doctrine named "modern" as this doctrine is used as a default
modern_doctrine = Doctrine.named("modern")
assert modern_doctrine.name == "modern"