From a643f867198693c1c4f068f7cbf27f88af8b9477 Mon Sep 17 00:00:00 2001 From: "machenbach@chromium.org" Date: Thu, 27 Jun 2013 19:45:45 +0000 Subject: [PATCH] Make webkit test output comparison compatible to stress testing. In stress testing, the output is repeated several times. In this case, it is now compared several times to the actual output. R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/18062002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15369 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- test/webkit/testcfg.py | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/test/webkit/testcfg.py b/test/webkit/testcfg.py index 2c4a29c..e4e3f8f 100644 --- a/test/webkit/testcfg.py +++ b/test/webkit/testcfg.py @@ -116,16 +116,40 @@ class WebkitTestSuite(testsuite.TestSuite): return True file_name = os.path.join(self.root, testpath) + "-expected.txt" with file(file_name, "r") as expected: - def ExpIterator(): - for line in expected.readlines(): - if line.startswith("#") or not line.strip(): continue - yield line.strip() - def ActIterator(): - for line in output.stdout.splitlines(): - if self._IgnoreLine(line.strip()): continue - yield line.strip() + 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 = 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 ouput 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(), ActIterator(), fillvalue=''): + ExpIterator(), act_iterator, fillvalue=''): if expected != actual: return True return False -- 2.7.4