2011-04-29 Ojan Vafai <ojan@chromium.org>
authorojan@chromium.org <ojan@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 29 Apr 2011 19:14:42 +0000 (19:14 +0000)
committerojan@chromium.org <ojan@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 29 Apr 2011 19:14:42 +0000 (19:14 +0000)
        Reviewed by Eric Seidel.

        handle flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=59820

        Handle that actual can be a space-separated list of results
        when we do retries. Also, show expected flaky tests that pass
        in the unexpected passes table.

        * fast/harness/resources/results-test.js:
        * fast/harness/results.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@85346 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/harness/resources/results-test.js
LayoutTests/fast/harness/results.html

index adafd25..873642b 100644 (file)
@@ -1,3 +1,17 @@
+2011-04-29  Ojan Vafai  <ojan@chromium.org>
+
+        Reviewed by Eric Seidel.
+
+        handle flaky failures
+        https://bugs.webkit.org/show_bug.cgi?id=59820
+
+        Handle that actual can be a space-separated list of results
+        when we do retries. Also, show expected flaky tests that pass
+        in the unexpected passes table.
+
+        * fast/harness/resources/results-test.js:
+        * fast/harness/results.html:
+
 2011-04-29  Mark Pilgrim  <pilgrim@chromium.org>
 
         Reviewed by Tony Chang.
index 16b7859..34c71da 100644 (file)
@@ -220,7 +220,7 @@ function runTests()
     runDefaultSingleRowTest('bar-flaky-fail.html', 'PASS FAIL', 'TEXT', true, 'expected actual diff ', '');
     runDefaultSingleRowTest('bar-flaky-fail-unexpected.html', 'PASS TEXT', 'IMAGE', false, '', 'expected actual diff ');
     runDefaultSingleRowTest('bar-crash.html', 'TEXT', 'CRASH', false, 'stack ', '');
-    runDefaultSingleRowTest('bar-audio.html', 'TEXT', 'AUDIO', false, 'expected actual ', '');
+    runDefaultSingleRowTest('bar-audio.html', 'TEXT', 'AUDIO', false, 'expected audio actual audio ', '');
     runDefaultSingleRowTest('bar-timeout.html', 'TEXT', 'TIMEOUT', false, 'expected actual diff ', '');
     runDefaultSingleRowTest('bar-image.html', 'TEXT', 'IMAGE', false, '', 'expected actual diff ');
     runDefaultSingleRowTest('bar-image-plus-text.html', 'TEXT', 'IMAGE+TEXT', false, 'expected actual diff ', 'expected actual diff ');
@@ -237,10 +237,19 @@ function runTests()
 
     results = mockResults();
     var subtree = results.tests['foo'] = {}
-    subtree['bar-flaky-pass.html'] = mockExpectation('PASS FAIL', 'PASS');
+    subtree['bar-flaky-pass.html'] = mockExpectation('PASS TEXT', 'PASS');
     runTest(results, function() {
-        // FIXME: should a PASS FAIL test that passes go in the unexpected passes table?
-        assertTrue(document.body.textContent.indexOf('foo/bar-flaky-pass.html') == -1);
+        assertTrue(!document.getElementById('results-table'));
+        assertTrue(document.getElementById('passes-table'));
+        assertTrue(document.body.textContent.indexOf('foo/bar-flaky-pass.html') != -1);
+    });
+
+    results = mockResults();
+    var subtree = results.tests['foo'] = {}
+    subtree['bar-flaky-fail.html'] = mockExpectation('PASS TEXT', 'IMAGE PASS');
+    runTest(results, function() {
+        assertTrue(document.getElementById('results-table'));
+        assertTrue(document.body.textContent.indexOf('bar-flaky-fail.html') != -1);
     });
 
     results = mockResults();
@@ -356,6 +365,8 @@ function runTests()
 
     shouldUseTracLinks = oldShouldUseTracLinks;
 
+    runDefaultSingleRowTest('bar-flaky-crash.html', 'TEXT', 'TIMEOUT CRASH AUDIO', false, 'expected actual diff stack expected audio actual audio ', '');
+
     document.body.innerHTML = '<pre>' + g_log.join('\n') + '</pre>';
 }
 
