import types import importlib def test_main_calls_logging_and_mainloop(monkeypatch): # Prepare dummy MainView with attributes and a no-op mainloop calls = {} class DummyApp: def __init__(self): self.log_text_widget = object() def mainloop(self): calls["mainloop"] = True def after(self, ms, func, *args): # Immediately call the function for tests and return a fake id try: func(*args) except Exception: pass return f"after-{ms}" # Monkeypatch MainView used by __main__ (comes from gui.main_view.MainView) monkeypatch.setattr("target_simulator.gui.main_view.MainView", DummyApp) def fake_setup(app, cfg): calls["setup_basic_logging"] = True def fake_add_tkhandler(widget, cfg): calls["add_tkinter_handler"] = True # Reload module to ensure imports are fresh mod = importlib.import_module("target_simulator.__main__") importlib.reload(mod) # Assign our fakes onto the reloaded module so main() will use them mod.setup_basic_logging = fake_setup mod.add_tkinter_handler = fake_add_tkhandler # Call main (should not block due to DummyApp.mainloop) mod.main() assert calls.get("setup_basic_logging") assert calls.get("add_tkinter_handler") assert calls.get("mainloop")