Code cleanup, more tests
This commit is contained in:
parent
1c0052a0cf
commit
bfd0314109
16 changed files with 1212 additions and 478 deletions
|
|
@ -1,4 +1,6 @@
|
|||
import importlib
|
||||
import runpy
|
||||
import pytest
|
||||
|
||||
|
||||
def test_main_module_has_main():
|
||||
|
|
@ -9,3 +11,84 @@ def test_main_module_has_main():
|
|||
def test_dunder_main_imports_main():
|
||||
m = importlib.import_module("bouquin.__main__")
|
||||
assert hasattr(m, "main")
|
||||
|
||||
|
||||
def test_dunder_main_calls_main(monkeypatch):
|
||||
called = {"ok": False}
|
||||
|
||||
def fake_main():
|
||||
called["ok"] = True
|
||||
|
||||
# Replace real main with a stub to avoid launching Qt event loop
|
||||
monkeypatch.setenv("QT_QPA_PLATFORM", "offscreen")
|
||||
# Ensure that when __main__ imports from .main it gets our stub
|
||||
import bouquin.main as real_main
|
||||
|
||||
monkeypatch.setattr(real_main, "main", fake_main, raising=True)
|
||||
# Execute the module as a script
|
||||
runpy.run_module("bouquin.__main__", run_name="__main__")
|
||||
assert called["ok"]
|
||||
|
||||
|
||||
def test_main_creates_and_shows(monkeypatch):
|
||||
# Create a fake QApplication with the minimal API
|
||||
class FakeApp:
|
||||
def __init__(self, argv):
|
||||
self.ok = True
|
||||
|
||||
def setApplicationName(self, *_):
|
||||
pass
|
||||
|
||||
def setOrganizationName(self, *_):
|
||||
pass
|
||||
|
||||
def exec(self):
|
||||
return 0
|
||||
|
||||
class FakeWin:
|
||||
def __init__(self, themes=None):
|
||||
self.shown = False
|
||||
|
||||
def show(self):
|
||||
self.shown = True
|
||||
|
||||
class FakeSettings:
|
||||
def value(self, k, default=None):
|
||||
return "light" if k == "ui/theme" else default
|
||||
|
||||
# Patch imports inside bouquin.main
|
||||
import bouquin.main as m
|
||||
|
||||
monkeypatch.setattr(m, "QApplication", FakeApp, raising=True)
|
||||
monkeypatch.setattr(m, "MainWindow", FakeWin, raising=True)
|
||||
|
||||
# Theme classes
|
||||
class FakeTM:
|
||||
def __init__(self, app, cfg):
|
||||
pass
|
||||
|
||||
def apply(self, theme):
|
||||
pass
|
||||
|
||||
class FakeTheme:
|
||||
def __init__(self, s):
|
||||
pass
|
||||
|
||||
class FakeCfg:
|
||||
def __init__(self, theme):
|
||||
self.theme = theme
|
||||
|
||||
monkeypatch.setattr(m, "ThemeManager", FakeTM, raising=True)
|
||||
monkeypatch.setattr(m, "Theme", FakeTheme, raising=True)
|
||||
monkeypatch.setattr(m, "ThemeConfig", FakeCfg, raising=True)
|
||||
|
||||
# get_settings() used inside main()
|
||||
def fake_get_settings():
|
||||
return FakeSettings()
|
||||
|
||||
monkeypatch.setattr(m, "get_settings", fake_get_settings, raising=True)
|
||||
|
||||
# Run
|
||||
with pytest.raises(SystemExit) as e:
|
||||
m.main()
|
||||
assert e.value.code == 0
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue