Files
Phoenix/unittests/test_uiaction.py
2016-12-05 16:19:11 -06:00

200 lines
6.8 KiB
Python

import unittest
from unittests import wtc
import wx
import sys, os
WAIT=50
#---------------------------------------------------------------------------
class MouseEventsPanel(wx.Panel):
def __init__(self, parent, eventBinders):
wx.Panel.__init__(self, parent, size=parent.GetClientSize())
self.SetBackgroundColour('pink')
self.events = list()
if not isinstance(eventBinders, (list, tuple)):
eventBinders = [eventBinders]
for binder in eventBinders:
self.Bind(binder, self.onMouseEvent)
def onMouseEvent(self, evt):
self.events.append( (evt.EventType, evt.Position) )
print( (evt.EventType, evt.Position) )
evt.Skip()
class uiaction_MouseTests(wtc.WidgetTestCase):
def cmp(self, info, evtType, pos):
if isinstance(evtType, tuple):
if info[0] not in evtType:
return False
else:
if info[0] != evtType:
return False
# TODO: The mouse pos may be off by 1 on MSW, is this expected?
if abs(info[1].x - pos[0]) > 1:
return False
if abs(info[1].y - pos[1]) > 1:
return False
return True
def setUp(self):
super(uiaction_MouseTests, self).setUp()
self.frame.WarpPointer(-10,-10)
def test_uiactionMouseMotion(self):
p = MouseEventsPanel(self.frame, wx.EVT_MOTION)
self.myYield()
uia = wx.UIActionSimulator()
uia.MouseMove(p.ClientToScreen((1,1))); self.waitFor(WAIT)
uia.MouseMove(p.ClientToScreen((5,5))); self.waitFor(WAIT)
uia.MouseMove(p.ClientToScreen((10,10)).x, p.ClientToScreen((10,10)).y)
self.waitFor(WAIT)
self.waitFor(WAIT)
self.assertEqual(len(p.events), 3)
self.assertTrue(self.cmp(p.events[0], wx.wxEVT_MOTION, (1,1)))
self.assertTrue(self.cmp(p.events[1], wx.wxEVT_MOTION, (5,5)))
self.assertTrue(self.cmp(p.events[2], wx.wxEVT_MOTION, (10,10)))
def test_uiactionMouseLeftDownUp(self):
p = MouseEventsPanel(self.frame, [wx.EVT_LEFT_DOWN, wx.EVT_LEFT_UP])
self.myYield()
uia = wx.UIActionSimulator()
uia.MouseMove(p.ClientToScreen((10,10))); self.waitFor(WAIT)
uia.MouseDown(); self.waitFor(WAIT)
uia.MouseUp(); self.waitFor(WAIT)
self.waitFor(WAIT)
self.assertTrue(len(p.events) == 2)
self.assertTrue(self.cmp(p.events[0], wx.wxEVT_LEFT_DOWN, (10,10)))
self.assertTrue(self.cmp(p.events[1], wx.wxEVT_LEFT_UP, (10,10)))
def test_uiactionMouseRightDownUp(self):
p = MouseEventsPanel(self.frame, [wx.EVT_RIGHT_DOWN, wx.EVT_RIGHT_UP])
self.myYield()
uia = wx.UIActionSimulator()
uia.MouseMove(p.ClientToScreen((10,10))); self.waitFor(WAIT)
uia.MouseDown(wx.MOUSE_BTN_RIGHT); self.waitFor(WAIT)
uia.MouseUp(wx.MOUSE_BTN_RIGHT); self.waitFor(WAIT)
self.waitFor(WAIT)
self.assertTrue(len(p.events) == 2)
self.assertTrue(self.cmp(p.events[0], wx.wxEVT_RIGHT_DOWN, (10,10)))
self.assertTrue(self.cmp(p.events[1], wx.wxEVT_RIGHT_UP, (10,10)))
def test_uiactionMouseLeftClick(self):
p = MouseEventsPanel(self.frame, [wx.EVT_LEFT_DOWN, wx.EVT_LEFT_UP])
self.myYield()
uia = wx.UIActionSimulator()
uia.MouseMove(p.ClientToScreen((10,10))); self.waitFor(WAIT)
uia.MouseClick(); self.waitFor(WAIT)
self.waitFor(WAIT)
self.assertTrue(len(p.events) == 2)
self.assertTrue(self.cmp(p.events[0], wx.wxEVT_LEFT_DOWN, (10,10)))
self.assertTrue(self.cmp(p.events[1], wx.wxEVT_LEFT_UP, (10,10)))
def test_uiactionMouseLeftDClick(self):
p = MouseEventsPanel(self.frame, [wx.EVT_LEFT_DOWN, wx.EVT_LEFT_UP, wx.EVT_LEFT_DCLICK])
self.myYield()
uia = wx.UIActionSimulator()
uia.MouseMove(p.ClientToScreen((10,10))); self.waitFor(WAIT)
uia.MouseDblClick(); self.waitFor(WAIT)
self.waitFor(WAIT)
self.assertTrue(len(p.events) == 4)
self.assertTrue(self.cmp(p.events[0], wx.wxEVT_LEFT_DOWN, (10,10)))
self.assertTrue(self.cmp(p.events[1], wx.wxEVT_LEFT_UP, (10,10)))
self.assertTrue(self.cmp(p.events[2], (wx.wxEVT_LEFT_DOWN, wx.wxEVT_LEFT_DCLICK), (10,10)))
self.assertTrue(self.cmp(p.events[3], wx.wxEVT_LEFT_UP, (10,10)))
def test_uiactionMouseDD(self):
p = MouseEventsPanel(self.frame, [wx.EVT_MOTION, wx.EVT_LEFT_DOWN, wx.EVT_LEFT_UP])
x1, y1 = p.ClientToScreen((10,10))
x2 = x1 + 20
y2 = y1 + 20
uia = wx.UIActionSimulator()
uia.MouseDragDrop(x1,y1, x2,y2); self.waitFor(WAIT)
self.waitFor(WAIT)
self.assertEqual(len(p.events), 4)
self.assertTrue(self.cmp(p.events[0], wx.wxEVT_MOTION, (10,10)))
self.assertTrue(self.cmp(p.events[1], wx.wxEVT_LEFT_DOWN, (10,10)))
self.assertTrue(self.cmp(p.events[2], wx.wxEVT_MOTION, (30,30)))
self.assertTrue(self.cmp(p.events[3], wx.wxEVT_LEFT_UP, (30,30)))
#---------------------------------------------------------------------------
class uiaction_KeyboardTests(wtc.WidgetTestCase):
def setUp(self):
super(uiaction_KeyboardTests, self).setUp()
pnl = wx.Panel(self.frame)
pnl.SetBackgroundColour('pink')
self.tc = wx.TextCtrl(pnl)
self.tc.SetFocus()
self.waitFor(WAIT)
def test_uiactionKeyboardKeyDownUp(self):
uia = wx.UIActionSimulator()
for c in "This is a test":
if c.isupper():
uia.KeyDown(wx.WXK_SHIFT); self.waitFor(WAIT)
uia.KeyDown(ord(c)); self.waitFor(WAIT)
uia.KeyUp(ord(c)); self.waitFor(WAIT)
if c.isupper():
uia.KeyUp(wx.WXK_SHIFT); self.waitFor(WAIT)
self.waitFor(WAIT*2)
self.assertEqual(self.tc.GetValue(), "This is a test")
@unittest.skipIf(sys.platform == 'darwin', 'wx.UIActionSimulator.Char needs work...')
def test_uiactionKeyboardChar(self):
uia = wx.UIActionSimulator()
for c in "This is a test":
mod = wx.MOD_NONE
if c.isupper():
mod = wx.MOD_SHIFT
uia.Char(ord(c), mod);
self.waitFor(WAIT)
self.waitFor(WAIT*2)
self.assertEqual(self.tc.GetValue(), "This is a test")
@unittest.skipIf(sys.platform == 'darwin', 'wx.UIActionSimulator.Text needs work...')
def test_uiactionKeyboardText(self):
uia = wx.UIActionSimulator()
uia.Text("This is a test")
self.waitFor(WAIT*2)
self.assertEqual(self.tc.GetValue(), "This is a test")
#---------------------------------------------------------------------------
if __name__ == '__main__':
unittest.main()