S1005403_RisCC/tests/core/test_command_builder.py
VALLONGOL 5c0731f0b4 separati gli scenari dalla configurazione
aggiunta la sezione per lam creazione dei file temporanei
sistemato il problema dell'invio dellle flag anche in tgtset
2025-10-22 10:03:43 +02:00

94 lines
3.4 KiB
Python

import pytest
from target_simulator.core.models import Target, Waypoint, ManeuverType
from target_simulator.core import command_builder
@pytest.fixture
def sample_target() -> Target:
"""Provides a standard Target instance for testing command builders."""
trajectory = [
Waypoint(
maneuver_type=ManeuverType.FLY_TO_POINT,
target_range_nm=50.55,
target_azimuth_deg=-25.11,
target_altitude_ft=25000.0,
target_velocity_fps=800.0,
target_heading_deg=270.0,
)
]
# Creating a target automatically calls reset_simulation() which sets initial state
target = Target(
target_id=5,
trajectory=trajectory,
active=True,
traceable=False, # Test a non-traceable target
)
return target
def test_build_tgtinit(sample_target):
"""Tests the tgtinit command string generation."""
command = command_builder.build_tgtinit(sample_target)
# Usa i valori effettivi calcolati dal modello
expected = (
f"tgtinit {sample_target.target_id} "
f"{sample_target.current_range_nm:.2f} "
f"{sample_target.current_azimuth_deg:.2f} "
f"{sample_target.current_velocity_fps:.2f} "
f"{sample_target.current_heading_deg:.2f} "
f"{sample_target.current_altitude_ft:.2f} "
f"/s /-t"
)
assert command == expected
def test_build_tgtset_from_target_state(sample_target):
"""Tests the tgtset command string generation from a target's state."""
# Let's simulate a small update to the target's state for the test
sample_target.current_range_nm = 50.60
sample_target.current_azimuth_deg = -25.20
sample_target.current_velocity_fps = 805.5
sample_target.current_heading_deg = 271.1
sample_target.current_altitude_ft = 25050.0
command = command_builder.build_tgtset_from_target_state(sample_target)
# Expected format: tgtset <id> <range> <az> <vel> <hdg> <alt>
expected = "tgtset 5 50.60 -25.20 805.50 271.10 25050.00"
assert command == expected
def test_build_simple_commands():
"""Tests builders for simple, parameter-less commands."""
assert command_builder.build_pause() == "pause"
assert command_builder.build_continue() == "continue"
assert command_builder.build_aclatch() == "aclatch"
assert command_builder.build_acunlatch() == "acunlatch"
assert command_builder.build_tgtreset() == "tgtreset -1"
assert command_builder.build_tgtreset(target_id=8) == "tgtreset 8"
def test_build_tgtset_with_flags(sample_target):
"""Verifica che build_tgtset_from_target_state includa i qualificatori quando richiesto."""
# Prepare a sample target with restart flag
sample_target.current_range_nm = 10.0
sample_target.current_azimuth_deg = 0.0
sample_target.current_velocity_fps = 300.0
sample_target.current_heading_deg = 0.0
sample_target.current_altitude_ft = 10000.0
sample_target.active = True
sample_target.traceable = True
sample_target.restart = True
cmd_with_flags = command_builder.build_tgtset_from_target_state(
sample_target, include_flags=True
)
# Order of qualifiers should be /s /t /r
assert cmd_with_flags.endswith("/s /t /r")
# Without flags it should not contain qualifiers
cmd_no_flags = command_builder.build_tgtset_from_target_state(sample_target)
assert not cmd_no_flags.endswith("/s /t /r")