# -*- coding: utf-8 -*- """Tests für AzA Mini-Aufnahmefenster.""" from __future__ import annotations import os import unittest class TestMiniRecordWindow(unittest.TestCase): def test_minimieren_button_in_basis14(self): path = os.path.join(os.path.dirname(__file__), "basis14.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertIn('"Minimieren"', src) self.assertIn("open_mini_record_mode", src) def test_minimieren_button_in_office_shell(self): path = os.path.join(os.path.dirname(__file__), "aza_office_shell_v1.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertIn('"Minimieren"', src) self.assertIn("open_mini_record_mode", src) def test_mini_record_module_structure(self): path = os.path.join(os.path.dirname(__file__), "aza_mini_record_window.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertIn("def open_mini_record_window", src) self.assertIn("def close_mini_record_window", src) self.assertIn("def sync_mini_record_window", src) self.assertIn("AzA Mini", src) self.assertIn("Korrigieren", src) self.assertIn("chrome_hdr.pack", src) self.assertIn("_MINI_LOGO_PX", src) self.assertIn("toggle_record", src) self.assertIn("_toggle_record_append", src) self.assertIn("overrideredirect(True)", src) self.assertIn("_bind_window_drag", src) def test_mini_logo_size_30_percent_larger(self): import aza_mini_record_window as mr self.assertEqual(mr._MINI_LOGO_PX, int(mr._MAIN_LOGO_PX * 1.3)) def test_singleton_guard(self): import aza_mini_record_window as mr class _FakeWin: def winfo_exists(self): return True def lift(self): pass class _FakeApp: _mini_record_win = _FakeWin() open_called = [] def _fake_open(app): open_called.append(app) orig = mr.open_mini_record_window try: # Direkt: bestehendes Fenster → kein withdraw mr.open_mini_record_window = lambda app: None import aza_mini_record_window aza_mini_record_window.open_mini_record_window(_FakeApp()) finally: mr.open_mini_record_window = orig self.assertTrue(hasattr(_FakeApp, "_mini_record_win")) def test_filter_doc_type_from_main(self): path = os.path.join(os.path.dirname(__file__), "basis14.py") with open(path, encoding="utf-8") as f: src = f.read() stop_block = src.split("def _stop_and_process_recording", 1)[-1].split("\n def ", 1)[0] self.assertIn("_current_doc_type", stop_block) def test_autocopy_mini_window_force(self): path = os.path.join(os.path.dirname(__file__), "basis14.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertIn("is_mini_record_window_open", src) self.assertIn("in Zwischenablage kopiert", src) def test_sync_hooks_in_recording(self): path = os.path.join(os.path.dirname(__file__), "basis14.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertIn("_sync_mini_record_ui", src) toggle_block = src.split("def toggle_record", 1)[-1].split("\n def ", 1)[0] self.assertIn("_sync_mini_record_ui", toggle_block) def test_doku_prompt_tests_still_importable(self): import _test_doku_prompt_system # noqa: F401 def test_close_no_confirm_dialog(self): path = os.path.join(os.path.dirname(__file__), "basis14.py") with open(path, encoding="utf-8") as f: src = f.read() close_block = src.split("def _on_close", 1)[-1].split("\n def ", 1)[0] self.assertNotIn("vollstaendig schliessen", close_block) self.assertNotIn("vollständig schließen", close_block) self.assertIn("_close_aza_auxiliary_windows", close_block) self.assertIn("_shutdown_tracked_child_processes", close_block) def test_close_shutdown_closes_mini(self): path = os.path.join(os.path.dirname(__file__), "basis14.py") with open(path, encoding="utf-8") as f: src = f.read() aux_block = src.split("def _close_aza_auxiliary_windows", 1)[-1].split("\n def ", 1)[0] self.assertIn("close_mini_record_window", aux_block) self.assertIn("restore_main=False", aux_block) def test_mini_window_persistent_topmost(self): path = os.path.join(os.path.dirname(__file__), "aza_mini_record_window.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertIn("_raise_mini_window_topmost", src) self.assertIn('attributes("-topmost", True)', src) self.assertIn("parent=None", src) self.assertIn("bring_to_front=False", src) self.assertIn("_clear_mini_window_topmost", src) def test_mini_logo7_both_states(self): import aza_mini_record_window as mr assets = os.path.join(os.path.dirname(__file__), "assets") self.assertTrue(os.path.isfile(os.path.join(assets, "logo7.png"))) logo_path = mr._resolve_asset_path(mr._LOGO_CANDIDATES) self.assertIsNotNone(logo_path) self.assertTrue(logo_path.lower().endswith("logo7.png")) path = os.path.join(os.path.dirname(__file__), "aza_mini_record_window.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertNotIn("Logo2.png", src) self.assertNotIn("Logo4", src) self.assertIn("_ensure_mini_logo", src) self.assertIn("_mini_record_photo_idle", src) self.assertIn("_mini_record_photo_active", src) ensure_block = src.split("def _ensure_mini_logo", 1)[-1].split("\ndef ", 1)[0] self.assertIn("_mini_record_photo_active = photo", ensure_block) def test_mini_recording_bg_still_changes(self): import aza_mini_record_window as mr self.assertEqual(mr._BG_IDLE, "#effeff") self.assertEqual(mr._BG_ACTIVE, "#ddfaff") path = os.path.join(os.path.dirname(__file__), "aza_mini_record_window.py") with open(path, encoding="utf-8") as f: src = f.read() sync_block = src.split("def sync_mini_record_window", 1)[-1].split("\ndef ", 1)[0] self.assertIn("_apply_mini_bg", sync_block) self.assertIn("Aufnahme läuft", sync_block) def test_mini_no_large_content_close_button(self): path = os.path.join(os.path.dirname(__file__), "aza_mini_record_window.py") with open(path, encoding="utf-8") as f: src = f.read() open_block = src.split("def open_mini_record_window", 1)[-1] self.assertNotIn('text="✕", command=lambda: close_mini_record_window', open_block) self.assertIn("logo7.png", src) def test_sidebar_close_uses_on_close(self): path = os.path.join(os.path.dirname(__file__), "aza_office_shell_v1.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertIn('command=lambda: _safe_call(app, "_on_close")', src) def test_mini_anchor_position_support(self): import aza_mini_record_window as mr from aza_ui_helpers import clamp_window_position x, y = clamp_window_position(5000, 5000, 236, 210, screen_w=1920, screen_h=1080) self.assertLessEqual(x, 1920 - 236 - 8) self.assertLessEqual(y, 1080 - 210 - 8) path = os.path.join(os.path.dirname(__file__), "aza_mini_record_window.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertIn("def _place_mini_window", src) self.assertIn("anchor_x", src.split("def open_mini_record_window", 1)[-1]) self.assertIn("clamp_window_position", src) def test_pin_topmost_reapply(self): path = os.path.join(os.path.dirname(__file__), "basis14.py") with open(path, encoding="utf-8") as f: src = f.read() self.assertIn("def _apply_main_topmost_state", src) self.assertIn("_on_main_focus_in_reapply_pin", src) toggle_block = src.split("def _toggle_main_pin", 1)[-1].split("\n def ", 1)[0] self.assertIn("_apply_main_topmost_state", toggle_block) mini_path = os.path.join(os.path.dirname(__file__), "aza_mini_record_window.py") with open(mini_path, encoding="utf-8") as f: mini_src = f.read() restore_block = mini_src.split("def _restore_main_window", 1)[-1].split("\ndef ", 1)[0] self.assertIn("app._apply_main_topmost_state()", restore_block) self.assertIn('hasattr(app, "_apply_main_topmost_state")', restore_block) if __name__ == "__main__": unittest.main()