1a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# Copyright 2008 the V8 project authors. All rights reserved.
2a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# Redistribution and use in source and binary forms, with or without
3a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# modification, are permitted provided that the following conditions are
4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# met:
5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#
6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#     * Redistributions of source code must retain the above copyright
7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#       notice, this list of conditions and the following disclaimer.
8a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#     * Redistributions in binary form must reproduce the above
9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#       copyright notice, this list of conditions and the following
10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#       disclaimer in the documentation and/or other materials provided
11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#       with the distribution.
12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#     * Neither the name of Google Inc. nor the names of its
13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#       contributors may be used to endorse or promote products derived
14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#       from this software without specific prior written permission.
15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#
16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
28a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockimport os
29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochimport shutil
30a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfrom testrunner.local import commands
32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfrom testrunner.local import testsuite
33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfrom testrunner.local import utils
34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfrom testrunner.objects import testcase
35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
36a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass CcTestSuite(testsuite.TestSuite):
38a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  def __init__(self, name, root):
40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    super(CcTestSuite, self).__init__(name, root)
41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    if utils.IsWindows():
42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      build_dir = "build"
4369a99ed0b2b2ef69d393c371b03db3a98aaf880eBen Murdoch    else:
44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      build_dir = "out"
45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    self.serdes_dir = os.path.normpath(
46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch        os.path.join(root, "..", "..", build_dir, ".serdes"))
47b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    if os.path.exists(self.serdes_dir):
48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      shutil.rmtree(self.serdes_dir, True)
49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    os.makedirs(self.serdes_dir)
50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  def ListTests(self, context):
52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    shell = os.path.abspath(os.path.join(context.shell_dir, self.shell()))
53a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    if utils.IsWindows():
54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      shell += ".exe"
55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    output = commands.Execute(context.command_prefix +
56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch                              [shell, "--list"] +
57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch                              context.extra_flags)
58a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    if output.exit_code != 0:
59a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      print output.stdout
60a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      print output.stderr
61a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      return []
62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    tests = []
63a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    for test_desc in output.stdout.strip().split():
64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      if test_desc.find('<') < 0:
65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch        # Native Client output can contain a few non-test arguments
66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch        # before the tests. Skip these.
67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch        continue
68a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      raw_test, dependency = test_desc.split('<')
69a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block      if dependency != '':
70b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch        dependency = raw_test.split('/')[0] + '/' + dependency
71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      else:
72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch        dependency = None
73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      test = testcase.TestCase(self, raw_test, dependency=dependency)
74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      tests.append(test)
75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    tests.sort()
76b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    return tests
77b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
78b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  def GetFlagsForTestCase(self, testcase, context):
79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    testname = testcase.path.split(os.path.sep)[-1]
80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    serialization_file = os.path.join(self.serdes_dir, "serdes_" + testname)
81b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    serialization_file += ''.join(testcase.flags).replace('-', '_')
82b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    return (testcase.flags + [testcase.path] + context.mode_flags +
83b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch            ["--testing_serialization_file=" + serialization_file])
84b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  def shell(self):
86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    return "cctest"
87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
88b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochdef GetSuite(name, root):
90b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  return CcTestSuite(name, root)
91