diff --git a/roadscore/prototype/overlay_view.py b/roadscore/prototype/overlay_view.py index f7012ab614..adc0cd64b8 100644 --- a/roadscore/prototype/overlay_view.py +++ b/roadscore/prototype/overlay_view.py @@ -38,16 +38,16 @@ def gesture_view(state): return 'Road alert / Percussion', 'active', 'native_alert' demo = state.get('replay_demo') or {} signal = demo.get('signal_mode') - if signal in ('left', 'right', 'off'): + if signal in ('left', 'right'): shaker = state.get('signal_shaker') or {} - description = 'Shaker' if shaker.get('rendered_active') else 'Replay signal' if signal != 'off' else 'Recorded signals muted' - title = f'Simulated {signal}' + (' shaker' if shaker.get('rendered_active') else '') + description = 'Shaker' if shaker.get('rendered_active') else 'Replay signal' + title = f'{signal.title()} signal' return f'{title} / {description}', 'active', 'simulated_signal' engagement = state.get('engagement_presentation') or {} if engagement.get('enabled') and not engagement.get('simulated') and engagement.get('input_fresh') and engagement.get('rendered_state') == 'transition': return ('Engaged / Opening music' if engagement.get('active') else 'Disengaged / Contained music'), 'active', 'engagement' if engagement.get('enabled') and engagement.get('simulated'): - return ('Simulated engage / Music opens' if engagement.get('active') else 'Simulated disengage / Music contained'), 'active', 'simulated_engagement' + return ('Music opens' if engagement.get('active') else 'Music contained'), 'active', 'simulated_engagement' motion = state.get('motion_presentation') or {} if motion.get('enabled') and motion.get('input_fresh'): mix, target = motion.get('rendered_open_mix'), motion.get('target_open_mix') @@ -208,8 +208,6 @@ def draw_panel(rl, font, state, screen_width, screen_height, emphasis_font=None, text(reserve, 11, 12, font, accent, width - 190, left=190) text(subtitle, 33, 16, font, muted, width - 64) else: - if view['event_state'] == 'active': - subtitle = subtitle.replace('Simulated ', 'Demo: ') def centered(label, top, size, face, tint): label = fit_text(label, width, lambda value: rl.measure_text_ex(face, value, size, 0).x) left = (width - rl.measure_text_ex(face, label, size, 0).x) / 2 diff --git a/roadscore/tests/test_overlay_view.py b/roadscore/tests/test_overlay_view.py index 09fc13bd6b..e302190d96 100644 --- a/roadscore/tests/test_overlay_view.py +++ b/roadscore/tests/test_overlay_view.py @@ -9,11 +9,29 @@ from overlay_view import display_text, fit_text, overlay_view, hud_bounds, start class OverlayTests(unittest.TestCase): - def test_simulation_label_survives_engagement_ramp(self): + def test_simulated_engagement_describes_music_and_preserves_event_metadata(self): for active in (False, True): view = overlay_view({'engagement_presentation':dict(enabled=True,simulated=True,active=active,input_fresh=True,rendered_state='transition')}) self.assertEqual(view['event_kind'], 'simulated_engagement') - self.assertTrue(view['event'].startswith('Simulated ')) + self.assertEqual(view['event'], 'Music opens' if active else 'Music contained') + + def test_manual_signal_off_is_not_a_music_event_or_roadscore_off_state(self): + state = dict(readiness='READY', profile='prism', replay_demo={'signal_mode':'off'}) + self.assertEqual(overlay_view(state)['event'], '') + self.assertEqual(overlay_view(state)['activity'], 'READY') + state['curve_reaction'] = dict(enabled=True,input_fresh=True,rendered_phase='build') + self.assertEqual(overlay_view(state)['event'], 'Curve / Building') + state['engagement_presentation'] = dict(enabled=True,simulated=True,active=False) + self.assertEqual(overlay_view(state)['event'], 'Music contained') + + def test_manual_signal_names_direction_without_claiming_inaudible_shaker(self): + for signal in ('left', 'right'): + for rendered in (False, True): + state = dict(replay_demo={'signal_mode':signal}, signal_shaker={'rendered_active':rendered}) + view = overlay_view(state) + self.assertEqual(view['event'].split(' / ')[0], signal.title() + ' signal') + self.assertEqual('Shaker' in view['event'], rendered) + self.assertEqual(view['event_kind'], 'simulated_signal') def test_live_reactions_describe_rendered_audio(self): for phase, label in [('build', 'Curve / Building'), ('apex', 'Curve apex / Music opens')]: cue = dict(enabled=True, input_fresh=True, rendered_phase=phase)