mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Use TACAN channels more selectively, use pytest (#1554)
* Use TACAN channels more selectively * Increase tacan range to 126 * Use pytest and add workflow * Skip faction tests due to outdated test data * Run mypy on tests directory also * Use iterators for bands AND usages, add tests
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
import unittest
|
||||
import pytest
|
||||
|
||||
from dcs.helicopters import UH_1H, AH_64A
|
||||
from dcs.planes import (
|
||||
@@ -39,10 +40,11 @@ RESOURCES_DIR = THIS_DIR / "resources"
|
||||
|
||||
|
||||
class TestFactionLoader(unittest.TestCase):
|
||||
def setUp(self):
|
||||
def setUp(self) -> None:
|
||||
pass
|
||||
|
||||
def test_load_valid_faction(self):
|
||||
@pytest.mark.skip(reason="Faction unit names in the json files are outdated")
|
||||
def test_load_valid_faction(self) -> None:
|
||||
with (RESOURCES_DIR / "valid_faction.json").open("r") as data:
|
||||
faction = Faction.from_json(json.load(data))
|
||||
|
||||
@@ -112,7 +114,8 @@ class TestFactionLoader(unittest.TestCase):
|
||||
self.assertIn("OliverHazardPerryGroupGenerator", faction.navy_generators)
|
||||
self.assertIn("ArleighBurkeGroupGenerator", faction.navy_generators)
|
||||
|
||||
def test_load_valid_faction_with_invalid_country(self):
|
||||
@pytest.mark.skip(reason="Faction unit names in the json files are outdated")
|
||||
def test_load_valid_faction_with_invalid_country(self) -> None:
|
||||
|
||||
with (RESOURCES_DIR / "invalid_faction_country.json").open("r") as data:
|
||||
try:
|
||||
|
||||
117
tests/test_tacan.py
Normal file
117
tests/test_tacan.py
Normal file
@@ -0,0 +1,117 @@
|
||||
from gen.tacan import (
|
||||
OutOfTacanChannelsError,
|
||||
TacanBand,
|
||||
TacanChannel,
|
||||
TacanChannelForbiddenError,
|
||||
TacanChannelInUseError,
|
||||
TacanRegistry,
|
||||
TacanUsage,
|
||||
)
|
||||
import pytest
|
||||
|
||||
|
||||
ALL_VALID_X_TR = [1, *range(31, 46 + 1), *range(64, 126 + 1)]
|
||||
ALL_VALID_X_A2A = [*range(37, 63 + 1), *range(100, 126 + 1)]
|
||||
|
||||
|
||||
def test_allocate_first_few_channels() -> None:
|
||||
registry = TacanRegistry()
|
||||
chan1 = registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
|
||||
chan2 = registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
|
||||
chan3 = registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
|
||||
assert chan1 == TacanChannel(1, TacanBand.X)
|
||||
assert chan2 == TacanChannel(31, TacanBand.X)
|
||||
assert chan3 == TacanChannel(32, TacanBand.X)
|
||||
|
||||
|
||||
def test_allocate_different_usages() -> None:
|
||||
"""Make sure unallocated channels for one use don't make channels unavailable for other usage"""
|
||||
registry = TacanRegistry()
|
||||
|
||||
chanA2AX = registry.alloc_for_band(TacanBand.X, TacanUsage.AirToAir)
|
||||
chanA2AY = registry.alloc_for_band(TacanBand.Y, TacanUsage.AirToAir)
|
||||
assert chanA2AX == TacanChannel(37, TacanBand.X)
|
||||
assert chanA2AY == TacanChannel(37, TacanBand.Y)
|
||||
|
||||
chanTRX = registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
|
||||
chanTRY = registry.alloc_for_band(TacanBand.Y, TacanUsage.TransmitReceive)
|
||||
assert chanTRX == TacanChannel(1, TacanBand.X)
|
||||
assert chanTRY == TacanChannel(1, TacanBand.Y)
|
||||
|
||||
|
||||
def test_reserve_all_valid_transmit_receive() -> None:
|
||||
registry = TacanRegistry()
|
||||
print("All valid x", ALL_VALID_X_TR)
|
||||
|
||||
for num in ALL_VALID_X_TR:
|
||||
registry.reserve(TacanChannel(num, TacanBand.X), TacanUsage.TransmitReceive)
|
||||
|
||||
with pytest.raises(OutOfTacanChannelsError):
|
||||
registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
|
||||
|
||||
# Check that we still can allocate an a2a channel even
|
||||
# though the T/R channels are used up
|
||||
chanA2A = registry.alloc_for_band(TacanBand.X, TacanUsage.AirToAir)
|
||||
assert chanA2A == TacanChannel(47, TacanBand.X)
|
||||
|
||||
|
||||
def test_reserve_all_valid_a2a() -> None:
|
||||
registry = TacanRegistry()
|
||||
print("All valid x", ALL_VALID_X_A2A)
|
||||
|
||||
for num in ALL_VALID_X_A2A:
|
||||
registry.reserve(TacanChannel(num, TacanBand.X), TacanUsage.AirToAir)
|
||||
|
||||
with pytest.raises(OutOfTacanChannelsError):
|
||||
registry.alloc_for_band(TacanBand.X, TacanUsage.AirToAir)
|
||||
|
||||
# Check that we still can allocate an a2a channel even
|
||||
# though the T/R channels are used up
|
||||
chanTR = registry.alloc_for_band(TacanBand.X, TacanUsage.TransmitReceive)
|
||||
assert chanTR == TacanChannel(1, TacanBand.X)
|
||||
|
||||
|
||||
@pytest.mark.skip(reason="TODO")
|
||||
def test_allocate_all() -> None:
|
||||
pass
|
||||
|
||||
|
||||
def test_reserve_invalid_tr_channels() -> None:
|
||||
registry = TacanRegistry()
|
||||
some_invalid_channels = [
|
||||
TacanChannel(2, TacanBand.X),
|
||||
TacanChannel(30, TacanBand.X),
|
||||
TacanChannel(47, TacanBand.X),
|
||||
TacanChannel(63, TacanBand.X),
|
||||
TacanChannel(2, TacanBand.Y),
|
||||
TacanChannel(30, TacanBand.Y),
|
||||
TacanChannel(64, TacanBand.Y),
|
||||
TacanChannel(92, TacanBand.Y),
|
||||
]
|
||||
for chan in some_invalid_channels:
|
||||
with pytest.raises(TacanChannelForbiddenError):
|
||||
registry.reserve(chan, TacanUsage.TransmitReceive)
|
||||
|
||||
|
||||
def test_reserve_invalid_a2a_channels() -> None:
|
||||
registry = TacanRegistry()
|
||||
some_invalid_channels = [
|
||||
TacanChannel(1, TacanBand.X),
|
||||
TacanChannel(36, TacanBand.X),
|
||||
TacanChannel(64, TacanBand.X),
|
||||
TacanChannel(99, TacanBand.X),
|
||||
TacanChannel(1, TacanBand.Y),
|
||||
TacanChannel(36, TacanBand.Y),
|
||||
TacanChannel(64, TacanBand.Y),
|
||||
TacanChannel(99, TacanBand.Y),
|
||||
]
|
||||
for chan in some_invalid_channels:
|
||||
with pytest.raises(TacanChannelForbiddenError):
|
||||
registry.reserve(chan, TacanUsage.AirToAir)
|
||||
|
||||
|
||||
def test_reserve_again() -> None:
|
||||
registry = TacanRegistry()
|
||||
with pytest.raises(TacanChannelInUseError):
|
||||
registry.reserve(TacanChannel(1, TacanBand.X), TacanUsage.TransmitReceive)
|
||||
registry.reserve(TacanChannel(1, TacanBand.X), TacanUsage.TransmitReceive)
|
||||
Reference in New Issue
Block a user