Diff
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html (92885 => 92886)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html 2011-08-11 22:48:34 UTC (rev 92885)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html 2011-08-11 22:56:22 UTC (rev 92886)
@@ -36,7 +36,7 @@
<div class="butterbar"><span class="status">Loading...</span></div>
<div class="infobar"><span class="status"></span></div>
<div class="actions">
- <button class="show-selected-failures">Show Selected Failures</button><button class="rebaseline-selected">Rebaseline Selected</button><button class="add-selected-expectations">Mark Selected as Expected</button><button class="refresh">Refresh</button>
+ <button class="show-selected-failures">Show Selected Failures</button><button class="rebaseline-selected">Rebaseline Selected</button><button class="update-expectations-selected">Mark Selected as Expected</button><button class="refresh">Refresh</button>
</div>
<div class="recent-history"></div>
<div class="results-detail">
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js (92885 => 92886)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js 2011-08-11 22:48:34 UTC (rev 92885)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js 2011-08-11 22:56:22 UTC (rev 92886)
@@ -192,20 +192,7 @@
$('.test input:checkbox').each(function() {
if (!this.checked)
return;
- var testSummary = $(this).parents('.result');
- var testName = testSummary.attr(config.kTestNameAttr);
- $('.builder', testSummary).each(function() {
- var failureTypes = $(this).attr(config.kFailureTypesAttr);
- if (!failureTypes)
- return
- var failureTypeList = failureTypes.split(' ');
- var builderName = $(this).attr(config.kBuilderNameAttr);
- failureInfoList.push({
- 'testName': testName,
- 'builderName': builderName,
- 'failureTypeList': failureTypeList,
- });
- });
+ failureInfoList = failureInfoList.concat(ui.failureInfoListForSummary($(this).parents('.result')));
});
return failureInfoList;
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js (92885 => 92886)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js 2011-08-11 22:48:34 UTC (rev 92885)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js 2011-08-11 22:56:22 UTC (rev 92886)
@@ -149,4 +149,20 @@
});
};
+model.analyzeUnexpectedSuccesses = function(callback)
+{
+ var unexpectedSuccesses = results.unexpectedSuccessesByTest(model.state.resultsByBuilder);
+ $.each(unexpectedSuccesses, function(testName, resultNodesByBuilder) {
+ var successAnalysis = {
+ 'testName': testName,
+ 'resultNodesByBuilder': resultNodesByBuilder,
+ };
+
+ // FIXME: Consider looking at the history to see how long this test
+ // has been unexpectedly passing.
+
+ callback(successAnalysis);
+ });
+};
+
})();
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js (92885 => 92886)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js 2011-08-11 22:48:34 UTC (rev 92885)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js 2011-08-11 22:56:22 UTC (rev 92886)
@@ -141,6 +141,27 @@
return block;
};
+ui.failureInfoListForSummary = function(testSummary)
+{
+ var failureInfoList = [];
+
+ var testName = testSummary.attr(config.kTestNameAttr);
+ $('.builder', testSummary).each(function() {
+ var failureTypes = $(this).attr(config.kFailureTypesAttr);
+ if (!failureTypes)
+ return
+ var failureTypeList = failureTypes.split(' ');
+ var builderName = $(this).attr(config.kBuilderNameAttr);
+ failureInfoList.push({
+ 'testName': testName,
+ 'builderName': builderName,
+ 'failureTypeList': failureTypeList,
+ });
+ });
+
+ return failureInfoList;
+};
+
ui.commitEntry = function(commitData)
{
var entry = $('<td class="entry"></td>');
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js (92885 => 92886)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js 2011-08-11 22:48:34 UTC (rev 92885)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js 2011-08-11 22:56:22 UTC (rev 92886)
@@ -107,5 +107,38 @@
'</table>');
});
+test("summarizeFailure", 1, function() {
+ var failureAnalysis = {
+ "testName": "svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop.html",
+ "resultNodesByBuilder": {
+ "Webkit Mac10.5": {
+ "expected": "IMAGE",
+ "actual": "PASS"
+ },
+ "Webkit Mac10.5 (dbg)(2)": {
+ "expected": "IMAGE",
+ "actual":"PASS"
+ }
+ }
+ }
+ var failureSummary = ui.summarizeFailure(failureAnalysis);
+ var failureInfoList = ui.failureInfoListForSummary(failureSummary);
+
+ deepEqual(failureInfoList, [{
+ "testName": "svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop.html",
+ "builderName": "Webkit Mac10.5",
+ "failureTypeList": [
+ "PASS"
+ ]
+ }, {
+ "testName": "svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop.html",
+ "builderName": "Webkit Mac10.5 (dbg)(2)",
+ "failureTypeList": [
+ "PASS"
+ ]
+ }
+ ]);
+});
+
})();
Copied: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.html (from rev 92885, trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html) (0 => 92886)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.html (rev 0)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.html 2011-08-11 22:56:22 UTC (rev 92886)
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<!--
+Copyright (C) 2011 Google Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<html>
+<head>
+<title>Unexpected Passes</title>
+<link rel="stylesheet" href=""
+</head>
+<body>
+<div class="actions">
+ <button class="update-expectations-selected">Mark Selected as Expected</button>
+</div>
+<div class="recent-history"><table class="changelog"></table></div>
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+<script src=""
+</body>
+</html>
Added: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.js (0 => 92886)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.js (rev 0)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.js 2011-08-11 22:56:22 UTC (rev 92886)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+(function() {
+
+function selectedSuccesses()
+{
+ var failureInfoList = [];
+
+ $('.test input:checkbox').each(function() {
+ if (!this.checked)
+ return;
+ failureInfoList = failureInfoList.concat(ui.failureInfoListForSummary($(this).parents('.result')));
+ });
+
+ return failureInfoList;
+}
+
+function updateExpectationsForSelected()
+{
+ checkout.updateExpectations(selectedSuccesses(), $.noop);
+}
+
+function showUnexpectedSuccess(successAnalysis)
+{
+ // FIXME: Rename summarizeFailure to make it appropriate to use here.
+ $('.recent-history table').append(ui.summarizeFailure(successAnalysis));
+}
+
+function update()
+{
+ model.updateResultsByBuilder(function() {
+ model.analyzeUnexpectedSuccesses(showUnexpectedSuccess);
+ });
+}
+
+$('.update-expectations-selected').live('click', updateExpectationsForSelected);
+
+$(document).ready(update);
+
+})();
Modified: trunk/Tools/ChangeLog (92885 => 92886)
--- trunk/Tools/ChangeLog 2011-08-11 22:48:34 UTC (rev 92885)
+++ trunk/Tools/ChangeLog 2011-08-11 22:56:22 UTC (rev 92886)
@@ -1,3 +1,26 @@
+2011-08-11 Adam Barth <[email protected]>
+
+ Add unexpected-passes.html to TestFailures for marking tests as passing
+ https://bugs.webkit.org/show_bug.cgi?id=66102
+
+ Reviewed by Dimitri Glazkov.
+
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
+ - Move some code into the library so it can be shared.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/model.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:
+ - Add round-trip unit tests.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.html: Added.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/unexpected-passes.js: Added.
+ - I'm not entirely sure this feature should remain a separate HTML
+ file, but it seemed better than cluttering up the main HTML file
+ with too much extra stuff.
+ * Scripts/webkitpy/tool/servers/gardeningserver.py:
+ * Scripts/webkitpy/tool/servers/gardeningserver_unittest.py:
+ - The gardening server couldn't handle adding PASS expectations. Now it can.
+
2011-08-11 Eric Seidel <[email protected]>
NRWT has wrong fallback order for Mac now that Lion exists
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/gardeningserver.py (92885 => 92886)
--- trunk/Tools/Scripts/webkitpy/tool/servers/gardeningserver.py 2011-08-11 22:48:34 UTC (rev 92885)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/gardeningserver.py 2011-08-11 22:56:22 UTC (rev 92886)
@@ -71,7 +71,8 @@
updated_expectation_lines = []
# FIXME: Group failures by testName+failureTypeList.
for failure_info in failure_info_list:
- expectation_set = set(filter(None, map(TestExpectations.expectation_from_string, failure_info['failureTypeList'])))
+ expectation_set = set(filter(lambda expectation: expectation is not None,
+ map(TestExpectations.expectation_from_string, failure_info['failureTypeList'])))
assert(expectation_set)
test_name = failure_info['testName']
assert(test_name)
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/gardeningserver_unittest.py (92885 => 92886)
--- trunk/Tools/Scripts/webkitpy/tool/servers/gardeningserver_unittest.py 2011-08-11 22:48:34 UTC (rev 92885)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/gardeningserver_unittest.py 2011-08-11 22:56:22 UTC (rev 92886)
@@ -151,6 +151,12 @@
expectations_after = "BUG_NEW XP RELEASE CPU : failures/expected/image.html = IMAGE"
self.assert_update(failure_info_list, expectations_before=expectations_before, expectations_after=expectations_after)
+ def test_pass_expectation(self):
+ failure_info_list = [{"testName": "failures/expected/image.html", "builderName": "Webkit Win", "failureTypeList": ["PASS"]}]
+ expectations_before = "BUG_OLD XP RELEASE CPU : failures/expected/image.html = TEXT"
+ expectations_after = ""
+ self.assert_update(failure_info_list, expectations_before=expectations_before, expectations_after=expectations_after)
+
def test_supplement_old_expectation(self):
failure_info_list = [{"testName": "failures/expected/image.html", "builderName": "Webkit Win", "failureTypeList": ["IMAGE"]}]
expectations_before = "BUG_OLD XP RELEASE : failures/expected/image.html = TEXT"