Files
StarPilot/selfdrive/ui/tests/test_aethergauge.py
T
firestar5683 d89371c518 WUMBO
2026-08-02 12:20:20 -05:00

125 lines
3.7 KiB
Python

import types
import unittest
class MockSubMaster:
def __init__(self):
self.valid = {}
self.updated = {}
self.data = {}
def __getitem__(self, key):
return self.data.get(key)
def __setitem__(self, key, value):
self.data[key] = value
def reset(self):
self.valid.clear()
self.updated.clear()
self.data.clear()
mock_ui_state = types.SimpleNamespace(
is_metric=False,
sm=MockSubMaster(),
)
from openpilot.selfdrive.ui.onroad.starpilot import aethergauge
from openpilot.selfdrive.ui.onroad.starpilot.aethergauge import (
AetherGauge,
AetherGaugeData,
IndicatorType,
_is_lead,
_lead_data,
_is_stop_light,
_is_curvature,
)
aethergauge.ui_state = mock_ui_state
class TestAetherGaugeLeadLogic(unittest.TestCase):
def setUp(self):
mock_ui_state.sm.reset()
def test_is_lead_inactive_if_not_experimental(self):
mock_ui_state.sm.valid["starpilotPlan"] = True
mock_ui_state.sm.valid["radarState"] = True
mock_ui_state.sm["starpilotPlan"] = types.SimpleNamespace(
experimentalMode=False,
trackingLead=True,
)
mock_ui_state.sm["radarState"] = types.SimpleNamespace(
leadOne=types.SimpleNamespace(status=True, vLead=5.0, dRel=20.0)
)
self.assertFalse(_is_lead())
def test_is_lead_inactive_if_not_tracking_lead(self):
mock_ui_state.sm.valid["starpilotPlan"] = True
mock_ui_state.sm.valid["radarState"] = True
mock_ui_state.sm["starpilotPlan"] = types.SimpleNamespace(
experimentalMode=True,
trackingLead=False,
)
mock_ui_state.sm["radarState"] = types.SimpleNamespace(
leadOne=types.SimpleNamespace(status=True, vLead=5.0, dRel=20.0)
)
self.assertFalse(_is_lead())
def test_is_lead_active_when_experimental_and_tracking(self):
mock_ui_state.sm.valid["starpilotPlan"] = True
mock_ui_state.sm.valid["radarState"] = True
mock_ui_state.sm["starpilotPlan"] = types.SimpleNamespace(
experimentalMode=True,
trackingLead=True,
)
mock_ui_state.sm["radarState"] = types.SimpleNamespace(
leadOne=types.SimpleNamespace(status=True, vLead=5.0, dRel=20.0)
)
self.assertTrue(_is_lead())
def test_lead_data_slow(self):
mock_ui_state.sm.valid["radarState"] = True
mock_ui_state.sm["radarState"] = types.SimpleNamespace(
leadOne=types.SimpleNamespace(status=True, vLead=5.0, dRel=25.0)
)
data = _lead_data()
self.assertEqual(data.text, "SLOW")
self.assertEqual(data.indicator_extra, "slower")
self.assertEqual(data.indicator_value, 25.0)
self.assertEqual(data.indicator_type, IndicatorType.LEAD)
def test_lead_data_stopped(self):
mock_ui_state.sm.valid["radarState"] = True
mock_ui_state.sm["radarState"] = types.SimpleNamespace(
leadOne=types.SimpleNamespace(status=True, vLead=0.5, dRel=12.0)
)
data = _lead_data()
self.assertEqual(data.text, "STOPPED")
self.assertEqual(data.indicator_extra, "stopped")
self.assertEqual(data.indicator_value, 12.0)
self.assertEqual(data.indicator_type, IndicatorType.LEAD)
def test_is_stop_light(self):
mock_ui_state.sm.valid["starpilotPlan"] = True
mock_ui_state.sm["starpilotPlan"] = types.SimpleNamespace(
experimentalMode=True,
redLight=True,
)
self.assertTrue(_is_stop_light())
mock_ui_state.sm["starpilotPlan"].redLight = False
self.assertFalse(_is_stop_light())
def test_is_curvature(self):
mock_ui_state.sm.valid["starpilotPlan"] = True
mock_ui_state.sm["starpilotPlan"] = types.SimpleNamespace(
experimentalMode=True,
roadCurvature=0.002,
)
self.assertTrue(_is_curvature())
mock_ui_state.sm["starpilotPlan"].roadCurvature = 0.0005
self.assertFalse(_is_curvature())
if __name__ == "__main__":
unittest.main()