aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_procedural.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_procedural.py')
-rw-r--r--tests/test_procedural.py213
1 files changed, 213 insertions, 0 deletions
diff --git a/tests/test_procedural.py b/tests/test_procedural.py
new file mode 100644
index 00000000000..820678a37b1
--- /dev/null
+++ b/tests/test_procedural.py
@@ -0,0 +1,213 @@
+#!/usr/bin/python
+"""
+Unit tests for the dogtail.procedural API
+"""
+__author__ = "Zack Cerza <zcerza@redhat.com>"
+
+from dogtail.procedural import focus, keyCombo, deselect, select, click, tree, FocusError, run, config, type
+config.logDebugToFile = False
+config.logDebugToStdOut = True
+import pyatspi
+from gtkdemotest import GtkDemoTest, trap_stdout
+from nose.tools import nottest
+
+
+class GtkDemoTest(GtkDemoTest):
+
+ def setUp(self):
+ self.pid = run('gtk3-demo')
+ self.app = focus.application.node
+
+ # FIXME: Implement doubleclick() in d.procedural and override the other
+ # methods of Node.GtkDemoTest
+
+
+class TestFocusApplication(GtkDemoTest):
+
+ def testFocusingBogusNameWithoutAFatalError(self):
+ config.fatalErrors = False
+ output = trap_stdout(focus.application, "should not be found")
+ self.assertTrue(
+ 'The requested widget could not be focused: "should not be found" application' in output)
+
+ def testThrowExceptionOnFocusingBogusName(self):
+ config.fatalErrors = True
+ self.assertRaises(FocusError, focus.application, "should not be found")
+
+ def testFocusingBasic(self):
+ "Ensure that focus.application() sets focus.application.node properly"
+ focus.application.node = None
+ focus.application("gtk3-demo")
+ self.assertEquals(focus.application.node, self.app)
+
+
+class TestFocusWindow(GtkDemoTest):
+
+ def testFocusingBogusNameWithoutAFatalError(self):
+ config.fatalErrors = False
+ output = trap_stdout(focus.window, "should not be found")
+ self.assertEquals(focus.window.node, None)
+ self.assertTrue(
+ 'The requested widget could not be focused: "should not be found" window' in output)
+
+ def testThrowExceptionOnFocusingBogusName(self):
+ config.fatalErrors = True
+ self.assertRaises(FocusError, focus.window, "should not be found")
+
+
+class TestFocusDialog(GtkDemoTest):
+
+ def testFocusingBogusNameWithoutAFatalError(self):
+ config.fatalErrors = False
+ output = trap_stdout(focus.dialog, "should not be found")
+ self.assertEquals(focus.dialog.node, None)
+ self.assertTrue(
+ 'The requested widget could not be focused: "should not be found" dialog' in output)
+
+ def testThrowExceptionOnFocusingBogusName(self):
+ config.fatalErrors = True
+ self.assertRaises(FocusError, focus.dialog, "should not be found")
+
+
+class TestFocusWidget(GtkDemoTest):
+
+ def testFocusingEmptyName(self):
+ self.assertRaises(TypeError, focus.widget)
+
+ def testFocusingBogusNameWithoutAFatalError(self):
+ config.fatalErrors = False
+ output = trap_stdout(focus.widget, "should not be found")
+ self.assertEquals(focus.widget.node, None)
+ self.assertTrue(
+ 'The requested widget could not be focused: child with name="should not be found"' in output)
+
+ def testThrowExceptionOnFocusingBogusName(self):
+ config.fatalErrors = True
+ self.assertRaises(FocusError, focus.widget, "should not be found")
+
+ def testFocusingBasic(self):
+ "Ensure that focus.widget('foo') finds a node with name 'foo'"
+ focus.widget("Application window")
+ self.assertEquals(focus.widget.name, "Application window")
+
+
+class TestFocus(GtkDemoTest):
+
+ def testInitialState(self):
+ "Ensure that focus.widget, focus.dialog and focus.window are None " + \
+ "initially."
+ self.assertEquals(focus.widget.node, None)
+ self.assertEquals(focus.dialog.node, None)
+ self.assertEquals(focus.window.node, None)
+
+ def testFocusingApp(self):
+ "Ensure that focus.app() works"
+ focus.app.node = None
+ focus.app('gtk3-demo')
+ self.assertEquals(focus.app.node, self.app)
+
+ def testFocusingAppViaApplication(self):
+ "Ensure that focus.application() works"
+ focus.app.node = None
+ focus.application('gtk3-demo')
+ self.assertEquals(focus.app.node, self.app)
+
+ def testFocusGettingBogusAttribute(self):
+ self.assertRaises(AttributeError, getattr, focus, 'nosuchtype')
+
+ def testFocusSettingBogusAttribute(self):
+ self.assertRaises(
+ AttributeError, setattr, focus, 'nosuchtype', 'nothing')
+
+ def testFocusingRoleName(self):
+ "Ensure that focus.widget(roleName=...) works."
+ focus.widget(roleName='page tab')
+ self.assert_(isinstance(focus.widget.node, tree.Node))
+ self.assertEquals(focus.widget.node.role, pyatspi.ROLE_PAGE_TAB)
+
+ def testFocusMenu(self):
+ self.runDemo('Application window')
+ focus.window('Application Window')
+ focus.menu('File')
+ self.assert_(isinstance(focus.widget.node, tree.Node))
+ self.assertEquals(focus.widget.node.role, pyatspi.ROLE_MENU)
+
+ def testFocusMenuItem(self):
+ self.runDemo('Application window')
+ focus.window('Application Window')
+ click.menu('File')
+ focus.menuItem('New')
+ self.assert_(isinstance(focus.widget.node, tree.Node))
+ self.assertEquals(focus.widget.node.role, pyatspi.ROLE_MENU_ITEM)
+
+ def testFocusButton(self):
+ self.runDemo('Application window')
+ focus.window('Application Window')
+ focus.button('Open')
+ self.assert_(isinstance(focus.widget.node, tree.Node))
+ self.assertEquals(focus.widget.node.role, pyatspi.ROLE_PUSH_BUTTON)
+
+ def testFocusTable(self):
+ self.runDemo('Builder')
+ focus.window('GtkBuilder demo')
+ focus.table('')
+ self.assert_(isinstance(focus.widget.node, tree.Node))
+ self.assertEquals(focus.widget.node.role, pyatspi.ROLE_TABLE)
+
+ def testFocusTableCell(self):
+ self.runDemo('Builder')
+ focus.window('GtkBuilder demo')
+ focus.tableCell('')
+ self.assert_(isinstance(focus.widget.node, tree.Node))
+ self.assertEquals(focus.widget.node.role, pyatspi.ROLE_TABLE_CELL)
+
+ def testFocusText(self):
+ self.runDemo('Application window')
+ focus.window('Application Window')
+ focus.text('')
+ self.assert_(isinstance(focus.widget.node, tree.Node))
+ self.assertEquals(focus.widget.node.role, pyatspi.ROLE_TEXT)
+
+
+class TestKeyCombo(GtkDemoTest):
+
+ def testKeyCombo(self):
+ self.runDemo('Application window')
+ focus.window('Application Window')
+ keyCombo("<ctrl>a")
+ focus.dialog('About GTK+ Code Demos')
+
+
+class TestActions(GtkDemoTest):
+
+ def testClick(self):
+ click('Source')
+ self.assertTrue(focus.widget.isSelected)
+
+ def testClickWithRaw(self):
+ click('Source', raw=True)
+ self.assertTrue(focus.widget.isSelected)
+
+ def testSelect(self):
+ select('Source')
+ self.assertTrue(focus.widget.isSelected)
+
+ @nottest
+ def testDeselect(self):
+ type('Icon View')
+ click('Icon View')
+ type('+')
+ self.runDemo('Icon View Basics')
+ focus.window('GtkIconView demo')
+
+ focus.widget(roleName='icon')
+ select()
+ deselect()
+ self.assertFalse(focus.widget.isSelected)
+
+ def testTyping(self):
+ self.runDemo('Dialog and Message Boxes')
+ focus.window('Dialogs')
+ focus.widget(roleName='text')
+ type("hello world")
+ self.assertEquals(focus.widget.node.text, 'hello world')