from __future__ import annotations import pytest import dpg_map as dpgm from dpg_map.exceptions import CoordinateError from dpg_map.overlays import TrajectoryOverlay from dpg_map.state import DirtyFlags, create_map_state, get_map_state def test_overlay_update_does_not_alter_center_or_zoom() -> None: create_map_state(tag="overlay-isolation", center=(47.0, 2.0), zoom=8) dpgm.add_marker("vehicle", lat=47.1, lon=2.1, map_tag="overlay-isolation") before_center = dpgm.get_center(map_tag="overlay-isolation") before_zoom = dpgm.get_zoom(map_tag="overlay-isolation") dpgm.update_marker("vehicle", lat=47.2, lon=2.2, map_tag="overlay-isolation") assert dpgm.get_center(map_tag="overlay-isolation") == before_center assert dpgm.get_zoom(map_tag="overlay-isolation") == before_zoom state = get_map_state("overlay-isolation") assert state.dirty & DirtyFlags.OVERLAYS def test_trajectory_inputs_are_copied() -> None: create_map_state(tag="trajectory-copy") lats = [1.0, 2.0] lons = [3.0, 4.0] dpgm.add_trajectory("track", lats=lats, lons=lons, map_tag="trajectory-copy") lats[0] = 99.0 lons[0] = 99.0 state = get_map_state("trajectory-copy") overlay = state.overlays["track"] assert isinstance(overlay, TrajectoryOverlay) assert overlay.points == ((1.0, 3.0), (2.0, 4.0)) def test_mismatched_lat_lon_lengths_raise() -> None: create_map_state(tag="bad-coordinates") with pytest.raises(CoordinateError): dpgm.add_trajectory("track", lats=[1.0], lons=[2.0, 3.0], map_tag="bad-coordinates") def test_layer_state_tracks_visibility_and_overlay_membership() -> None: create_map_state(tag="layers") dpgm.add_layer("fleet", map_tag="layers") dpgm.add_marker("vehicle", lat=1.0, lon=2.0, layer="fleet", map_tag="layers") dpgm.hide_layer("fleet", map_tag="layers") state = get_map_state("layers") assert state.layers["fleet"].show is False assert state.layers["fleet"].overlay_tags == {"vehicle"} dpgm.clear_layer("fleet", map_tag="layers") assert state.layers["fleet"].overlay_tags == set() assert "vehicle" not in state.overlays