1d0825bca7fe65beaee391d30da42e937db621564Steve Block# Copyright (C) 2010 Google Inc. All rights reserved.
2d0825bca7fe65beaee391d30da42e937db621564Steve Block#
3231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# Redistribution and use in source and binary forms, with or without
4231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# modification, are permitted provided that the following conditions are
5231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# met:
6231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#
7231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#     * Redistributions of source code must retain the above copyright
8231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# notice, this list of conditions and the following disclaimer.
9231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#     * Redistributions in binary form must reproduce the above
10231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# copyright notice, this list of conditions and the following disclaimer
11231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# in the documentation and/or other materials provided with the
12231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# distribution.
13231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#     * Neither the name of Google Inc. nor the names of its
14231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# contributors may be used to endorse or promote products derived from
15231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# this software without specific prior written permission.
16231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#
17231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.tool.steps.abstractstep import AbstractStep
30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.tool.steps.options import Options
31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.common.system.deprecated_logging import log
32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
33d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass RunTests(AbstractStep):
342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    # FIXME: This knowledge really belongs in the commit-queue.
352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    NON_INTERACTIVE_FAILURE_LIMIT_COUNT = 10
362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
37d0825bca7fe65beaee391d30da42e937db621564Steve Block    @classmethod
38d0825bca7fe65beaee391d30da42e937db621564Steve Block    def options(cls):
3921939df44de1705786c545cd1bf519d47250322dBen Murdoch        return AbstractStep.options() + [
40d0825bca7fe65beaee391d30da42e937db621564Steve Block            Options.test,
41d0825bca7fe65beaee391d30da42e937db621564Steve Block            Options.non_interactive,
42d0825bca7fe65beaee391d30da42e937db621564Steve Block            Options.quiet,
43d0825bca7fe65beaee391d30da42e937db621564Steve Block        ]
44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
45d0825bca7fe65beaee391d30da42e937db621564Steve Block    def run(self, state):
46d0825bca7fe65beaee391d30da42e937db621564Steve Block        if not self._options.test:
47d0825bca7fe65beaee391d30da42e937db621564Steve Block            return
48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
49d0825bca7fe65beaee391d30da42e937db621564Steve Block        # Run the scripting unit tests first because they're quickest.
50d0825bca7fe65beaee391d30da42e937db621564Steve Block        log("Running Python unit tests")
51a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        self._tool.executive.run_and_throw_if_fail(self._tool.port().run_python_unittests_command())
52d0825bca7fe65beaee391d30da42e937db621564Steve Block        log("Running Perl unit tests")
53a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        self._tool.executive.run_and_throw_if_fail(self._tool.port().run_perl_unittests_command())
54a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
55a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        javascriptcore_tests_command = self._tool.port().run_javascriptcore_tests_command()
56a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        if javascriptcore_tests_command:
57a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            log("Running JavaScriptCore tests")
58a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch            self._tool.executive.run_and_throw_if_fail(javascriptcore_tests_command, quiet=True)
59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
60d0825bca7fe65beaee391d30da42e937db621564Steve Block        log("Running run-webkit-tests")
61a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        args = self._tool.port().run_webkit_tests_command()
62d0825bca7fe65beaee391d30da42e937db621564Steve Block        if self._options.non_interactive:
63e14391e94c850b8bd03680c23b38978db68687a8John Reck            args.append("--no-new-test-results")
64d0825bca7fe65beaee391d30da42e937db621564Steve Block            args.append("--no-launch-safari")
652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            args.append("--exit-after-n-failures=%s" % self.NON_INTERACTIVE_FAILURE_LIMIT_COUNT)
66f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick            args.append("--wait-for-httpd")
676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
68d0825bca7fe65beaee391d30da42e937db621564Steve Block        if self._options.quiet:
69d0825bca7fe65beaee391d30da42e937db621564Steve Block            args.append("--quiet")
70d0825bca7fe65beaee391d30da42e937db621564Steve Block        self._tool.executive.run_and_throw_if_fail(args)
71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
72