| Index: test/inspector/testcfg.py
|
| diff --git a/test/inspector/testcfg.py b/test/inspector/testcfg.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6995669a1592ee824cf447cadab2957ceab6665b
|
| --- /dev/null
|
| +++ b/test/inspector/testcfg.py
|
| @@ -0,0 +1,109 @@
|
| +# Copyright 2016 the V8 project authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import itertools
|
| +import os
|
| +import re
|
| +
|
| +from testrunner.local import testsuite
|
| +from testrunner.local import utils
|
| +from testrunner.objects import testcase
|
| +
|
| +FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)")
|
| +PROTOCOL_TEST_JS = "protocol-test.js"
|
| +EXPECTED_SUFFIX = "-expected.txt"
|
| +
|
| +class InspectorProtocolTestSuite(testsuite.TestSuite):
|
| +
|
| + def __init__(self, name, root):
|
| + super(InspectorProtocolTestSuite, self).__init__(name, root)
|
| +
|
| + def ListTests(self, context):
|
| + tests = []
|
| + for dirname, dirs, files in os.walk(os.path.join(self.root), followlinks=True):
|
| + for dotted in [x for x in dirs if x.startswith('.')]:
|
| + dirs.remove(dotted)
|
| + dirs.sort()
|
| + files.sort()
|
| + for filename in files:
|
| + if filename.endswith(".js") and filename != PROTOCOL_TEST_JS:
|
| + fullpath = os.path.join(dirname, filename)
|
| + relpath = fullpath[len(self.root) + 1 : -3]
|
| + testname = relpath.replace(os.path.sep, "/")
|
| + test = testcase.TestCase(self, testname)
|
| + tests.append(test)
|
| + return tests
|
| +
|
| + def GetFlagsForTestCase(self, testcase, context):
|
| + source = self.GetSourceForTest(testcase)
|
| + flags_match = re.findall(FLAGS_PATTERN, source)
|
| + flags = []
|
| + for match in flags_match:
|
| + flags += match.strip().split()
|
| + testname = testcase.path.split(os.path.sep)[-1]
|
| + testfilename = os.path.join(self.root, testcase.path + self.suffix())
|
| + protocoltestfilename = os.path.join(self.root, PROTOCOL_TEST_JS)
|
| + return [ protocoltestfilename, testfilename ] + flags
|
| +
|
| + def GetSourceForTest(self, testcase):
|
| + filename = os.path.join(self.root, testcase.path + self.suffix())
|
| + with open(filename) as f:
|
| + return f.read()
|
| +
|
| + def shell(self):
|
| + return "inspector-test"
|
| +
|
| + def _IgnoreLine(self, string):
|
| + """Ignore empty lines, valgrind output and Android output."""
|
| + if not string: return True
|
| + return (string.startswith("==") or string.startswith("**") or
|
| + string.startswith("ANDROID") or
|
| + # FIXME(machenbach): The test driver shouldn't try to use slow
|
| + # asserts if they weren't compiled. This fails in optdebug=2.
|
| + string == "Warning: unknown flag --enable-slow-asserts." or
|
| + string == "Try --help for options")
|
| +
|
| + def IsFailureOutput(self, testcase):
|
| + file_name = os.path.join(self.root, testcase.path) + EXPECTED_SUFFIX
|
| + with file(file_name, "r") as expected:
|
| + expected_lines = expected.readlines()
|
| +
|
| + def ExpIterator():
|
| + for line in expected_lines:
|
| + if line.startswith("#") or not line.strip(): continue
|
| + yield line.strip()
|
| +
|
| + def ActIterator(lines):
|
| + for line in lines:
|
| + if self._IgnoreLine(line.strip()): continue
|
| + yield line.strip()
|
| +
|
| + def ActBlockIterator():
|
| + """Iterates over blocks of actual output lines."""
|
| + lines = testcase.output.stdout.splitlines()
|
| + start_index = 0
|
| + found_eqeq = False
|
| + for index, line in enumerate(lines):
|
| + # If a stress test separator is found:
|
| + if line.startswith("=="):
|
| + # Iterate over all lines before a separator except the first.
|
| + if not found_eqeq:
|
| + found_eqeq = True
|
| + else:
|
| + yield ActIterator(lines[start_index:index])
|
| + # The next block of output lines starts after the separator.
|
| + start_index = index + 1
|
| + # Iterate over complete output if no separator was found.
|
| + if not found_eqeq:
|
| + yield ActIterator(lines)
|
| +
|
| + for act_iterator in ActBlockIterator():
|
| + for (expected, actual) in itertools.izip_longest(
|
| + ExpIterator(), act_iterator, fillvalue=''):
|
| + if expected != actual:
|
| + return True
|
| + return False
|
| +
|
| +def GetSuite(name, root):
|
| + return InspectorProtocolTestSuite(name, root)
|
|
|