47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
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")
|