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