summaryrefslogtreecommitdiff
diff options
-rwxr-xr-xtools/autopilot170
1 files changed, 19 insertions, 151 deletions
diff --git a/tools/autopilot b/tools/autopilot
index e85120940..b144ff608 100755
--- a/tools/autopilot
+++ b/tools/autopilot
@@ -1,162 +1,30 @@
-#!/usr/bin/env python
+#!/bin/sh
-from imp import find_module
-import os
-import os.path
-import sys
-from textwrap import dedent
-from argparse import ArgumentParser
-from unittest.loader import TestLoader
-from unittest.runner import TextTestRunner
+# This script can be removed from the Unity source tree once people are happy
+# with the new setup.
+echo "Autopilot has moved!
-# list autopilot depends here, with the form:
-# ('python module name', 'ubuntu package name'),
-DEPENDS = [
- ('compizconfig', 'python-compizconfig'),
- ('dbus', 'python-dbus'),
- ('gobject', 'python-gobject'),
- ('gtk', 'python-gtk2'),
- ('ibus', 'python-ibus'),
- ('junitxml', 'python-junitxml'),
- ('testscenarios', 'python-testscenarios'),
- ('testtools', 'python-testtools'),
- ('xdg', 'python-xdg'),
- ('Xlib', 'python-xlib'),
-]
+Autopilot used to be part of the unity source tree. It's now it's own launchpad
+project. To install it, you need to execute the following:
+ sudo add-apt-repository ppa:thomir/autopilot
+ sudo apt-get update && sudo apt-get install autopilot
+
+Then, to list all the autopilot tests in the unity package, run:
-def check_depends():
- """Check for required dependancies, and print a helpful message if any are
- missing.
+ autopilot list unity
+
+To run all the unity tests:
- If all required modules are present, return True, False otherwise.
- """
- missing = []
- for module_name, package_name in DEPENDS:
- try:
- find_module(module_name)
- except ImportError:
- missing.append(package_name)
- if missing:
- print dedent("""\
- You are missing one or more packages required to run autopilot. They
- are:
+ autopilot run unity
+
+Note that for both these commands to work, you must have either run 'make install'
+inside the source tree, or have the tests/autopilot directory in your PYTHONPATH
+environment variable."
- %s
- Please install these packages and re-run this script.
- """ % (' '.join(missing))
- )
- return False
- return True
-def ensure_autopilot_is_importable():
- """Patch sys.path with the local autopilot directory if it's not already
- importable.
- """
- try:
- find_module("autopilot")
- except ImportError:
- ap_dir = os.path.join(os.path.dirname(__file__),
- "../tests/autopilot")
- ap_dir = os.path.realpath(ap_dir)
- sys.path.append(ap_dir)
- print "Patching sys.path to include local autopilot folder '%s'\n" % ap_dir
-
-def parse_arguments():
- """Parse command-line arguments, and return an argparse arguments object."""
- parser = ArgumentParser(description="Autopilot test-runner")
- subparsers = parser.add_subparsers(help='Run modes', dest="mode")
-
- parser_run = subparsers.add_parser('run', help="Run autopilot tests")
- parser_run.add_argument('-o', "--output", required=False,
- help='Write test result report to file. Defaults to stdout')
- parser_run.add_argument('-f', "--format", choices=['text', 'xml'], default='text',
- required=False, help='Specify desired output format. Default is "text".')
- parser_run.add_argument('-r', '--record', action='store_true', default=False,
- required=False, help="Record failing tests. Required 'recordmydesktop' app to be installed. Videos \
- are stored in /tmp/autopilot.")
- parser_run.add_argument("-rd", "--record-directory", required=False,
- default="/tmp/autopilot", type=str, help="Directory to put recorded tests (only if -r) specified.")
- parser_run.add_argument("test", nargs="*", help="Specify tests to run, as listed by the 'list' command")
-
-
- parser_list = subparsers.add_parser('list', help="List autopilot tests")
- args = parser.parse_args()
-
- return args
-
-
-def list_tests():
- """Print a list of tests we find inside autopilot.tests."""
- num_tests = 0
- from testtools import iterate_tests
- loader = TestLoader()
- test_suite = loader.discover('autopilot.tests')
- print "Listing all autopilot tests:"
- print
- for test in iterate_tests(test_suite):
- has_scenarios = hasattr(test, "scenarios")
- if has_scenarios:
- num_tests += len(test.scenarios)
- print " *%d %s" % (len(test.scenarios), test.id())
- else:
- num_tests += 1
- print test.id()
- print "\n %d total tests." % (num_tests)
-
-
-def run_tests(args):
- """Run tests, using input from `args`."""
- import junitxml
- import autopilot.globals
-
- if args.record:
- autopilot.globals.video_recording_enabled = True
- autopilot.globals.video_record_directory = args.record_directory
-
- loader = TestLoader()
- if args.test:
- test_suite = loader.loadTestsFromNames(args.test)
- else:
- test_suite = loader.discover('autopilot.tests')
-
- if args.output == None:
- results_stream = sys.stdout
- else:
- try:
- path = os.path.dirname(args.output)
- if path != '' and not os.path.exists(path):
- os.makedirs(path)
- results_stream = open(args.output, 'w')
- except:
- results_stream = sys.stdout
- if args.format == "xml":
- result = junitxml.JUnitXmlResult(results_stream)
- result.startTestRun()
- test_suite.run(result)
- result.stopTestRun()
- results_stream.close()
- if not result.wasSuccessful:
- exit(1)
- elif args.format == "text":
- runner = TextTestRunner(stream=results_stream)
- success = runner.run(test_suite).wasSuccessful()
- if not success:
- exit(1)
-
-def main():
- args = parse_arguments()
- if args.mode == 'list':
- list_tests()
- elif args.mode == 'run':
- run_tests(args)
-
-if __name__ == "__main__":
- if not check_depends():
- exit(1)
- ensure_autopilot_is_importable()
- main()
+