You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.6 KiB

from contextlib import contextmanager
import time
from threading import Thread
from typing import Tuple
import wx
from gooey.gui import bootstrap
from gooey.python_bindings.config_generator import create_from_parser
from gooey.python_bindings.parameters import gooey_params
from gooey.util.functional import merge
from gooey.gui.application.application import RGooey
@contextmanager
def instrumentGooey(parser, **kwargs) -> Tuple[wx.App, wx.Frame, RGooey]:
"""
Context manager used during testing for setup/tear down of the
WX infrastructure during subTests.
Weirdness warning: this uses a globally reused wx.App instance.
"""
from gooey.tests import app
if app == None:
raise Exception("App instance has not been created! This is likely due to "
"you forgetting to add the magical import which makes all these "
"tests work. See the module doc in gooey.tests.__init__ for guidance")
buildspec = create_from_parser(parser, "", **gooey_params(**kwargs))
app, frame = bootstrap._build_app(buildspec, app)
app.SetTopWindow(frame)
try:
# we need to run the main loop temporarily to get it to
# apply any pending updates from the initial creation.
# The UI state will be stale otherwise
# this works because CallLater just enqueues the message to
# be processed. The MainLoop starts running, picks it up, and
# then exists
wx.CallLater(1, app.ExitMainLoop)
app.MainLoop()
yield (app, frame, frame._instance)
finally:
frame.Destroy()
del frame