15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""This script is used by chrome_tests.gypi's js2webui action to maintain the 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)argument lists and to generate inlinable tests. 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)""" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import json 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import optparse 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import subprocess 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import shutil 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main (): 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parser = optparse.OptionParser() 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parser.set_usage( 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "%prog v8_shell mock.js test_api.js js2webui.js " 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "testtype inputfile inputrelfile cxxoutfile jsoutfile") 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parser.add_option('-v', '--verbose', action='store_true') 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parser.add_option('-n', '--impotent', action='store_true', 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) help="don't execute; just print (as if verbose)") 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) parser.add_option('--deps_js', action="store", 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) help=("Path to deps.js for dependency resolution, " + 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "optional.")) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (opts, args) = parser.parse_args() 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if len(args) != 9: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parser.error('all arguments are required.') 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (v8_shell, mock_js, test_api, js2webui, test_type, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inputfile, inputrelfile, cxxoutfile, jsoutfile) = args 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cmd = [v8_shell] 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) icudatafile = os.path.join(os.path.dirname(v8_shell), 'icudtl.dat') 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if os.path.exists(icudatafile): 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cmd.extend(['--icu-data-file=%s' % icudatafile]) 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) arguments = [js2webui, inputfile, inputrelfile, opts.deps_js, 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) cxxoutfile, test_type] 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cmd.extend(['-e', "arguments=" + json.dumps(arguments), mock_js, 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) test_api, js2webui]) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if opts.verbose or opts.impotent: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print cmd 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if not opts.impotent: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch p = subprocess.Popen( 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=0) 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch out, err = p.communicate() 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch with open(cxxoutfile, 'wb') as f: 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch f.write(out) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shutil.copyfile(inputfile, jsoutfile) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except Exception, ex: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if os.path.exists(cxxoutfile): 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os.remove(cxxoutfile) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if os.path.exists(jsoutfile): 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) os.remove(jsoutfile) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) raise 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sys.exit(main()) 63