"""Remembering where the pet was left — and refusing to when that's a trap.""" import json import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) from bolt_pet import window_state def test_a_saved_position_comes_back(tmp_path): path = tmp_path / "window.json" window_state.save(1200, 640, path) assert window_state.load(path) == (1200, 640) def test_no_file_yet_is_not_an_error(tmp_path): assert window_state.load(tmp_path / "nope.json") is None def test_a_corrupt_file_falls_back_to_the_default_corner(tmp_path): """Whatever is in there, the pet still has to start.""" path = tmp_path / "window.json" for junk in ("", "{", "null", "[]", '{"x": "left"}', '{"y": 3}'): path.write_text(junk) assert window_state.load(path) is None def test_saving_creates_the_cache_directory(tmp_path): path = tmp_path / "deep" / "nested" / "window.json" window_state.save(10, 20, path) assert window_state.load(path) == (10, 20) def test_an_unwritable_location_is_swallowed(tmp_path): """A read-only cache dir is a reason to forget the position, not to crash on every drag.""" window_state.save(1, 2, tmp_path / "no" / "\0bad" / "window.json") def test_the_write_is_atomic_and_leaves_no_litter(tmp_path): path = tmp_path / "window.json" window_state.save(5, 5, path) window_state.save(7, 7, path) assert json.loads(path.read_text()) == {"x": 7, "y": 7} assert [p.name for p in tmp_path.iterdir()] == ["window.json"] # ── validating against the screens that exist *now* ───────────────────────── LAPTOP = (0, 0, 1920, 1080) EXTERNAL = (1920, 0, 4480, 1440) def test_a_position_on_a_connected_screen_is_kept(): assert window_state.is_visible_on(1700, 900, 128, [LAPTOP]) def test_a_position_on_an_unplugged_monitor_is_refused(): """The dangerous case: restoring it faithfully puts the pet somewhere you can't see or reach.""" assert not window_state.is_visible_on(3000, 700, 128, [LAPTOP]) assert window_state.is_visible_on(3000, 700, 128, [LAPTOP, EXTERNAL]) def test_mostly_off_screen_counts_as_gone(): """A few pixels of ear poking onto the desktop is not "reachable".""" assert not window_state.is_visible_on(1910, 500, 128, [LAPTOP]) assert window_state.is_visible_on(1830, 500, 128, [LAPTOP]) def test_touching_an_edge_is_not_overlapping(): assert not window_state.is_visible_on(1920, 0, 128, [LAPTOP]) def test_negative_coordinates_are_fine_when_a_screen_is_there(): """Monitors left of or above the primary have negative origins.""" left_of_primary = (-1920, 0, 0, 1080) assert window_state.is_visible_on(-900, 400, 128, [left_of_primary, LAPTOP]) def test_no_screens_at_all_is_not_visible(): assert not window_state.is_visible_on(100, 100, 128, [])