## T-1120: tests for AtlasViewer's public view-transform API (set_view() / ## get_view_offset(), paired with the pre-existing get_view_zoom()). ## ## Added for the Atlas screenshot capture matrix harness, which needs to set ## deterministic zoom/pan without simulating mouse wheel events against ## viewer internals (_view_zoom/_view_offset were previously private-only, ## review flagged reaching into them from visual_capture.gd as the wrong ## layer to poke at — this is the public surface instead). class_name TestAtlasViewApi extends GdUnitTestSuite func test_set_view_applies_zoom_and_offset() -> void: var v: AtlasViewer = auto_free(AtlasViewer.new()) add_child(v) # _canvas resolves in _ready(); a bare .new() crashes _apply_transform v.set_view(3.0, Vector2(100.0, -40.0)) assert_that(v.get_view_zoom()).is_equal_approx(3.0, 0.001) assert_that(v.get_view_offset()).is_equal(Vector2(100.0, -40.0)) ## MIN_ZOOM/MAX_ZOOM are 0.5/8.0 (atlas_viewer.gd) — set_view() must clamp the ## same way _zoom_at()/_fit_to_view() do, so a caller can't push the view into ## a range the rest of the viewer doesn't expect. func test_set_view_clamps_zoom_to_min_max() -> void: var v: AtlasViewer = auto_free(AtlasViewer.new()) add_child(v) v.set_view(0.01, Vector2.ZERO) assert_that(v.get_view_zoom()).is_equal_approx(AtlasViewer.MIN_ZOOM, 0.001) v.set_view(1000.0, Vector2.ZERO) assert_that(v.get_view_zoom()).is_equal_approx(AtlasViewer.MAX_ZOOM, 0.001) ## Getter round-trip: what set_view() writes is exactly what get_view_zoom()/ ## get_view_offset() read back (within the clamp), across a few values — ## guards against an off-by-transform bug (e.g. accidentally reading ## _canvas.scale/_canvas.position instead of the cached _view_zoom/_view_offset). func test_view_getters_round_trip_after_set_view() -> void: var v: AtlasViewer = auto_free(AtlasViewer.new()) add_child(v) var cases: Array = [ [1.0, Vector2.ZERO], [2.0, Vector2(50.0, 25.0)], [4.0, Vector2(-200.0, 300.0)], [AtlasViewer.MIN_ZOOM, Vector2(10.0, 10.0)], [AtlasViewer.MAX_ZOOM, Vector2(-10.0, -10.0)], ] for c: Array in cases: var zoom: float = c[0] var offset: Vector2 = c[1] v.set_view(zoom, offset) assert_that(v.get_view_zoom()).override_failure_message( "zoom round-trip failed for input %.2f" % zoom ).is_equal_approx(zoom, 0.001) assert_that(v.get_view_offset()).override_failure_message( "offset round-trip failed for input %s" % offset ).is_equal(offset) ## set_view() must drive the same _canvas transform _apply_transform() drives ## for mouse-wheel zoom/drag pan — otherwise the harness would set state the ## getters report correctly but the viewport never actually renders. func test_set_view_updates_canvas_transform() -> void: var v: AtlasViewer = auto_free(AtlasViewer.new()) add_child(v) v.set_view(2.5, Vector2(15.0, -5.0)) var canvas: Node2D = v.get_node("AtlasCanvas") assert_that(canvas.scale).is_equal(Vector2(2.5, 2.5)) assert_that(canvas.position).is_equal(Vector2(15.0, -5.0))