mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2025-09-05 01:10:12 +02:00
151 lines
4.3 KiB
Python
151 lines
4.3 KiB
Python
import unittest
|
|
import wx
|
|
import sys, os
|
|
import six
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
class WidgetTestCase(unittest.TestCase):
|
|
"""
|
|
A testcase that will create an app and frame for various widget test
|
|
modules to use. They can inherit from this class to save some work. This
|
|
is also good for test cases that just need to have an application object
|
|
created.
|
|
"""
|
|
def setUp(self):
|
|
self.app = wx.App()
|
|
wx.Log.SetActiveTarget(wx.LogStderr())
|
|
self.frame = wx.Frame(None, title='WTC: '+self.__class__.__name__)
|
|
self.frame.Show()
|
|
self.frame.PostSizeEvent()
|
|
|
|
def tearDown(self):
|
|
def _cleanup():
|
|
for tlw in wx.GetTopLevelWindows():
|
|
if tlw:
|
|
if isinstance(tlw, wx.Dialog) and tlw.IsModal():
|
|
tlw.EndModal(0)
|
|
wx.CallAfter(tlw.Destroy)
|
|
else:
|
|
tlw.Close(force=True)
|
|
wx.WakeUpIdle()
|
|
|
|
timer = wx.PyTimer(_cleanup)
|
|
timer.Start(100)
|
|
self.app.MainLoop()
|
|
del self.app
|
|
|
|
|
|
# helper methods
|
|
|
|
def myYield(self, eventsToProcess=wx.EVT_CATEGORY_ALL):
|
|
"""
|
|
Since the tests are usually run before MainLoop is called then we
|
|
need to make our own EventLoop for Yield to actually do anything
|
|
useful.
|
|
"""
|
|
evtLoop = self.app.GetTraits().CreateEventLoop()
|
|
activator = wx.EventLoopActivator(evtLoop) # automatically restores the old one
|
|
evtLoop.YieldFor(eventsToProcess)
|
|
|
|
def myUpdate(self, window):
|
|
"""
|
|
Since Update() will not trigger paint events on Mac faster than
|
|
1/30 of second we need to wait a little to ensure that there will
|
|
actually be a paint event while we are yielding.
|
|
"""
|
|
if 'wxOSX' in wx.PlatformInfo:
|
|
wx.MilliSleep(40) # a little more than 1/30, just in case
|
|
window.Update()
|
|
|
|
|
|
def closeDialogs(self):
|
|
"""
|
|
Close dialogs by calling their EndModal method
|
|
"""
|
|
#self.myYield()
|
|
for w in wx.GetTopLevelWindows():
|
|
if isinstance(w, wx.Dialog):
|
|
w.EndModal(wx.ID_CANCEL)
|
|
|
|
|
|
def waitFor(self, milliseconds):
|
|
INTERVAL = 100
|
|
intervals = milliseconds/INTERVAL
|
|
while True:
|
|
wx.MilliSleep(INTERVAL)
|
|
self.myYield()
|
|
if hasattr(self, 'flag') and self.flag:
|
|
break
|
|
if intervals <= 0:
|
|
break
|
|
intervals -= 1
|
|
|
|
|
|
def myExecfile(self, filename, ns):
|
|
if not six.PY3:
|
|
execfile(filename, ns)
|
|
else:
|
|
with open(filename, 'r') as f:
|
|
source = f.read()
|
|
exec(source, ns)
|
|
|
|
|
|
def execSample(self, name):
|
|
ns = Namespace()
|
|
samplesDir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../samples'))
|
|
self.myExecfile(os.path.join(samplesDir, name), ns.dict())
|
|
return ns
|
|
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
class Namespace(object):
|
|
def dict(self):
|
|
return self.__dict__
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
def mybytes(text):
|
|
if six.PY3:
|
|
return bytes(text, 'utf-8')
|
|
else:
|
|
return str(text)
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
|
|
class PubsubTestCase(unittest.TestCase):
|
|
"""
|
|
A testcase specifically to test wx.lib.pubsub, as pub is a singleton
|
|
the tearDown removes it from sys.modules to force a reinitialization on
|
|
each test.
|
|
"""
|
|
|
|
def setUp(self):
|
|
from wx.lib.pubsub import pub
|
|
|
|
self.pub = pub
|
|
self.assertEqual(pub, self.pub)
|
|
|
|
def tearDown(self):
|
|
self.pub.unsubAll()
|
|
self.pub.clearNotificationHandlers()
|
|
self.pub.clearTopicDefnProviders()
|
|
topicMgr = self.pub.getDefaultTopicMgr()
|
|
try:
|
|
# remove the test topic if present
|
|
if topicMgr.getTopic('pubsub'):
|
|
topicMgr.delTopic('pubsub')
|
|
except:
|
|
pass
|
|
del self.pub
|
|
|
|
if 'wx.lib.pubsub.pub' in sys.modules.keys():
|
|
del sys.modules['wx.lib.pubsub.pub']
|
|
|
|
#skeys = sys.modules.keys()
|
|
#for name in skeys:
|
|
#del sys.modules[name]
|