diff --git a/openpilot/starpilot/tests/test_feature_runtime.py b/openpilot/starpilot/tests/test_feature_runtime.py index ba114431f0..f547fc8de4 100644 --- a/openpilot/starpilot/tests/test_feature_runtime.py +++ b/openpilot/starpilot/tests/test_feature_runtime.py @@ -92,11 +92,15 @@ def test_vision_control_needs_saved_master_and_vision_source_on_exact_long_cp(): (params.root / 'SLCPriority1').write_bytes(b'Dashboard') (params.root / 'SLCPriority2').write_bytes(b'Vision') with patch('openpilot.starpilot.feature_runtime.ioniq6_long_eligible', side_effect=lambda cp: cp == 'tagged'): + from openpilot.starpilot.feature_runtime import vision_control_enabled assert requested(params, 'vision') assert enabled(params, 'tagged', 'vision', {}) assert not enabled(params, 'stock', 'vision', {}) + assert vision_control_enabled(params, 'tagged') + assert not vision_control_enabled(params, 'stock') (params.root / 'SpeedLimitController').write_bytes(b'0') - assert not enabled(params, 'tagged', 'vision', {}) + assert enabled(params, 'tagged', 'vision', {}) # Default-on display still needs its selected Vision producer. + assert not vision_control_enabled(params, 'tagged') def test_explicit_replay_flags_remain_available_for_existing_replay_fixtures(): diff --git a/openpilot/starpilot/ui/tests/test_lead_bar.py b/openpilot/starpilot/ui/tests/test_lead_bar.py index 199a22c29e..094233cf15 100644 --- a/openpilot/starpilot/ui/tests/test_lead_bar.py +++ b/openpilot/starpilot/ui/tests/test_lead_bar.py @@ -49,17 +49,29 @@ def test_e2e_without_radar_uses_matching_label_and_fails_closed_when_stale(): assert all(lead.info is None and not lead.bar.size for lead in renderer._lead_vehicles) -def test_invalid_numbers_and_mismatched_lane_shapes_do_not_project(): +def test_invalid_numbers_and_invalid_path_geometry_do_not_project(): for field, value in [('dRel', float('nan')), ('yRel', float('inf')), ('vRel', 'bad'), ('dRel', -1.)]: renderer, sm = fixture() setattr(sm['radarState'].leadOne, field, value) renderer._update_leads(sm) renderer._get_lead_bar.assert_not_called() assert renderer._lead_vehicles[0].info is None + for points in (np.empty((0, 3), dtype=np.float32), np.full((3, 3), np.nan, dtype=np.float32)): + renderer, sm = fixture() + renderer._path.raw_points = points + renderer._update_leads(sm) + renderer._get_lead_bar.assert_not_called() + assert all(lead.info is None and not lead.bar.size for lead in renderer._lead_vehicles) + + +def test_missing_lane_lines_still_project_using_exact_model_path(): renderer, sm = fixture() renderer._lane_lines[2].raw_points = np.empty((0, 3), dtype=np.float32) renderer._update_leads(sm) - renderer._get_lead_bar.assert_not_called() + renderer._get_lead_bar.assert_called_once() + assert renderer._get_lead_bar.call_args.args[0] is renderer._path.raw_points + assert renderer._get_lead_bar.call_args.args[1:] == (20. + native.RADAR_TO_CAMERA, .1) + assert renderer._lead_vehicles[0].info is not None and renderer._lead_vehicles[0].bar.size def test_brake_and_independent_lateral_availability_retain_snap_and_fade():