Files
Phoenix/unittests/test_pyevent.py

188 lines
5.8 KiB
Python

import sys
import unittest
from unittests import wtc
import wx
##import os; print 'PID:', os.getpid(); raw_input('Ready to start, press enter...')
#---------------------------------------------------------------------------
class PyEvents(unittest.TestCase):
def test_PyEvent(self):
id = wx.Window.NewControlId()
typ = wx.NewEventType()
evt = wx.PyEvent(id, typ)
evt.newAttr = "hello"
evt2 = evt.Clone()
self.assertTrue(type(evt2) == wx.PyEvent)
self.assertTrue(evt is not evt2)
self.assertTrue(getattr(evt2, 'newAttr'))
self.assertTrue(evt.newAttr == evt2.newAttr)
self.assertTrue(evt.Id == evt2.Id)
self.assertTrue(evt.EventType == evt2.EventType)
def test_PyCommandEvent(self):
id = wx.Window.NewControlId()
typ = wx.NewEventType()
evt = wx.PyCommandEvent(id, typ)
evt.newAttr = "hello"
evt2 = evt.Clone()
self.assertTrue(type(evt2) == wx.PyCommandEvent)
self.assertTrue(evt is not evt2)
self.assertTrue(getattr(evt2, 'newAttr'))
self.assertTrue(evt.newAttr == evt2.newAttr)
self.assertTrue(evt.Id == evt2.Id)
self.assertTrue(evt.EventType == evt2.EventType)
def test_PyEvtCloneRefCounts(self):
# Since we're doing some funky stuff under the covers with Clone, make
# sure that the reference counts on everything (before and after)
# still make sense
evt1 = wx.PyEvent()
rc1 = sys.getrefcount(evt1)
evt1.attr = 'Howdy!'
evt2 = evt1.Clone()
rc2 = sys.getrefcount(evt2)
rc3 = sys.getrefcount(evt1)
self.assertTrue(rc1 == rc2 == rc3)
self.assertTrue(evt1.attr == evt2.attr)
def test_CppClone(self):
# test what happens when Clone is called from C++
if hasattr(wx, 'testCppClone'):
evt1 = wx.PyEvent()
evt1.attr = 'testCppClone'
evt2 = wx.testCppClone(evt1)
self.assertTrue(evt1.attr == evt2.attr)
def test_CppCloneDerived(self):
# test what happens when Clone is called from C++
if hasattr(wx, 'testCppClone'):
evt1 = MyPyEvent()
evt1.attr = 'testCppClone'
evt2 = wx.testCppClone(evt1)
self.assertTrue(evt1.attr == evt2.attr)
self.assertTrue(isinstance(evt2, MyPyEvent))
@unittest.skip('not testing refcounts for now, needs checking...')
def test_CppCloneRefCounts(self):
# Since we're doing some funky stuff under the covers with Clone, make
# sure that the reference counts on everything (before and after)
# still make sense
if hasattr(wx, 'testCppClone'):
evt1 = wx.PyEvent()
rc1 = sys.getrefcount(evt1)
evt1.attr = 'Howdy!'
evt2 = wx.testCppClone(evt1)
rc2 = sys.getrefcount(evt2)
rc3 = sys.getrefcount(evt1)
self.assertTrue(rc1 == rc2 == rc3)
self.assertTrue(evt1.attr == evt2.attr)
class MyPyEvent(wx.PyEvent):
def __init__(self, *args, **kw):
wx.PyEvent.__init__(self, *args, **kw)
self.one = 1
self.two = 2
self.three = 3
class MyPyCommandEvent(wx.PyCommandEvent):
def __init__(self, *args, **kw):
wx.PyEvent.__init__(self, *args, **kw)
self.one = 1
self.two = 2
self.three = 3
class SendingPyEvents(wtc.WidgetTestCase):
def test_PyEventDerivedClone(self):
evt1 = MyPyEvent(id=123)
evt1.four = 4
evt2 = evt1.Clone()
self.assertEqual(evt2.GetId(), 123)
self.assertEqual(evt2.one, 1)
self.assertEqual(evt2.two, 2)
self.assertEqual(evt2.three, 3)
self.assertEqual(evt2.four, 4)
self.assertTrue(isinstance(evt2, MyPyEvent))
self.assertTrue(evt1 is not evt2)
def test_PyCommandEventDerivedClone(self):
evt1 = MyPyCommandEvent(id=123)
evt1.four = 4
evt2 = evt1.Clone()
self.assertEqual(evt2.GetId(), 123)
self.assertEqual(evt2.one, 1)
self.assertEqual(evt2.two, 2)
self.assertEqual(evt2.three, 3)
self.assertEqual(evt2.four, 4)
self.assertTrue(isinstance(evt2, MyPyCommandEvent))
self.assertTrue(evt1 is not evt2)
def test_PyEventDerivedProcessEvent(self):
self.flag = False
def evtHandlerFunction(evt):
self.assertEqual(evt.GetId(), 123)
self.assertEqual(evt.one, 1)
self.assertEqual(evt.two, 2)
self.assertEqual(evt.three, 3)
self.assertEqual(evt.four, 4)
self.assertTrue(isinstance(evt, MyPyEvent))
self.flag = True
testType = wx.NewEventType()
EVT_TEST = wx.PyEventBinder(testType)
self.frame.Bind(EVT_TEST, evtHandlerFunction)
evt = MyPyEvent(id=123, eventType=testType)
evt.four = 4
self.frame.GetEventHandler().ProcessEvent(evt)
self.assertTrue(self.flag)
def test_PyEventDerivedPostEvent(self):
self.flag = False
def evtHandlerFunction(evt):
self.assertEqual(evt.GetId(), 123)
self.assertEqual(evt.one, 1)
self.assertEqual(evt.two, 2)
self.assertEqual(evt.three, 3)
self.assertEqual(evt.four, 4)
self.assertTrue(isinstance(evt, MyPyEvent))
self.flag = True
testType = wx.NewEventType()
EVT_TEST = wx.PyEventBinder(testType)
self.frame.Bind(EVT_TEST, evtHandlerFunction)
evt = MyPyEvent(id=123, eventType=testType)
evt.four = 4
wx.PostEvent(self.frame, evt)
del evt
self.myYield()
self.assertTrue(self.flag)
#---------------------------------------------------------------------------
if __name__ == '__main__':
unittest.main()