testcfg.py revision 44f0eee88ff00398ff7f715fab053374d808c90d
144f0eee88ff00398ff7f715fab053374d808c90dSteve Block# Copyright 2011 the V8 project authors. All rights reserved. 244f0eee88ff00398ff7f715fab053374d808c90dSteve Block# Redistribution and use in source and binary forms, with or without 344f0eee88ff00398ff7f715fab053374d808c90dSteve Block# modification, are permitted provided that the following conditions are 444f0eee88ff00398ff7f715fab053374d808c90dSteve Block# met: 544f0eee88ff00398ff7f715fab053374d808c90dSteve Block# 644f0eee88ff00398ff7f715fab053374d808c90dSteve Block# * Redistributions of source code must retain the above copyright 744f0eee88ff00398ff7f715fab053374d808c90dSteve Block# notice, this list of conditions and the following disclaimer. 844f0eee88ff00398ff7f715fab053374d808c90dSteve Block# * Redistributions in binary form must reproduce the above 944f0eee88ff00398ff7f715fab053374d808c90dSteve Block# copyright notice, this list of conditions and the following 1044f0eee88ff00398ff7f715fab053374d808c90dSteve Block# disclaimer in the documentation and/or other materials provided 1144f0eee88ff00398ff7f715fab053374d808c90dSteve Block# with the distribution. 1244f0eee88ff00398ff7f715fab053374d808c90dSteve Block# * Neither the name of Google Inc. nor the names of its 1344f0eee88ff00398ff7f715fab053374d808c90dSteve Block# contributors may be used to endorse or promote products derived 1444f0eee88ff00398ff7f715fab053374d808c90dSteve Block# from this software without specific prior written permission. 1544f0eee88ff00398ff7f715fab053374d808c90dSteve Block# 1644f0eee88ff00398ff7f715fab053374d808c90dSteve Block# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1744f0eee88ff00398ff7f715fab053374d808c90dSteve Block# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1844f0eee88ff00398ff7f715fab053374d808c90dSteve Block# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1944f0eee88ff00398ff7f715fab053374d808c90dSteve Block# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2044f0eee88ff00398ff7f715fab053374d808c90dSteve Block# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2144f0eee88ff00398ff7f715fab053374d808c90dSteve Block# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2244f0eee88ff00398ff7f715fab053374d808c90dSteve Block# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2344f0eee88ff00398ff7f715fab053374d808c90dSteve Block# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2444f0eee88ff00398ff7f715fab053374d808c90dSteve Block# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2544f0eee88ff00398ff7f715fab053374d808c90dSteve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2644f0eee88ff00398ff7f715fab053374d808c90dSteve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 2844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 2944f0eee88ff00398ff7f715fab053374d808c90dSteve Blockimport test 3044f0eee88ff00398ff7f715fab053374d808c90dSteve Blockimport os 3144f0eee88ff00398ff7f715fab053374d808c90dSteve Blockfrom os.path import join, exists 3244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3344f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3444f0eee88ff00398ff7f715fab053374d808c90dSteve BlockTEST_262_HARNESS = ['sta.js'] 3544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3644f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3744f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass Test262TestCase(test.TestCase): 3844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 3944f0eee88ff00398ff7f715fab053374d808c90dSteve Block def __init__(self, filename, path, context, root, mode, framework): 4044f0eee88ff00398ff7f715fab053374d808c90dSteve Block super(Test262TestCase, self).__init__(context, path, mode) 4144f0eee88ff00398ff7f715fab053374d808c90dSteve Block self.filename = filename 4244f0eee88ff00398ff7f715fab053374d808c90dSteve Block self.framework = framework 4344f0eee88ff00398ff7f715fab053374d808c90dSteve Block self.root = root 4444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 4544f0eee88ff00398ff7f715fab053374d808c90dSteve Block def IsNegative(self): 4644f0eee88ff00398ff7f715fab053374d808c90dSteve Block return self.filename.endswith('-n.js') 4744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 4844f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetLabel(self): 4944f0eee88ff00398ff7f715fab053374d808c90dSteve Block return "%s test262 %s %s" % (self.mode, self.GetGroup(), self.GetName()) 5044f0eee88ff00398ff7f715fab053374d808c90dSteve Block 5144f0eee88ff00398ff7f715fab053374d808c90dSteve Block def IsFailureOutput(self, output): 5244f0eee88ff00398ff7f715fab053374d808c90dSteve Block if output.exit_code != 0: 5344f0eee88ff00398ff7f715fab053374d808c90dSteve Block return True 5444f0eee88ff00398ff7f715fab053374d808c90dSteve Block return 'FAILED!' in output.stdout 5544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 5644f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetCommand(self): 5744f0eee88ff00398ff7f715fab053374d808c90dSteve Block result = self.context.GetVmCommand(self, self.mode) 5844f0eee88ff00398ff7f715fab053374d808c90dSteve Block result += ['-e', 'var window = this'] 5944f0eee88ff00398ff7f715fab053374d808c90dSteve Block result += self.framework 6044f0eee88ff00398ff7f715fab053374d808c90dSteve Block result.append(self.filename) 6144f0eee88ff00398ff7f715fab053374d808c90dSteve Block return result 6244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 6344f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetName(self): 6444f0eee88ff00398ff7f715fab053374d808c90dSteve Block return self.path[-1] 6544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 6644f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetGroup(self): 6744f0eee88ff00398ff7f715fab053374d808c90dSteve Block return self.path[0] 6844f0eee88ff00398ff7f715fab053374d808c90dSteve Block 6944f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetSource(self): 7044f0eee88ff00398ff7f715fab053374d808c90dSteve Block return open(self.filename).read() 7144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 7244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 7344f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass Test262TestConfiguration(test.TestConfiguration): 7444f0eee88ff00398ff7f715fab053374d808c90dSteve Block 7544f0eee88ff00398ff7f715fab053374d808c90dSteve Block def __init__(self, context, root): 7644f0eee88ff00398ff7f715fab053374d808c90dSteve Block super(Test262TestConfiguration, self).__init__(context, root) 7744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 7844f0eee88ff00398ff7f715fab053374d808c90dSteve Block def AddIETestCenter(self, tests, current_path, path, mode): 7944f0eee88ff00398ff7f715fab053374d808c90dSteve Block current_root = join(self.root, 'data', 'test', 'suite', 'ietestcenter') 8044f0eee88ff00398ff7f715fab053374d808c90dSteve Block harness = [join(self.root, 'data', 'test', 'harness', f) 8144f0eee88ff00398ff7f715fab053374d808c90dSteve Block for f in TEST_262_HARNESS] 8244f0eee88ff00398ff7f715fab053374d808c90dSteve Block harness += [join(self.root, 'harness-adapt.js')] 8344f0eee88ff00398ff7f715fab053374d808c90dSteve Block for root, dirs, files in os.walk(current_root): 8444f0eee88ff00398ff7f715fab053374d808c90dSteve Block for dotted in [x for x in dirs if x.startswith('.')]: 8544f0eee88ff00398ff7f715fab053374d808c90dSteve Block dirs.remove(dotted) 8644f0eee88ff00398ff7f715fab053374d808c90dSteve Block dirs.sort() 8744f0eee88ff00398ff7f715fab053374d808c90dSteve Block root_path = root[len(self.root):].split(os.path.sep) 8844f0eee88ff00398ff7f715fab053374d808c90dSteve Block root_path = current_path + [x for x in root_path if x] 8944f0eee88ff00398ff7f715fab053374d808c90dSteve Block files.sort() 9044f0eee88ff00398ff7f715fab053374d808c90dSteve Block for file in files: 9144f0eee88ff00398ff7f715fab053374d808c90dSteve Block if file.endswith('.js'): 9244f0eee88ff00398ff7f715fab053374d808c90dSteve Block if self.Contains(path, root_path): 9344f0eee88ff00398ff7f715fab053374d808c90dSteve Block test_path = ['ietestcenter', file[:-3]] 9444f0eee88ff00398ff7f715fab053374d808c90dSteve Block test = Test262TestCase(join(root, file), test_path, self.context, 9544f0eee88ff00398ff7f715fab053374d808c90dSteve Block self.root, mode, harness) 9644f0eee88ff00398ff7f715fab053374d808c90dSteve Block tests.append(test) 9744f0eee88ff00398ff7f715fab053374d808c90dSteve Block 9844f0eee88ff00398ff7f715fab053374d808c90dSteve Block def AddSputnikConvertedTests(self, tests, current_path, path, mode): 9944f0eee88ff00398ff7f715fab053374d808c90dSteve Block # To be enabled 10044f0eee88ff00398ff7f715fab053374d808c90dSteve Block pass 10144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 10244f0eee88ff00398ff7f715fab053374d808c90dSteve Block def AddSputnikTests(self, tests, current_path, path, mode): 10344f0eee88ff00398ff7f715fab053374d808c90dSteve Block # To be enabled 10444f0eee88ff00398ff7f715fab053374d808c90dSteve Block pass 10544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 10644f0eee88ff00398ff7f715fab053374d808c90dSteve Block def ListTests(self, current_path, path, mode, variant_flags): 10744f0eee88ff00398ff7f715fab053374d808c90dSteve Block tests = [] 10844f0eee88ff00398ff7f715fab053374d808c90dSteve Block self.AddIETestCenter(tests, current_path, path, mode) 10944f0eee88ff00398ff7f715fab053374d808c90dSteve Block self.AddSputnikConvertedTests(tests, current_path, path, mode) 11044f0eee88ff00398ff7f715fab053374d808c90dSteve Block self.AddSputnikTests(tests, current_path, path, mode) 11144f0eee88ff00398ff7f715fab053374d808c90dSteve Block return tests 11244f0eee88ff00398ff7f715fab053374d808c90dSteve Block 11344f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetBuildRequirements(self): 11444f0eee88ff00398ff7f715fab053374d808c90dSteve Block return ['sample', 'sample=shell'] 11544f0eee88ff00398ff7f715fab053374d808c90dSteve Block 11644f0eee88ff00398ff7f715fab053374d808c90dSteve Block def GetTestStatus(self, sections, defs): 11744f0eee88ff00398ff7f715fab053374d808c90dSteve Block status_file = join(self.root, 'test262.status') 11844f0eee88ff00398ff7f715fab053374d808c90dSteve Block if exists(status_file): 11944f0eee88ff00398ff7f715fab053374d808c90dSteve Block test.ReadConfigurationInto(status_file, sections, defs) 12044f0eee88ff00398ff7f715fab053374d808c90dSteve Block 12144f0eee88ff00398ff7f715fab053374d808c90dSteve Block 12244f0eee88ff00398ff7f715fab053374d808c90dSteve Blockdef GetConfiguration(context, root): 12344f0eee88ff00398ff7f715fab053374d808c90dSteve Block return Test262TestConfiguration(context, root) 124