Files
StarPilot/openpilot/starpilot/ui/tests/test_onroad_map_layer.py
T

71 lines
3.0 KiB
Python

from types import SimpleNamespace as NS
from unittest.mock import Mock, patch
from openpilot.starpilot.ui.onroad_customization import default_document
from openpilot.starpilot.ui.onroad_map_layer import NativeMapLayer
def test_native_map_prepares_outside_render_and_releases_when_hidden_disabled_or_offroad():
with patch('openpilot.starpilot.ui.onroad_map_layer.gui_app') as app, \
patch('openpilot.starpilot.ui.onroad_map.MapOverlay') as overlay, \
patch('openpilot.starpilot.ui.onroad_map.MapFeed') as feed:
ui = NS(started=True, sm=Mock())
layer = NativeMapLayer(Mock(), ui)
state = NS(customization=default_document(), viewport_width=1860)
app.add_render_prepare.assert_called_once_with(layer.prepare, layer.close)
layer.render(None, state)
layer.prepare()
overlay.assert_not_called()
placed = state.customization['layouts']['large']['nav_map']
placed.update(enabled=True, x=100, y=200, width=600, height=400, opacity=35)
layer.render(None, state)
overlay.assert_not_called() # Rendering only queues offscreen work.
layer.prepare()
overlay.return_value.prepare.assert_called_once_with(feed.return_value.read.return_value, 600, 400)
feed.return_value.read.assert_called_once_with(ui.sm)
layer.render(None, state)
args = overlay.return_value.draw.call_args.args
assert (args[0].x, args[0].y, args[0].width, args[0].height, args[1]) == (100, 200, 600, 400, .35)
placed.update(width=700)
overlay.return_value.draw.reset_mock()
layer.render(None, state)
overlay.return_value.draw.assert_not_called() # Never stretch an old prepared map after a resize.
layer.prepare()
layer.prepare() # No render request: the page is hidden.
assert layer.map is None
overlay.return_value.close.assert_called_once()
layer.render(None, state)
layer.prepare()
placed['enabled'] = False
layer.render(None, state)
layer.prepare()
assert layer.map is None
placed['enabled'] = True
layer.render(None, state)
ui.started = False
layer.prepare()
assert layer.map is None
layer.close()
app.remove_render_prepare.assert_called_once_with(layer.prepare)
def test_native_map_yields_while_starport_draws_its_own():
with patch('openpilot.starpilot.ui.onroad_map_layer.gui_app'), \
patch('openpilot.starpilot.ui.onroad_map_layer.projection_map_active') as lease, \
patch('openpilot.starpilot.ui.onroad_map.MapOverlay') as overlay, \
patch('openpilot.starpilot.ui.onroad_map.MapFeed'):
ui = NS(started=True, sm=Mock())
layer = NativeMapLayer(Mock(), ui)
state = NS(customization=default_document(), viewport_width=1860)
state.customization['layouts']['large']['nav_map'].update(enabled=True)
lease.return_value = False
layer.render(None, state)
layer.prepare()
assert layer.map is not None
lease.return_value = True
layer.render(None, state)
assert layer.pending is None
layer.prepare()
assert layer.map is None
overlay.return_value.close.assert_called_once()