19258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org# Copyright 2008 the V8 project authors. All rights reserved. 29a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# Redistribution and use in source and binary forms, with or without 39a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# modification, are permitted provided that the following conditions are 49a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# met: 59a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# 69a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# * Redistributions of source code must retain the above copyright 79a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# notice, this list of conditions and the following disclaimer. 89a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# * Redistributions in binary form must reproduce the above 99a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# copyright notice, this list of conditions and the following 109a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# disclaimer in the documentation and/or other materials provided 119a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# with the distribution. 129a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# * Neither the name of Google Inc. nor the names of its 139a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# contributors may be used to endorse or promote products derived 149a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# from this software without specific prior written permission. 159a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# 169a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 179a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 189a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 199a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 209a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 219a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 229a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 239a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 249a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 259a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 269a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 279a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 289a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comimport os 299a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comimport re 3033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 3133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.local import testsuite 3233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.objects import testcase 339a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 349a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comFLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)") 352d18d10b30bbe822dcb5e2d6e90fd7863496243ckasperl@chromium.orgFILES_PATTERN = re.compile(r"//\s+Files:(.*)") 36defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.orgSELF_SCRIPT_PATTERN = re.compile(r"//\s+Env: TEST_FILE_NAME") 379a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 389a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 3933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgclass MjsunitTestSuite(testsuite.TestSuite): 4033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 4133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org def __init__(self, name, root): 4233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org super(MjsunitTestSuite, self).__init__(name, root) 4333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 4433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org def ListTests(self, context): 4533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org tests = [] 4633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for dirname, dirs, files in os.walk(self.root): 4733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for dotted in [x for x in dirs if x.startswith('.')]: 4833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org dirs.remove(dotted) 4933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org dirs.sort() 5033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org files.sort() 5133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for filename in files: 5233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if filename.endswith(".js") and filename != "mjsunit.js": 53b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org testname = os.path.join(dirname[len(self.root) + 1:], filename[:-3]) 5433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org test = testcase.TestCase(self, testname) 5533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org tests.append(test) 5633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return tests 5733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 5833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org def GetFlagsForTestCase(self, testcase, context): 5933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org source = self.GetSourceForTest(testcase) 6072204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org flags = [] + context.mode_flags 6133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org flags_match = re.findall(FLAGS_PATTERN, source) 6233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for match in flags_match: 6333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org flags += match.strip().split() 6433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 6533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org files_list = [] # List of file names to append to command arguments. 6633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org files_match = FILES_PATTERN.search(source); 6733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org # Accept several lines of 'Files:'. 6833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org while True: 6933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if files_match: 7033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org files_list += files_match.group(1).strip().split() 7133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org files_match = FILES_PATTERN.search(source, files_match.end()) 7233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org else: 7333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org break 7433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org files = [ os.path.normpath(os.path.join(self.root, '..', '..', f)) 7533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for f in files_list ] 7633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org testfilename = os.path.join(self.root, testcase.path + self.suffix()) 7733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if SELF_SCRIPT_PATTERN.search(source): 7846a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org env = ["-e", "TEST_FILE_NAME=\"%s\"" % testfilename.replace("\\", "\\\\")] 7933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org files = env + files 8033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org files.append(os.path.join(self.root, "mjsunit.js")) 8133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org files.append(testfilename) 8233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org flags += files 8433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if context.isolates: 8533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org flags.append("--isolate") 8633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org flags += files 8733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 8833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return testcase.flags + flags 8933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 9033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org def GetSourceForTest(self, testcase): 9133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org filename = os.path.join(self.root, testcase.path + self.suffix()) 9233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org with open(filename) as f: 9333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return f.read() 9433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 9533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 9633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef GetSuite(name, root): 9733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return MjsunitTestSuite(name, root) 98