Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dcs/unittype.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ def load_payloads(cls):
if not payload_dir.exists():
continue
for payload_path in payload_dir.glob("*.lua"):
if FlyingType._payload_cache[payload_path] == cls.id and payload_path.exists():
if FlyingType._payload_cache.get(payload_path, '') == cls.id and payload_path.exists():
try:
payload_main = lua.loads(payload_path.read_text(), _globals=FlyingType._UnitPayloadGlobals)
except SyntaxError:
Expand Down
47 changes: 47 additions & 0 deletions tests/test_unittype.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
from dcs.liveries.livery import Livery
from dcs.liveries.liverycache import LiveryCache
from dcs.liveries.liveryscanner import LiveryScanner
from dcs.payloads import PayloadDirectories
from dcs.planes import F_16C_50
from dcs.unittype import FlyingType


def test_plane_liveries(tmp_path: Path) -> None:
Expand Down Expand Up @@ -83,3 +85,48 @@ def test_plane_liveries_for_country(tmp_path: Path) -> None:
set(F_16C_50.iter_liveries_for_country(dcs.countries.get_by_short_name("USA")))
== expected
)


def test_non_standard_payload_definition(tmp_path: Path) -> None:
PayloadDirectories.set_preferred(tmp_path)

(tmp_path / "test.lua").write_text(textwrap.dedent("""\
unitPayloads = abc
"""))
# Clears cached payloads to force re-load
FlyingType._payload_cache = None
F_16C_50.payloads = None
F_16C_50._payload_cache = {}
F_16C_50.load_payloads() # test is that load_payloads() runs without failing


def test_standard_payload_definition(tmp_path: Path) -> None:
PayloadDirectories.set_preferred(tmp_path)

(tmp_path / "test.lua").write_text(textwrap.dedent("""\
local unitPayloads = {
["name"] = "F-16C_50",
["payloads"] = {
[1] = {
["displayName"] = "test_payload",
["name"] = "test_payload",
["pylons"] = {
[1] = {
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 11,
},
},
},
["unitType"] = "F-16C_50",
}
return unitPayloads
"""))
# Clears cached payloads to force re-load
FlyingType._payload_cache = None
F_16C_50.payloads = None
payloads = F_16C_50.load_payloads()
assert "test_payload" in payloads
Loading