Make webkit test output comparison compatible to stress testing.
authormachenbach@chromium.org <machenbach@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 27 Jun 2013 19:45:45 +0000 (19:45 +0000)
committermachenbach@chromium.org <machenbach@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 27 Jun 2013 19:45:45 +0000 (19:45 +0000)
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

index 2c4a29c..e4e3f8f 100644 (file)
@@ -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