Files
StarPilot/openpilot/starpilot/ui/tests/test_conditional_display_cadence.py
T
firestar5683 a82935f326 User interfaces and Android Auto
Integrate onroad views, configurable widgets, local settings, steering-profile contracts, Bluetooth and Android Auto with their device and runtime services.

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
Co-authored-by: Daniel Koepping <elkoled@gmail.com>
Co-authored-by: Danny <dannyirwin31@yahoo.com>
Co-authored-by: DimitriChrysafis <Dimitri.chrysafis@gmail.com>
Co-authored-by: Dom <168790843+firestar5683@users.noreply.github.com>
Co-authored-by: Harald Schäfer <harald.the.engineer@gmail.com>
Co-authored-by: Prabhaav Pillai <prabhaav@msu.edu>
Co-authored-by: Shane Smiskol <shane@smiskol.com>
Co-authored-by: dirwin31 <83434411+dirwin31@users.noreply.github.com>
Co-authored-by: firestarsdog <229254897+firestarsdog@users.noreply.github.com>
Co-authored-by: stef <19478336+stefpi@users.noreply.github.com>
Co-authored-by: whoisdomi <dcantu83@gmail.com>

Co-authored-by: Intelli <contact@intelli.software>
Co-authored-by: pharmacomaniac <blittle65@gmail.com>

Co-authored-by: prabhaavp <prabhaav@msu.edu>
2026-10-14 20:02:39 -05:00

36 lines
1.9 KiB
Python

import unittest
from openpilot.starpilot.ui.conditional_status import ConditionalDisplayProjector
from openpilot.starpilot.ui.tests.test_conditional_status import DRIVE, NOW, SOURCE, acknowledged
class ConditionalDisplayCadenceTests(unittest.TestCase):
def setUp(self):
self.projector = ConditionalDisplayProjector()
def project(self, ack, *, now=NOW, source=SOURCE, enabled=True, experimental=True):
return self.projector.project(
ack, now_ns=now, event_ns=int(ack.conditionalModeAck.observedMonoTime),
selfdrive_ns=source, drive_id=DRIVE, selfdrive_experimental=experimental,
selfdrive_enabled=enabled, long_active=True, car_valid=True, system_long=True)
def test_independent_sockets_do_not_clear_a_fresh_unchanged_mode(self):
ack = acknowledged()
first = self.project(ack)
self.assertIsNotNone(first)
for elapsed in (10_000_000, 20_000_000, 40_000_000, 199_000_000):
self.assertEqual(self.project(ack, now=NOW + elapsed, source=NOW + elapsed - 1_000_000), first)
self.assertIsNone(self.project(ack, now=NOW + 200_000_001, source=NOW + 199_000_000))
def test_newer_state_must_still_match_and_explicit_rejection_wins(self):
ack = acknowledged()
self.assertIsNotNone(self.project(ack))
self.assertIsNone(self.project(ack, now=NOW + 10_000_000, source=NOW + 9_000_000, enabled=False))
self.assertIsNone(self.project(ack, now=NOW + 10_000_000, source=NOW + 9_000_000, experimental=False))
self.assertIsNotNone(self.project(ack, source=SOURCE - 1))
self.assertIsNone(self.project(ack, source=SOURCE - 50_000_001))
self.assertIsNone(self.project(ack, source=NOW + 1))
rejected = acknowledged(sequence=2, accepted=False, experimental=False, observed_ns=NOW + 10_000_000)
self.assertIsNone(self.project(rejected, now=NOW + 10_000_000, source=NOW + 9_000_000, experimental=False))
self.assertIsNone(self.project(ack, now=NOW + 11_000_000, source=NOW + 10_000_000))