diff options
author | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-03-19 09:25:14 +0100 |
---|---|---|
committer | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-03-19 09:56:31 +0100 |
commit | 6313e1fe4c27755adde87e62db1c2f9fac534ae4 (patch) | |
tree | c57bb29f65e02fbfcc07895a8cc2903fff9300ba /src/3rdparty/v8/test/message/testcfg.py | |
parent | b5a49a260d03249c386f1b63c249089383dd81fa (diff) | |
parent | cac65e7a222b848a735a974b0aeb43209b0cfa18 (diff) | |
download | qtjsbackend-6313e1fe4c27755adde87e62db1c2f9fac534ae4.tar.gz |
Merge branch 'dev' into stable
This starts Qt 5.1 release cycle
Change-Id: I892bbc73c276842894a720f761ce31ad1b015672
Diffstat (limited to 'src/3rdparty/v8/test/message/testcfg.py')
-rw-r--r-- | src/3rdparty/v8/test/message/testcfg.py | 97 |
1 files changed, 89 insertions, 8 deletions
diff --git a/src/3rdparty/v8/test/message/testcfg.py b/src/3rdparty/v8/test/message/testcfg.py index af467e6..1b788d5 100644 --- a/src/3rdparty/v8/test/message/testcfg.py +++ b/src/3rdparty/v8/test/message/testcfg.py @@ -25,13 +25,93 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -import test +import itertools import os -from os.path import join, dirname, exists, basename, isdir import re +from testrunner.local import testsuite +from testrunner.local import utils +from testrunner.objects import testcase + + FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)") + +class MessageTestSuite(testsuite.TestSuite): + def __init__(self, name, root): + super(MessageTestSuite, self).__init__(name, root) + + def ListTests(self, context): + tests = [] + for dirname, dirs, files in os.walk(self.root): + 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"): + testname = join(dirname[len(self.root) + 1:], filename[:-3]) + test = testcase.TestCase(self, testname) + tests.append(test) + return tests + + def GetFlagsForTestCase(self, testcase, context): + source = self.GetSourceForTest(testcase) + result = [] + flags_match = re.findall(FLAGS_PATTERN, source) + for match in flags_match: + result += match.strip().split() + result += context.mode_flags + result.append(os.path.join(self.root, testcase.path + ".js")) + return testcase.flags + result + + def GetSourceForTest(self, testcase): + filename = os.path.join(self.root, testcase.path + self.suffix()) + with open(filename) as f: + return f.read() + + 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")) + + def IsFailureOutput(self, output, testpath): + expected_path = os.path.join(self.root, testpath + ".out") + expected_lines = [] + # Can't use utils.ReadLinesFrom() here because it strips whitespace. + with open(expected_path) as f: + for line in f: + if line.startswith("#") or not line.strip(): continue + expected_lines.append(line) + raw_lines = output.stdout.splitlines() + actual_lines = [ s for s in raw_lines if not self._IgnoreLine(s) ] + env = { "basename": os.path.basename(testpath + ".js") } + if len(expected_lines) != len(actual_lines): + return True + for (expected, actual) in itertools.izip(expected_lines, actual_lines): + pattern = re.escape(expected.rstrip() % env) + pattern = pattern.replace("\\*", ".*") + pattern = "^%s$" % pattern + if not re.match(pattern, actual): + return True + return False + + def StripOutputForTransmit(self, testcase): + pass + + +def GetSuite(name, root): + return MessageTestSuite(name, root) + + +# Deprecated definitions below. +# TODO(jkummerow): Remove when SCons is no longer supported. + + +import test +from os.path import join, exists, basename, isdir + class MessageTestCase(test.TestCase): def __init__(self, path, file, expected, mode, context, config): @@ -41,9 +121,10 @@ class MessageTestCase(test.TestCase): self.config = config def IgnoreLine(self, str): - """Ignore empty lines and valgrind output.""" + """Ignore empty lines, valgrind output and Android output.""" if not str: return True - else: return str.startswith('==') or str.startswith('**') + return (str.startswith('==') or str.startswith('**') or + str.startswith('ANDROID')) def IsFailureOutput(self, output): f = file(self.expected) @@ -62,7 +143,7 @@ class MessageTestCase(test.TestCase): pattern = '^%s$' % pattern patterns.append(pattern) # Compare actual output with the expected - raw_lines = output.stdout.split('\n') + raw_lines = output.stdout.splitlines() outlines = [ s for s in raw_lines if not self.IgnoreLine(s) ] if len(outlines) != len(patterns): return True @@ -80,9 +161,9 @@ class MessageTestCase(test.TestCase): def GetCommand(self): result = self.config.context.GetVmCommand(self, self.mode) source = open(self.file).read() - flags_match = FLAGS_PATTERN.search(source) - if flags_match: - result += flags_match.group(1).strip().split() + flags_match = re.findall(FLAGS_PATTERN, source) + for match in flags_match: + result += match.strip().split() result.append(self.file) return result |