Home | History | Annotate | Download | only in tools
      1 #!/usr/bin/env python
      2 # Copyright (c) 2012 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 """This script is used by chrome_tests.gypi's js2webui action to maintain the
      7 argument lists and to generate inlinable tests.
      8 
      9 Usage:
     10   python tools/gypv8sh.py v8_shell mock.js test_api.js js2webui.js \
     11          inputfile inputrelfile cxxoutfile jsoutfile
     12 """
     13 
     14 import json
     15 import optparse
     16 import os
     17 import subprocess
     18 import sys
     19 import shutil
     20 
     21 
     22 def main ():
     23   parser = optparse.OptionParser()
     24   parser.set_usage(
     25       "%prog v8_shell mock.js axs_testing.js test_api.js js2webui.js "
     26       "testtype inputfile inputrelfile cxxoutfile jsoutfile")
     27   parser.add_option('-v', '--verbose', action='store_true')
     28   parser.add_option('-n', '--impotent', action='store_true',
     29                     help="don't execute; just print (as if verbose)")
     30   (opts, args) = parser.parse_args()
     31 
     32   if len(args) != 10:
     33     parser.error('all arguments are required.')
     34   (v8_shell, mock_js, axs_testing_js, test_api, js2webui, test_type,
     35       inputfile, inputrelfile, cxxoutfile, jsoutfile) = args
     36   arguments = [js2webui, inputfile, inputrelfile, cxxoutfile, test_type]
     37   cmd = [v8_shell, '-e', "arguments=" + json.dumps(arguments), mock_js,
     38          axs_testing_js, test_api, js2webui]
     39   if opts.verbose or opts.impotent:
     40     print cmd
     41   if not opts.impotent:
     42     try:
     43       with open(cxxoutfile, 'w') as f:
     44         subprocess.check_call(cmd, stdin=subprocess.PIPE, stdout=f)
     45       shutil.copyfile(inputfile, jsoutfile)
     46     except Exception, ex:
     47       if os.path.exists(cxxoutfile):
     48         os.remove(cxxoutfile)
     49       if os.path.exists(jsoutfile):
     50         os.remove(jsoutfile)
     51       raise
     52 
     53 
     54 if __name__ == '__main__':
     55  sys.exit(main())
     56