Add wrapper script for running chromedriver tests
This centralizes the script so that we keep track of which test suites
are using the isolated script interface. It also makes the test suite
conform fully to the isolated script interface, specifically the filter
interface.
Bug: 533481
Change-Id: If1a6c394ad7a00b4767565977674f9106ce6cb93
Reviewed-on: https://chromium-review.googlesource.com/1100160
Reviewed-by: John Budorick <[email protected]>
Reviewed-by: Robbie Iannucci <[email protected]>
Reviewed-by: Caleb Rouleau <[email protected]>
Reviewed-by: Kenneth Russell <[email protected]>
Reviewed-by: John Chen <[email protected]>
Commit-Queue: Stephen Martinis <[email protected]>
Cr-Commit-Position: refs/heads/master@{#570496}diff --git a/testing/scripts/run_chromedriver_tests.py b/testing/scripts/run_chromedriver_tests.py
new file mode 100755
index 0000000..851f182
--- /dev/null
+++ b/testing/scripts/run_chromedriver_tests.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Runs chrome driver tests.
+
+This script attempts to emulate the contract of gtest-style tests
+invoked via recipes. The main contract is that the caller passes the
+argument:
+
+ --isolated-script-test-output=[FILENAME]
+
+json is written to that file in the format detailed here:
+https://www.chromium.org/developers/the-json-test-results-format
+
+Optional argument:
+
+ --isolated-script-test-filter=[TEST_NAMES]
+
+is a double-colon-separated ("::") list of test names, to run just that subset
+of tests. This list is forwarded to the chrome driver test runner.
+"""
+
+import argparse
+import json
+import os
+import shutil
+import sys
+import tempfile
+import traceback
+
+import common
+
+def main():
+ parser = argparse.ArgumentParser()
+
+ # --isolated-script-test-output is passed through to the script.
+
+ # This argument is ignored for now.
+ parser.add_argument('--isolated-script-test-chartjson-output', type=str)
+ # This argument is ignored for now.
+ parser.add_argument('--isolated-script-test-perf-output', type=str)
+ # This argument is translated below.
+ parser.add_argument('--isolated-script-test-filter', type=str)
+
+ args, rest_args = parser.parse_known_args()
+
+ filtered_tests = args.isolated_script_test_filter
+ if filtered_tests:
+ if any('--filter' in arg for arg in rest_args):
+ parser.error(
+ 'can\'t have the test call filter with the'
+ '--isolated-script-test-filter argument to the wrapper script')
+
+ # https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#running-a-subset-of-the-tests
+ # says that the gtest filter should accept single colons separating
+ # individual tests. The input is double colon separated, so translate it.
+ rest_args = rest_args + ['--filter', filtered_tests.replace('::', ':')]
+
+ cmd = [sys.executable] + rest_args
+ return common.run_command(cmd)
+
+
+# This is not really a "script test" so does not need to manually add
+# any additional compile targets.
+def main_compile_targets(args):
+ json.dump([], args.output)
+
+
+if __name__ == '__main__':
+ # Conform minimally to the protocol defined by ScriptTest.
+ if 'compile_targets' in sys.argv:
+ funcs = {
+ 'run': None,
+ 'compile_targets': main_compile_targets,
+ }
+ sys.exit(common.run_script(sys.argv[1:], funcs))
+ sys.exit(main())