pytest is not correctly auto-installed
[WebKit-https.git] / Tools / Scripts / run-webdriver-tests
1 #!/usr/bin/env python
2
3 # Copyright (C) 2017 Igalia S.L.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 # 1.  Redistributions of source code must retain the above copyright
9 #     notice, this list of conditions and the following disclaimer.
10 # 2.  Redistributions in binary form must reproduce the above copyright
11 #     notice, this list of conditions and the following disclaimer in the
12 #     documentation and/or other materials provided with the distribution.
13 #
14 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
15 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
25 import logging
26 import optparse
27 import sys
28
29 from webkitpy.common.host import Host
30 from webkitpy.webdriver_tests.webdriver_test_runner import WebDriverTestRunner
31 from webkitpy.common.system.logutils import configure_logging
32
33 _log = logging.getLogger(__name__)
34
35 option_parser = optparse.OptionParser(usage='usage: %prog [options] [test...]')
36 option_parser.add_option('--verbose', action='store_true', dest='verbose',
37                          help='Show debug message')
38 option_parser.add_option('--platform', action='store',
39                          help='Platform to use (e.g., "gtk")')
40 option_parser.add_option('--gtk', action='store_const', dest='platform', const='gtk',
41                          help='Alias for --platform=gtk')
42 option_parser.add_option('--wpe', action='store_const', dest='platform', const='wpe',
43                          help='Alias for --platform=wpe')
44 option_parser.add_option('--release', action='store_const', const='Release', dest="configuration",
45                          help='Set the configuration to Release')
46 option_parser.add_option('--debug', action='store_const', const='Debug', dest="configuration",
47                          help='Set the configuration to Debug')
48 option_parser.add_option('--timeout', action='store', type='int', dest='timeout', default=10,
49                          help='Time in seconds until a test times out (use 0 to disable)')
50 option_parser.add_option('--json-output', action='store', metavar="FILE",
51                          help='Write results to JSON file at the given path')
52 option_parser.add_option('--display-server', choices=['xvfb', 'xorg', 'weston', 'wayland', 'headless'], default='xvfb',
53                          help='"xvfb": Use a virtualized X11 server. "xorg": Use the current X11 session. '
54                               '"weston": Use a virtualized Weston server. "wayland": Use the current wayland session.'
55                               '"headless": Headless mode in current session')
56
57 options, args = option_parser.parse_args()
58
59 configure_logging(logging.DEBUG if options.verbose else logging.INFO)
60
61 try:
62     port = Host().port_factory.get(options.platform, options)
63 except NotImplementedError, e:
64     _log.error(str(e))
65     sys.exit(-1)
66
67 if port.name() in ['gtk', 'wpe']:
68     import os
69
70     top_level_directory = os.path.normpath(os.path.join(os.path.dirname(__file__), '..', '..'))
71     sys.path.insert(0, os.path.join(top_level_directory, 'Tools', 'flatpak'))
72     import flatpakutils
73     flatpakutils.run_in_sandbox_if_available(sys.argv)
74     if not flatpakutils.is_sandboxed():
75         sys.path.insert(0, os.path.join(top_level_directory, 'Tools', 'jhbuild'))
76         import jhbuildutils
77
78         if not jhbuildutils.enter_jhbuild_environment_if_available(port.name()):
79             print '***'
80             print '*** Warning: jhbuild environment not present and not running in flatpak.'
81             print '*** Run update-webkitgtk-libs or update-webkitgtk-flatpak before build-webkit to ensure proper testing..'
82             print '***'
83
84 port._display_server = options.display_server
85 runner = WebDriverTestRunner(port)
86 runner.run(args)
87 runner.teardown()
88 retval = runner.process_results()
89
90 if options.json_output is not None:
91     runner.dump_results_to_json_file(options.json_output)
92
93 sys.exit(retval)
94