1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#!/usr/bin/env python 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Copyright 2014 The Chromium Authors. All rights reserved. 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Use of this source code is governed by a BSD-style license that can be 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# found in the LICENSE file. 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch"""Launches the remoting webapp unit test in chrome with the appropriate flags. 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch""" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport argparse 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport os 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport platform 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport sys 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport tempfile 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport urllib 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdef GetChromePath(): 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch """Locates the chrome binary on the system.""" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome_path = '' 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if platform.system() == 'Darwin': # Darwin == MacOSX 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome_path = ( 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome') 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch elif platform.system() == 'Linux': 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome_path = '/usr/bin/google-chrome' 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch else: 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch # TODO(kelvinp): Support chrome path location on Windows. 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch print 'Unsupported OS.' 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return chrome_path 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdef BuildTestPageUri(opt_module=None, opt_coverage=False): 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch """Builds the Uri for the test page with params.""" 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch script_path = os.path.dirname(__file__) 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_page_path = os.path.join(script_path, 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch '../../out/Debug/remoting/unittests/unittest.html') 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_page_path = 'file://' + os.path.abspath(test_page_path) 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_page_params = {} 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if opt_coverage: 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_page_params['coverage'] = 'true' 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if opt_module: 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_page_params['module'] = opt_module 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if test_page_params: 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_page_path = test_page_path + '?%s' % urllib.urlencode(test_page_params) 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return '"' + test_page_path + '"' 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdef BuildCommandLine(chrome_path, opt_module, opt_coverage): 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch """Builds the command line to execute.""" 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command = [] 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command.append('"' + chrome_path + '"') 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command.append('--user-data-dir=' + tempfile.gettempdir()) 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch # The flag |--allow-file-access-from-files| is required so that we can open 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch # JavaScript files using XHR and instrument them for code coverage. 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command.append(' --allow-file-access-from-files') 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_page_path = BuildTestPageUri(opt_module, opt_coverage) 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command.append(test_page_path) 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return ' '.join(command) 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdef ParseArgs(): 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch parser = argparse.ArgumentParser() 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome_path = GetChromePath() 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch parser.add_argument( 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch '--chrome-path', 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch help='The path of the chrome binary to run the test.', 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default=chrome_path) 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch parser.add_argument( 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch '--module', help='only run tests that belongs to MODULE') 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch parser.add_argument( 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch '--coverage', help='run the test with code coverage', action='store_true') 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return parser.parse_args(sys.argv[1:]) 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdef main(): 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch args = ParseArgs() 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line = "" 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if not os.path.exists(args.chrome_path): 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch print 'Cannot locate the chrome binary in your system.' 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch print 'Please use the flag --chrome_path=CHROME_PATH to specify the chrome ' 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch print 'binary to run the test.' 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return 1 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line = BuildCommandLine(args.chrome_path, args.module, args.coverage) 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch os.system(command_line) 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return 0 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdochif __name__ == '__main__': 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sys.exit(main()) 94