5e00b404bc926a723eb44cf5b8d8bd39aed2ad8d
[platform/framework/web/crosswalk.git] / src / v8 / test / fuzz-natives / testcfg.py
1 # Copyright 2014 the V8 project authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import os
6
7 from testrunner.local import commands
8 from testrunner.local import testsuite
9 from testrunner.local import utils
10 from testrunner.objects import testcase
11
12 class FuzzNativesTestSuite(testsuite.TestSuite):
13
14   def __init__(self, name, root):
15     super(FuzzNativesTestSuite, self).__init__(name, root)
16
17   def ListTests(self, context):
18     shell = os.path.abspath(os.path.join(context.shell_dir, self.shell()))
19     if utils.IsWindows():
20       shell += ".exe"
21     output = commands.Execute(
22         context.command_prefix +
23         [shell, "--allow-natives-syntax", "-e",
24          "try { var natives = %ListNatives();"
25          "  for (var n in natives) { print(natives[n]); }"
26          "} catch(e) {}"] +
27         context.extra_flags)
28     if output.exit_code != 0:
29       print output.stdout
30       print output.stderr
31       assert False, "Failed to get natives list."
32     tests = []
33     for line in output.stdout.strip().split():
34       try:
35         (name, argc) = line.split(",")
36         flags = ["--allow-natives-syntax",
37                  "-e", "var NAME = '%s', ARGC = %s;" % (name, argc)]
38         test = testcase.TestCase(self, name, flags)
39         tests.append(test)
40       except:
41         # Work-around: If parsing didn't work, it might have been due to output
42         # caused by other d8 flags.
43         pass
44     return tests
45
46   def GetFlagsForTestCase(self, testcase, context):
47     name = testcase.path
48     basefile = os.path.join(self.root, "base.js")
49     return testcase.flags + [basefile] + context.mode_flags
50
51 def GetSuite(name, root):
52   return FuzzNativesTestSuite(name, root)