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
282ab0c3bc2d6dc2b2f91f02efe38d1a3e5a0e3f4cdanno@chromium.orgimport os
2933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgimport shutil
3033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
3133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.local import commands
3233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.local import testsuite
3333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.local import utils
3433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgfrom testrunner.objects import testcase
3533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
3633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
3733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgclass CcTestSuite(testsuite.TestSuite):
3833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
3933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  def __init__(self, name, root):
4033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    super(CcTestSuite, self).__init__(name, root)
417a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org    if utils.IsWindows():
427a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org      build_dir = "build"
437a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org    else:
447a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org      build_dir = "out"
4589e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org    self.serdes_dir = os.path.normpath(
467a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org        os.path.join(root, "..", "..", build_dir, ".serdes"))
4789e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org    if os.path.exists(self.serdes_dir):
4833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org      shutil.rmtree(self.serdes_dir, True)
4933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    os.makedirs(self.serdes_dir)
5033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
5133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  def ListTests(self, context):
5246a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org    shell = os.path.abspath(os.path.join(context.shell_dir, self.shell()))
5333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    if utils.IsWindows():
546bec0093ef661b53a1e338a233d7aafb9536a307mvstanton@chromium.org      shell += ".exe"
556bec0093ef661b53a1e338a233d7aafb9536a307mvstanton@chromium.org    output = commands.Execute(context.command_prefix +
56068ea0a6ea115c058d1d9798029bd7fa1eaaa955mstarzinger@chromium.org                              [shell, "--list"] +
57068ea0a6ea115c058d1d9798029bd7fa1eaaa955mstarzinger@chromium.org                              context.extra_flags)
5833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    if output.exit_code != 0:
5933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org      print output.stdout
6033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org      print output.stderr
6133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org      return []
6233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    tests = []
6333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    for test_desc in output.stdout.strip().split():
64e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org      if test_desc.find('<') < 0:
65e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        # Native Client output can contain a few non-test arguments
66e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        # before the tests. Skip these.
67e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        continue
6833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org      raw_test, dependency = test_desc.split('<')
6933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org      if dependency != '':
7033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org        dependency = raw_test.split('/')[0] + '/' + dependency
7133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org      else:
7233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org        dependency = None
7333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org      test = testcase.TestCase(self, raw_test, dependency=dependency)
7433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org      tests.append(test)
7533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    tests.sort()
7633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    return tests
7733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
7833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  def GetFlagsForTestCase(self, testcase, context):
7933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    testname = testcase.path.split(os.path.sep)[-1]
8089e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org    serialization_file = os.path.join(self.serdes_dir, "serdes_" + testname)
8133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    serialization_file += ''.join(testcase.flags).replace('-', '_')
8233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    return (testcase.flags + [testcase.path] + context.mode_flags +
8333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org            ["--testing_serialization_file=" + serialization_file])
8433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
8533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  def shell(self):
8633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org    return "cctest"
8733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
8833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org
8933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgdef GetSuite(name, root):
9033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  return CcTestSuite(name, root)
91