1*6777b538SAndroid Build Coastguard Worker#!/usr/bin/env python 2*6777b538SAndroid Build Coastguard Worker# Copyright 2018 The Chromium Authors 3*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 5*6777b538SAndroid Build Coastguard Worker 6*6777b538SAndroid Build Coastguard Worker"""Runs chrome driver tests. 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard WorkerThis script attempts to emulate the contract of gtest-style tests 9*6777b538SAndroid Build Coastguard Workerinvoked via recipes. 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard WorkerIf optional argument --isolated-script-test-output=[FILENAME] is passed 12*6777b538SAndroid Build Coastguard Workerto the script, json is written to that file in the format detailed in 13*6777b538SAndroid Build Coastguard Worker//docs/testing/json-test-results-format.md. 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard WorkerIf optional argument --isolated-script-test-filter=[TEST_NAMES] is passed to 16*6777b538SAndroid Build Coastguard Workerthe script, it should be a double-colon-separated ("::") list of test names, 17*6777b538SAndroid Build Coastguard Workerto run just that subset of tests. This list is forwarded to the chrome driver 18*6777b538SAndroid Build Coastguard Workertest runner. """ 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Workerimport argparse 21*6777b538SAndroid Build Coastguard Workerimport json 22*6777b538SAndroid Build Coastguard Workerimport os 23*6777b538SAndroid Build Coastguard Workerimport shutil 24*6777b538SAndroid Build Coastguard Workerimport sys 25*6777b538SAndroid Build Coastguard Workerimport tempfile 26*6777b538SAndroid Build Coastguard Workerimport traceback 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker# Add src/testing/ into sys.path for importing common without pylint errors. 29*6777b538SAndroid Build Coastguard Workersys.path.append( 30*6777b538SAndroid Build Coastguard Worker os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))) 31*6777b538SAndroid Build Coastguard Workerfrom scripts import common 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Workerclass ChromeDriverAdapter(common.BaseIsolatedScriptArgsAdapter): 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker def generate_test_output_args(self, output): 37*6777b538SAndroid Build Coastguard Worker return ['--isolated-script-test-output', output] 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker def generate_test_filter_args(self, test_filter_str): 40*6777b538SAndroid Build Coastguard Worker if any('--filter' in arg for arg in self.rest_args): 41*6777b538SAndroid Build Coastguard Worker self.parser.error( 42*6777b538SAndroid Build Coastguard Worker 'can\'t have the test call filter with the' 43*6777b538SAndroid Build Coastguard Worker '--isolated-script-test-filter argument to the wrapper script') 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker return ['--filter', test_filter_str.replace('::', ':')] 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Workerdef main(): 49*6777b538SAndroid Build Coastguard Worker adapter = ChromeDriverAdapter() 50*6777b538SAndroid Build Coastguard Worker return adapter.run_test() 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker# This is not really a "script test" so does not need to manually add 54*6777b538SAndroid Build Coastguard Worker# any additional compile targets. 55*6777b538SAndroid Build Coastguard Workerdef main_compile_targets(args): 56*6777b538SAndroid Build Coastguard Worker json.dump([], args.output) 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Workerif __name__ == '__main__': 60*6777b538SAndroid Build Coastguard Worker # Conform minimally to the protocol defined by ScriptTest. 61*6777b538SAndroid Build Coastguard Worker if 'compile_targets' in sys.argv: 62*6777b538SAndroid Build Coastguard Worker funcs = { 63*6777b538SAndroid Build Coastguard Worker 'run': None, 64*6777b538SAndroid Build Coastguard Worker 'compile_targets': main_compile_targets, 65*6777b538SAndroid Build Coastguard Worker } 66*6777b538SAndroid Build Coastguard Worker sys.exit(common.run_script(sys.argv[1:], funcs)) 67*6777b538SAndroid Build Coastguard Worker sys.exit(main()) 68