S1005403_RisCC/tests/test_main_entry.py

46 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')