201 lines
8.7 KiB
Python
201 lines
8.7 KiB
Python
|
|
# -*- 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()
|