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