mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-08 05:23:41 +08:00
71 lines
3.0 KiB
Python
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()
|