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