from __future__ import annotations from pathlib import Path import unittest from app.config.xml_mapping import load_config from app.qt_compat import QRectF from app.ui.preview_widget import ( PREVIEW_MODE_LEDS, PREVIEW_MODE_TECHNICAL, PREVIEW_MODE_TILE, PreviewWidget, normalize_preview_mode, ) ROOT = Path(__file__).resolve().parents[1] SAMPLE_MAPPING = ROOT / "sample_data" / "infinity_mirror_mapping_clean.xml" class PreviewWidgetTests(unittest.TestCase): def test_preview_mode_normalization_defaults_to_tile(self) -> None: self.assertEqual(normalize_preview_mode(PREVIEW_MODE_TILE), PREVIEW_MODE_TILE) self.assertEqual(normalize_preview_mode(PREVIEW_MODE_TECHNICAL), PREVIEW_MODE_TECHNICAL) self.assertEqual(normalize_preview_mode(PREVIEW_MODE_LEDS), PREVIEW_MODE_LEDS) self.assertEqual(normalize_preview_mode("unknown"), PREVIEW_MODE_TILE) def test_preview_mode_flags_keep_tile_and_led_views_separate(self) -> None: widget = PreviewWidget.__new__(PreviewWidget) widget.preview_mode = PREVIEW_MODE_TILE self.assertEqual( widget._mode_flags(), { "show_fill": True, "show_labels": True, "show_leds": False, "show_guides": False, "show_direction": False, "show_overlay_title": False, "show_technical_meta": False, }, ) widget.preview_mode = PREVIEW_MODE_TECHNICAL self.assertEqual( widget._mode_flags(), { "show_fill": True, "show_labels": True, "show_leds": True, "show_guides": True, "show_direction": True, "show_overlay_title": True, "show_technical_meta": True, }, ) widget.preview_mode = PREVIEW_MODE_LEDS self.assertEqual( widget._mode_flags(), { "show_fill": False, "show_labels": False, "show_leds": True, "show_guides": False, "show_direction": False, "show_overlay_title": False, "show_technical_meta": False, }, ) def test_segment_points_follow_counterclockwise_perimeter_order(self) -> None: config = load_config(SAMPLE_MAPPING) tile = config.sorted_tiles()[0] widget = PreviewWidget.__new__(PreviewWidget) rect = QRectF(0.0, 0.0, 200.0, 200.0) points_by_side = { segment.side: PreviewWidget._segment_points_for_side(widget, tile, segment, rect) for segment in tile.segments } self.assertEqual((round(points_by_side["left"][0].x(), 1), round(points_by_side["left"][0].y(), 1)), (4.0, 4.0)) self.assertEqual((round(points_by_side["left"][-1].x(), 1), round(points_by_side["left"][-1].y(), 1)), (4.0, 196.0)) self.assertEqual((round(points_by_side["bottom"][0].x(), 1), round(points_by_side["bottom"][0].y(), 1)), (4.0, 196.0)) self.assertEqual((round(points_by_side["bottom"][-1].x(), 1), round(points_by_side["bottom"][-1].y(), 1)), (196.0, 196.0)) self.assertEqual((round(points_by_side["right"][0].x(), 1), round(points_by_side["right"][0].y(), 1)), (196.0, 196.0)) self.assertEqual((round(points_by_side["right"][-1].x(), 1), round(points_by_side["right"][-1].y(), 1)), (196.0, 4.0)) self.assertEqual((round(points_by_side["top"][0].x(), 1), round(points_by_side["top"][0].y(), 1)), (196.0, 4.0)) self.assertEqual((round(points_by_side["top"][-1].x(), 1), round(points_by_side["top"][-1].y(), 1)), (4.0, 4.0)) if __name__ == "__main__": unittest.main()