S1005403_RisCC/tests/test_main_entry.py

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")