aboutsummaryrefslogtreecommitdiffstats
path: root/test/data/common_steps/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/data/common_steps/app.py')
-rw-r--r--test/data/common_steps/app.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/test/data/common_steps/app.py b/test/data/common_steps/app.py
new file mode 100644
index 0000000..9615398
--- /dev/null
+++ b/test/data/common_steps/app.py
@@ -0,0 +1,87 @@
+# -- FILE: features/steps/example_steps.py
+import os
+import logging
+logging.basicConfig(format='%(levelname)s:%(funcName)s:%(message)s',
+ level=logging.INFO)
+from gi.repository import GLib
+from behave import then, step
+from time import sleep
+#from subprocess import Popen, PIPE
+from dogtail.tree import root, SearchError
+from dogtail.rawinput import keyCombo
+from dogtail.utils import doDelay
+#from ConfigParser import ConfigParser
+#, step
+
+
+@step(u'Press "{sequence}"')
+def press_button_sequence(context, sequence):
+ keyCombo(sequence)
+ sleep(0.5)
+
+
+def wait_for_app_to_appear(context, app):
+ # Waiting for a window to appear
+ for attempt in xrange(0, 10):
+ try:
+ context.app.instance = root.application(app.lower())
+ context.app.instance.child(roleName='frame')
+ break
+ except (GLib.GError, SearchError):
+ sleep(1)
+ if attempt == 6:
+ # Cleanup and restart app processes if we reached 30
+ # seconds wait
+ keyCombo("<Enter>")
+ os.system("python cleanup.py")
+ os.system("pkill -f %s 2&> /dev/null" % app.lower())
+ context.execute_steps(u"* Start %s via command" % app)
+ continue
+
+
+@step(u'Start {app:w} via {type:w}')
+def start_app_via_command(context, app, type):
+ for attempt in xrange(0, 10):
+ try:
+ if type == 'command':
+ context.app.startViaCommand()
+ if type == 'menu':
+ context.app.startViaMenu()
+ break
+ except GLib.GError:
+ sleep(1)
+ if attempt == 6:
+ # Killall the app processes if we reached 30 seconds wait
+ os.system("pkill -f %s 2&> /dev/null" % app.lower())
+ continue
+
+
+@step(u'Make sure that {app:w} is running')
+def ensure_app_running(context, app):
+ start_app_via_command(context, app, 'menu')
+ wait_for_app_to_appear(context, app)
+ logging.debug("app = %s", root.application(app.lower()))
+
+
+@then(u'{app:w} should start')
+def test_app_started(context, app):
+ wait_for_app_to_appear(context, app)
+
+
+@then(u"{app:w} shouldn't be running anymore")
+def test_app_dead(context, app):
+ app = app.lower()
+ doDelay(3)
+ logging.debug("app = %s", app)
+ try:
+ context.app.instance = root.application(app)
+ logging.debug("root instance = %s", app)
+ context.app.instance.child(roleName='frame')
+ except (GLib.GError, SearchError):
+ # We SHOULD fail here, because app shouldn't be found
+ logging.debug("Exception fired!")
+ return True
+ else:
+ # Bad, app is still running
+ logging.debug("No exception!")
+ return False