15924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org# Copyright 2014 the V8 project authors. All rights reserved.
25924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org# Use of this source code is governed by a BSD-style license that can be
35924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org# found in the LICENSE file.
45924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
55924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgimport os
65924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
75924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgfrom testrunner.local import commands
85924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgfrom testrunner.local import testsuite
95924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgfrom testrunner.local import utils
105924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgfrom testrunner.objects import testcase
115924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
125924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgclass FuzzNativesTestSuite(testsuite.TestSuite):
135924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
145924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org  def __init__(self, name, root):
155924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    super(FuzzNativesTestSuite, self).__init__(name, root)
165924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
175924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org  def ListTests(self, context):
185924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    shell = os.path.abspath(os.path.join(context.shell_dir, self.shell()))
195924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    if utils.IsWindows():
205924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org      shell += ".exe"
215924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    output = commands.Execute(
225924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        context.command_prefix +
235924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        [shell, "--allow-natives-syntax", "-e",
245924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org         "try { var natives = %ListNatives();"
255924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org         "  for (var n in natives) { print(natives[n]); }"
265924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org         "} catch(e) {}"] +
275924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org        context.extra_flags)
285924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    if output.exit_code != 0:
295924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org      print output.stdout
305924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org      print output.stderr
31eac65cd57a2d5f018fc440eed1b69d0fe80fe336machenbach@chromium.org      assert False, "Failed to get natives list."
325924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    tests = []
335924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    for line in output.stdout.strip().split():
3412e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org      try:
3512e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org        (name, argc) = line.split(",")
3612e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org        flags = ["--allow-natives-syntax",
3712e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org                 "-e", "var NAME = '%s', ARGC = %s;" % (name, argc)]
3812e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org        test = testcase.TestCase(self, name, flags)
3912e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org        tests.append(test)
4012e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org      except:
4112e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org        # Work-around: If parsing didn't work, it might have been due to output
4212e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org        # caused by other d8 flags.
4312e05e8fde625d746b998a15049e8487c43a3b17machenbach@chromium.org        pass
445924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    return tests
455924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
465924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org  def GetFlagsForTestCase(self, testcase, context):
475924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    name = testcase.path
485924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    basefile = os.path.join(self.root, "base.js")
495924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org    return testcase.flags + [basefile] + context.mode_flags
505924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org
515924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.orgdef GetSuite(name, root):
525924917d324a643d00a8aefee030bd4acea0de0bmachenbach@chromium.org  return FuzzNativesTestSuite(name, root)
53