1 #!/usr/bin/env python 2 # Copyright 2014 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 """Launches the remoting webapp unit test in chrome with the appropriate flags. 7 """ 8 9 import argparse 10 import os 11 import platform 12 import sys 13 import tempfile 14 import urllib 15 16 def GetChromePath(): 17 """Locates the chrome binary on the system.""" 18 chrome_path = '' 19 if platform.system() == 'Darwin': # Darwin == MacOSX 20 chrome_path = ( 21 '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome') 22 elif platform.system() == 'Linux': 23 chrome_path = '/usr/bin/google-chrome' 24 else: 25 # TODO(kelvinp): Support chrome path location on Windows. 26 print 'Unsupported OS.' 27 return chrome_path 28 29 30 def BuildTestPageUri(opt_module=None, opt_coverage=False): 31 """Builds the Uri for the test page with params.""" 32 script_path = os.path.dirname(__file__) 33 34 test_page_path = os.path.join(script_path, 35 '../../out/Debug/remoting/unittests/unittest.html') 36 test_page_path = 'file://' + os.path.abspath(test_page_path) 37 38 test_page_params = {} 39 if opt_coverage: 40 test_page_params['coverage'] = 'true' 41 if opt_module: 42 test_page_params['module'] = opt_module 43 if test_page_params: 44 test_page_path = test_page_path + '?%s' % urllib.urlencode(test_page_params) 45 return '"' + test_page_path + '"' 46 47 48 def BuildCommandLine(chrome_path, opt_module, opt_coverage): 49 """Builds the command line to execute.""" 50 command = [] 51 command.append('"' + chrome_path + '"') 52 command.append('--user-data-dir=' + tempfile.gettempdir()) 53 # The flag |--allow-file-access-from-files| is required so that we can open 54 # JavaScript files using XHR and instrument them for code coverage. 55 command.append(' --allow-file-access-from-files') 56 test_page_path = BuildTestPageUri(opt_module, opt_coverage) 57 command.append(test_page_path) 58 return ' '.join(command) 59 60 61 def ParseArgs(): 62 parser = argparse.ArgumentParser() 63 chrome_path = GetChromePath() 64 65 parser.add_argument( 66 '--chrome-path', 67 help='The path of the chrome binary to run the test.', 68 default=chrome_path) 69 parser.add_argument( 70 '--module', help='only run tests that belongs to MODULE') 71 parser.add_argument( 72 '--coverage', help='run the test with code coverage', action='store_true') 73 74 return parser.parse_args(sys.argv[1:]) 75 76 77 def main(): 78 args = ParseArgs() 79 command_line = "" 80 81 if not os.path.exists(args.chrome_path): 82 print 'Cannot locate the chrome binary in your system.' 83 print 'Please use the flag --chrome_path=CHROME_PATH to specify the chrome ' 84 print 'binary to run the test.' 85 return 1 86 87 command_line = BuildCommandLine(args.chrome_path, args.module, args.coverage) 88 os.system(command_line) 89 return 0 90 91 92 if __name__ == '__main__': 93 sys.exit(main()) 94