index cb478fb..77be156 100644 (file)
@@ -319,38 +319,39 @@ function processGlobalStateFor(testObject)
         globalState().newTests.push(test);
         return;
     }
-
+    
     var expected = testObject.expected || 'PASS';
-    testObject.isExpected = actual == 'SKIP';
-    if (!testObject.isExpected && globalState().results.uses_expectations_file) {
+    testObject.isExpected = true;
+    if (actual != 'SKIP' && globalState().results.uses_expectations_file) {
         var expectedArray = expected.split(' ');
-        if (expectedArray.indexOf(actual) != -1)
-            testObject.isExpected = true;
-        else if (expectedArray.indexOf('FAIL') != -1)
-            testObject.isExpected = actual == 'IMAGE' || actual == 'TEXT' || actual == 'IMAGE+TEXT';
+        var actualArray = actual.split(' ');
+        for (var i = 0; i < actualArray.length; i++) {
+            var actualValue = actualArray[i];
+            if (expectedArray.indexOf(actualValue) == -1 &&
+                (expectedArray.indexOf('FAIL') == -1 ||
+                 (actualValue != 'IMAGE' && actualValue != 'TEXT' && actualValue != 'IMAGE+TEXT')))
+                testObject.isExpected = false;
+        }
     }
 
-    if (actual == 'PASS' && expected != 'PASS' && !testObject.isExpected)
+    if (actual == 'PASS' && expected != 'PASS')
         globalState().unexpectedPassTests.push(test);            
 }
 
 function tableRow(testObject)
 {    
-    var actual = testObject.actual;
-    if (actual == 'PASS')
-        return '';
+    var row = '<tbody'
+    if (globalState().results.uses_expectations_file)
+        row += ' class="' + (testObject.isExpected ? 'expected' : '') + '"';
+    row += '><tr>';
 
-    var row = '<td>' + testLink(testObject.name) + '</td>';
-    var test_prefix = stripExtension(testObject.name);
+    row += '<td>' + testLink(testObject.name) + '</td>';
 
+    var test_prefix = stripExtension(testObject.name);
     row += '<td>';
-
-    if (actual == 'CRASH')
-        row += resultLink(test_prefix, '-stack.txt', 'stack');
-    else if (actual == 'AUDIO') {
-        row += resultLink(test_prefix, '-expected.wav', 'expected');
-        row += resultLink(test_prefix, '-actual.wav', 'actual');
-    } else if (actual.indexOf('TEXT') != -1 || actual == 'TIMEOUT') {
+    
+    var actual = testObject.actual;
+    if (actual.indexOf('TEXT') != -1 || actual.indexOf('TIMEOUT') != -1) {
         // FIXME: only include timeout actual/expected results here if we actually spit out results for timeout tests.
         globalState().hasTextFailures = true;
         row += resultLink(test_prefix, '-expected.txt', 'expected') +
@@ -364,6 +365,14 @@ function tableRow(testObject)
             row += resultLink(test_prefix, '-wdiff.html', 'wdiff');
     }
 
+    if (actual.indexOf('CRASH') != -1)
+        row += resultLink(test_prefix, '-stack.txt', 'stack');
+    
+    if (actual.indexOf('AUDIO') != -1) {
+        row += resultLink(test_prefix, '-expected.wav', 'expected audio');
+        row += resultLink(test_prefix, '-actual.wav', 'actual audio');
+    }
+
     row += '</td><td>';
 
     if (actual.indexOf('IMAGE') != -1) {
@@ -388,7 +397,8 @@ function tableRow(testObject)
     if (globalState().results.uses_expectations_file)
       row += '<td>' + testObject.expected + '</td>';
 
-    return '<tbody class="' + (testObject.isExpected ? 'expected' : '') + '"><tr>' + row + '</tr></tbody>';
+    row += '</tr></tbody>';
+    return row;
 }
 
 function forEachTest(handler, opt_tree, opt_prefix)