1import unittest 2from unittests import wtc 3import wx 4import sys, os 5 6WAIT=50 7 8#--------------------------------------------------------------------------- 9 10class MouseEventsPanel(wx.Panel): 11 def __init__(self, parent, eventBinders): 12 wx.Panel.__init__(self, parent, size=parent.GetClientSize()) 13 self.SetBackgroundColour('pink') 14 self.events = list() 15 if not isinstance(eventBinders, (list, tuple)): 16 eventBinders = [eventBinders] 17 for binder in eventBinders: 18 self.Bind(binder, self.onMouseEvent) 19 20 def onMouseEvent(self, evt): 21 self.events.append( (evt.EventType, evt.Position) ) 22 print( (evt.EventType, evt.Position) ) 23 evt.Skip() 24 25 26 27class uiaction_MouseTests(wtc.WidgetTestCase): 28 29 30 def cmp(self, info, evtType, pos): 31 if isinstance(evtType, tuple): 32 if info[0] not in evtType: 33 return False 34 else: 35 if info[0] != evtType: 36 return False 37 # TODO: The mouse pos may be off by 1 on MSW, is this expected? 38 if abs(info[1].x - pos[0]) > 1: 39 return False 40 if abs(info[1].y - pos[1]) > 1: 41 return False 42 return True 43 44 def setUp(self): 45 super(uiaction_MouseTests, self).setUp() 46 self.frame.WarpPointer(-10,-10) 47 48 49 def test_uiactionMouseMotion(self): 50 p = MouseEventsPanel(self.frame, wx.EVT_MOTION) 51 self.myYield() 52 53 uia = wx.UIActionSimulator() 54 uia.MouseMove(p.ClientToScreen((1,1))); self.waitFor(WAIT) 55 uia.MouseMove(p.ClientToScreen((5,5))); self.waitFor(WAIT) 56 uia.MouseMove(p.ClientToScreen((10,10)).x, p.ClientToScreen((10,10)).y) 57 self.waitFor(WAIT) 58 self.waitFor(WAIT) 59 60 self.assertEqual(len(p.events), 3) 61 self.assertTrue(self.cmp(p.events[0], wx.wxEVT_MOTION, (1,1))) 62 self.assertTrue(self.cmp(p.events[1], wx.wxEVT_MOTION, (5,5))) 63 self.assertTrue(self.cmp(p.events[2], wx.wxEVT_MOTION, (10,10))) 64 65 66 def test_uiactionMouseLeftDownUp(self): 67 p = MouseEventsPanel(self.frame, [wx.EVT_LEFT_DOWN, wx.EVT_LEFT_UP]) 68 self.myYield() 69 70 uia = wx.UIActionSimulator() 71 uia.MouseMove(p.ClientToScreen((10,10))); self.waitFor(WAIT) 72 uia.MouseDown(); self.waitFor(WAIT) 73 uia.MouseUp(); self.waitFor(WAIT) 74 self.waitFor(WAIT) 75 76 self.assertTrue(len(p.events) == 2) 77 self.assertTrue(self.cmp(p.events[0], wx.wxEVT_LEFT_DOWN, (10,10))) 78 self.assertTrue(self.cmp(p.events[1], wx.wxEVT_LEFT_UP, (10,10))) 79 80 81 def test_uiactionMouseRightDownUp(self): 82 p = MouseEventsPanel(self.frame, [wx.EVT_RIGHT_DOWN, wx.EVT_RIGHT_UP]) 83 self.myYield() 84 85 uia = wx.UIActionSimulator() 86 uia.MouseMove(p.ClientToScreen((10,10))); self.waitFor(WAIT) 87 uia.MouseDown(wx.MOUSE_BTN_RIGHT); self.waitFor(WAIT) 88 uia.MouseUp(wx.MOUSE_BTN_RIGHT); self.waitFor(WAIT) 89 self.waitFor(WAIT) 90 91 self.assertTrue(len(p.events) == 2) 92 self.assertTrue(self.cmp(p.events[0], wx.wxEVT_RIGHT_DOWN, (10,10))) 93 self.assertTrue(self.cmp(p.events[1], wx.wxEVT_RIGHT_UP, (10,10))) 94 95 96 def test_uiactionMouseLeftClick(self): 97 p = MouseEventsPanel(self.frame, [wx.EVT_LEFT_DOWN, wx.EVT_LEFT_UP]) 98 self.myYield() 99 100 uia = wx.UIActionSimulator() 101 uia.MouseMove(p.ClientToScreen((10,10))); self.waitFor(WAIT) 102 uia.MouseClick(); self.waitFor(WAIT) 103 self.waitFor(WAIT) 104 105 self.assertTrue(len(p.events) == 2) 106 self.assertTrue(self.cmp(p.events[0], wx.wxEVT_LEFT_DOWN, (10,10))) 107 self.assertTrue(self.cmp(p.events[1], wx.wxEVT_LEFT_UP, (10,10))) 108 109 110 def test_uiactionMouseLeftDClick(self): 111 p = MouseEventsPanel(self.frame, [wx.EVT_LEFT_DOWN, wx.EVT_LEFT_UP, wx.EVT_LEFT_DCLICK]) 112 self.myYield() 113 114 uia = wx.UIActionSimulator() 115 uia.MouseMove(p.ClientToScreen((10,10))); self.waitFor(WAIT) 116 uia.MouseDblClick(); self.waitFor(WAIT) 117 self.waitFor(WAIT) 118 119 self.assertTrue(len(p.events) == 4) 120 self.assertTrue(self.cmp(p.events[0], wx.wxEVT_LEFT_DOWN, (10,10))) 121 self.assertTrue(self.cmp(p.events[1], wx.wxEVT_LEFT_UP, (10,10))) 122 self.assertTrue(self.cmp(p.events[2], (wx.wxEVT_LEFT_DOWN, wx.wxEVT_LEFT_DCLICK), (10,10))) 123 self.assertTrue(self.cmp(p.events[3], wx.wxEVT_LEFT_UP, (10,10))) 124 125 126 def test_uiactionMouseDD(self): 127 p = MouseEventsPanel(self.frame, [wx.EVT_MOTION, wx.EVT_LEFT_DOWN, wx.EVT_LEFT_UP]) 128 129 x1, y1 = p.ClientToScreen((10,10)) 130 x2 = x1 + 20 131 y2 = y1 + 20 132 133 uia = wx.UIActionSimulator() 134 uia.MouseDragDrop(x1,y1, x2,y2); self.waitFor(WAIT) 135 self.waitFor(WAIT) 136 137 self.assertEqual(len(p.events), 4) 138 self.assertTrue(self.cmp(p.events[0], wx.wxEVT_MOTION, (10,10))) 139 self.assertTrue(self.cmp(p.events[1], wx.wxEVT_LEFT_DOWN, (10,10))) 140 self.assertTrue(self.cmp(p.events[2], wx.wxEVT_MOTION, (30,30))) 141 self.assertTrue(self.cmp(p.events[3], wx.wxEVT_LEFT_UP, (30,30))) 142 143 144#--------------------------------------------------------------------------- 145 146 147class uiaction_KeyboardTests(wtc.WidgetTestCase): 148 149 def setUp(self): 150 super(uiaction_KeyboardTests, self).setUp() 151 pnl = wx.Panel(self.frame) 152 pnl.SetBackgroundColour('pink') 153 self.tc = wx.TextCtrl(pnl) 154 self.tc.SetFocus() 155 self.waitFor(WAIT) 156 157 158 def test_uiactionKeyboardKeyDownUp(self): 159 uia = wx.UIActionSimulator() 160 for c in "This is a test": 161 if c.isupper(): 162 uia.KeyDown(wx.WXK_SHIFT); self.waitFor(WAIT) 163 uia.KeyDown(ord(c)); self.waitFor(WAIT) 164 uia.KeyUp(ord(c)); self.waitFor(WAIT) 165 if c.isupper(): 166 uia.KeyUp(wx.WXK_SHIFT); self.waitFor(WAIT) 167 self.waitFor(WAIT*2) 168 169 self.assertEqual(self.tc.GetValue(), "This is a test") 170 171 172 @unittest.skipIf(sys.platform == 'darwin', 'wx.UIActionSimulator.Char needs work...') 173 def test_uiactionKeyboardChar(self): 174 uia = wx.UIActionSimulator() 175 for c in "This is a test": 176 mod = wx.MOD_NONE 177 if c.isupper(): 178 mod = wx.MOD_SHIFT 179 uia.Char(ord(c), mod); 180 self.waitFor(WAIT) 181 self.waitFor(WAIT*2) 182 183 self.assertEqual(self.tc.GetValue(), "This is a test") 184 185 186 @unittest.skipIf(sys.platform == 'darwin', 'wx.UIActionSimulator.Text needs work...') 187 def test_uiactionKeyboardText(self): 188 uia = wx.UIActionSimulator() 189 uia.Text("This is a test") 190 self.waitFor(WAIT*2) 191 192 self.assertEqual(self.tc.GetValue(), "This is a test") 193 194 195#--------------------------------------------------------------------------- 196 197 198if __name__ == '__main__': 199 unittest.main() 200