Diff
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js (94539 => 94540)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js 2011-09-05 22:58:10 UTC (rev 94539)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js 2011-09-05 23:18:00 UTC (rev 94540)
@@ -67,7 +67,11 @@
},
});
-controllers.UnexpectedFailures = base.extends(Object, {
+var FailureStreamController = base.extends(Object, {
+ _resultsFilter: null,
+ _keyFor: function(failureAnalysis) { throw "Not implemented!"; },
+ _createFailureView: function(failureAnalysis) { throw "Not implemented!"; },
+
init: function(view)
{
this._view = view;
@@ -75,20 +79,10 @@
},
update: function(failureAnalysis)
{
- var key = failureAnalysis.newestPassingRevision + "+" + failureAnalysis.oldestFailingRevision;
+ var key = this._keyFor(failureAnalysis);
var failure = this._testFailures.get(key);
- var impliedFirstFailingRevision = failureAnalysis.newestPassingRevision + 1;
if (!failure) {
- failure = new ui.notifications.TestsFailing();
- model.commitDataListForRevisionRange(impliedFirstFailingRevision, failureAnalysis.oldestFailingRevision).forEach(function(commitData) {
- var suspiciousCommit = failure.addCommitData(commitData);
- $(suspiciousCommit).bind('rollout', function() {
- this.onRollout(commitData.revision, failure.testNameList());
- }.bind(this));
- $(failure).bind('blame', function() {
- this.onBlame(failure, commitData);
- }.bind(this));
- }, this);
+ failure = this._createFailureView(failureAnalysis);
this._view.add(failure);
$(failure).bind('examine', function() {
this.onExamine(failure);
@@ -98,8 +92,8 @@
}.bind(this));
}
failure.addFailureAnalysis(failureAnalysis);
- failure.updateBuilderResults(model.buildersInFlightForRevision(impliedFirstFailingRevision));
this._testFailures.update(key, failure);
+ return failure;
},
purge: function() {
this._testFailures.purge(function(failure) {
@@ -114,7 +108,7 @@
var testNameList = failures.testNameList();
var failuresByTest = base.filterDictionary(
- results.unexpectedFailuresByTest(model.state.resultsByBuilder),
+ this._resultsFilter(model.state.resultsByBuilder),
function(key) {
return testNameList.indexOf(key) != -1;
});
@@ -135,7 +129,40 @@
// FIXME: We should have a better dialog than this!
alert('Rebaseline done! Please land with "webkit-patch land-cowboy".');
});
+ }
+});
+
+controllers.UnexpectedFailures = base.extends(FailureStreamController, {
+ _resultsFilter: results.expectedOrUnexpectedFailuresByTest,
+
+ _impliedFirstFailingRevision: function(failureAnalysis)
+ {
+ return failureAnalysis.newestPassingRevision + 1;
},
+ _keyFor: function(failureAnalysis)
+ {
+ return failureAnalysis.newestPassingRevision + "+" + failureAnalysis.oldestFailingRevision;
+ },
+ _createFailureView: function(failureAnalysis)
+ {
+ var failure = new ui.notifications.FailingTestsSummary();
+ model.commitDataListForRevisionRange(this._impliedFirstFailingRevision(failureAnalysis), failureAnalysis.oldestFailingRevision).forEach(function(commitData) {
+ var suspiciousCommit = failure.addCommitData(commitData);
+ $(suspiciousCommit).bind('rollout', function() {
+ this.onRollout(commitData.revision, failure.testNameList());
+ }.bind(this));
+ $(failure).bind('blame', function() {
+ this.onBlame(failure, commitData);
+ }.bind(this));
+ }, this);
+
+ return failure;
+ },
+ update: function(failureAnalysis)
+ {
+ var failure = FailureStreamController.prototype.update.call(this, failureAnalysis);
+ failure.updateBuilderResults(model.buildersInFlightForRevision(this._impliedFirstFailingRevision(failureAnalysis)));
+ },
onBlame: function(failure, commitData)
{
failure.pinToCommitData(commitData);
@@ -151,6 +178,19 @@
}
});
+controllers.Failures = base.extends(FailureStreamController, {
+ _resultsFilter: results.expectedOrUnexpectedFailuresByTest,
+
+ _keyFor: function(failureAnalysis)
+ {
+ return base.dirName(failureAnalysis.testName);
+ },
+ _createFailureView: function(failureAnalysis)
+ {
+ return new ui.notifications.FailingTests();
+ },
+});
+
controllers.FailingBuilders = base.extends(Object, {
init: function(view)
{
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js (94539 => 94540)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js 2011-09-05 22:58:10 UTC (rev 94539)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js 2011-09-05 23:18:00 UTC (rev 94540)
@@ -30,7 +30,9 @@
var g_updateTimerId = 0;
var g_buildersFailing = null;
-var g_unexpectedFailures = null;
+var g_unexpectedFailuresController = null;
+var g_failuresController = null;
+
var g_failingBuilders = null;
function update()
@@ -43,10 +45,12 @@
builders.buildersFailingStepRequredForTestCoverage(g_failingBuilders.update.bind(g_failingBuilders));
base.callInParallel([model.updateRecentCommits, model.updateResultsByBuilder], function() {
- model.analyzeUnexpectedFailures(g_unexpectedFailures.update.bind(g_unexpectedFailures), function() {
- g_unexpectedFailures.purge();
+ model.analyzeUnexpectedFailures(g_unexpectedFailuresController.update.bind(g_unexpectedFailuresController), function() {
+ g_unexpectedFailuresController.purge();
updating.dismiss();
});
+
+ model.analyzeExpectedOrUnexpectedFailures(g_failuresController.update.bind(g_failuresController));
});
}
@@ -60,9 +64,12 @@
_onebar_ = new ui.onebar();
onebar.attach();
- var actions = new ui.notifications.Stream();
- g_unexpectedFailures = new controllers.UnexpectedFailures(actions);
+ var unexpectedFailuresView = new ui.notifications.Stream();
+ g_unexpectedFailuresController = new controllers.UnexpectedFailures(unexpectedFailuresView);
+ var failuresView = new ui.notifications.Stream();
+ g_failuresController = new controllers.Failures(failuresView);
+
g_info = new ui.notifications.Stream();
g_failingBuilders = new controllers.FailingBuilders(g_info);
@@ -74,8 +81,11 @@
var summary = onebar.summary();
summary.appendChild(updateButton);
summary.appendChild(g_info);
- summary.appendChild(actions);
+ summary.appendChild(unexpectedFailuresView);
+ var failures = onebar.failures();
+ failures.appendChild(failuresView);
+
update();
});
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js (94539 => 94540)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js 2011-09-05 22:58:10 UTC (rev 94539)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js 2011-09-05 23:18:00 UTC (rev 94540)
@@ -207,4 +207,20 @@
});
};
+model.analyzeExpectedOrUnexpectedFailures = function(callback)
+{
+ var expectedFailures = results.expectedOrUnexpectedFailuresByTest(model.state.resultsByBuilder);
+ $.each(expectedFailures, function(testName, resultNodesByBuilder) {
+ var failureAnalysis = {
+ 'testName': testName,
+ 'resultNodesByBuilder': resultNodesByBuilder,
+ };
+
+ // FIXME: Consider looking at the history to see how long this test
+ // has been failing.
+
+ callback(failureAnalysis);
+ });
+};
+
})();
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js (94539 => 94540)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js 2011-09-05 22:58:10 UTC (rev 94539)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js 2011-09-05 23:18:00 UTC (rev 94540)
@@ -116,11 +116,11 @@
var currentRevision = 66666;
var currentMinutesAgo = 0;
-function createTestsFailing(commitDataCount, failureAnalysisCount, builderFailureCount)
+function createFailingTestsSummary(commitDataCount, failureAnalysisCount, builderFailureCount)
{
- var testsFailing = new ui.notifications.TestsFailing();
+ var failingTestsSummary = new ui.notifications.FailingTestsSummary();
for (var i = 0; i < commitDataCount; ++i)
- testsFailing.addCommitData({
+ failingTestsSummary.addCommitData({
time: minutesAgo(currentMinutesAgo++),
revision: currentRevision++,
title: bugTitles.cycle(),
@@ -128,11 +128,11 @@
reviewer: people.cycle()
});
for (var i = 0; i < failureAnalysisCount; ++i)
- testsFailing.addFailureAnalysis({
+ failingTestsSummary.addFailureAnalysis({
testName: testNames.cycle(),
resultNodesByBuilder: createResultNodesByBuilder(builderFailureCount)
});
- return testsFailing;
+ return failingTestsSummary;
}
function createBuildersFailing(failingBuilderCount)
@@ -154,9 +154,9 @@
var button = document.body.insertBefore(document.createElement('button'), document.body.firstChild);
button.textContent = 'update';
- actions.add(createTestsFailing(3, 4, 1));
- actions.add(createTestsFailing(3, 1, 3));
- actions.add(createTestsFailing(1, 20, 1));
+ actions.add(createFailingTestsSummary(3, 4, 1));
+ actions.add(createFailingTestsSummary(3, 1, 3));
+ actions.add(createFailingTestsSummary(1, 20, 1));
actions.add(createBuildersFailing(1));
actions.add(createBuildersFailing(8));
});
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js (94539 => 94540)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js 2011-09-05 22:58:10 UTC (rev 94539)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js 2011-09-05 23:18:00 UTC (rev 94540)
@@ -135,7 +135,6 @@
init: function()
{
this._time = this._how.appendChild(new ui.RelativeTime());
- this._where = this._how.appendChild(new ui.failures.FailureGrid());
this._problem = this._what.appendChild(document.createElement('div'));
this._problem.className = 'problem';
this._effects = this._problem.appendChild(document.createElement('ul'));
@@ -149,7 +148,7 @@
}
});
-ui.notifications.TestsFailing = base.extends(ui.notifications.Failure, {
+ui.notifications.FailingTests = base.extends(ui.notifications.Failure, {
init: function() {
// FIXME: Convert actions to a link from test!
this._problem.appendChild(new ui.actions.List([
@@ -157,7 +156,6 @@
new ui.actions.Rebaseline(),
]));
this._testNameList = [];
- this._commitDataPinned = false;
},
testNameList: function()
{
@@ -167,21 +165,54 @@
{
return this._testNameList.indexOf(failureAnalysis.testName) != -1;
},
- updateBuilderResults: function(resultNodesByBuilder)
- {
- this._where.add(resultNodesByBuilder);
- },
addFailureAnalysis: function(failureAnalysis)
{
if (this.containsFailureAnalysis(failureAnalysis))
- return;
+ return false;
this._testNameList.push(failureAnalysis.testName);
- this.updateBuilderResults(failureAnalysis.resultNodesByBuilder);
$(this._effects).empty();
this._forEachTestGroup(function (testGroup) {
this._effects.appendChild(new ui.notifications.FailingTestGroup(testGroup))
}.bind(this));
+ return true;
},
+ _forEachTestGroup: function(callback)
+ {
+ var testsByDirectory = {};
+ this._testNameList.forEach(function(testName) {
+ var directory = base.dirName(testName);
+ testsByDirectory[directory] = testsByDirectory[directory] || [];
+ testsByDirectory[directory].push(testName);
+ });
+ var individualTests = [];
+ Object.keys(testsByDirectory).forEach(function(directory) {
+ var testsInDirectory = testsByDirectory[directory];
+ var count = testsInDirectory.length;
+ if (count <= kMaxTestsPerGroup) {
+ individualTests = individualTests.concat(testsInDirectory);
+ return;
+ }
+ callback(directory + ' (' + count + ' tests)');
+ });
+ individualTests.forEach(callback);
+ }
+});
+
+ui.notifications.FailingTestsSummary = base.extends(ui.notifications.FailingTests, {
+ init: function() {
+ this._where = this._how.appendChild(new ui.failures.FailureGrid());
+ this._commitDataPinned = false;
+ },
+ updateBuilderResults: function(resultNodesByBuilder)
+ {
+ this._where.add(resultNodesByBuilder);
+ },
+ addFailureAnalysis: function(failureAnalysis)
+ {
+ if (!ui.notifications.FailingTests.prototype.addFailureAnalysis.call(this, failureAnalysis))
+ return false;
+ this.updateBuilderResults(failureAnalysis.resultNodesByBuilder);
+ },
pinToCommitData: function(commitData)
{
if (this._commitDataPinned)
@@ -203,26 +234,6 @@
this._time.setDate(commitDataDate);
}
return this._causes.appendChild(new ui.notifications.SuspiciousCommit(commitData));
- },
- _forEachTestGroup: function(callback)
- {
- var testsByDirectory = {};
- this._testNameList.forEach(function(testName) {
- var directory = base.dirName(testName);
- testsByDirectory[directory] = testsByDirectory[directory] || [];
- testsByDirectory[directory].push(testName);
- });
- var individualTests = [];
- Object.keys(testsByDirectory).forEach(function(directory) {
- var testsInDirectory = testsByDirectory[directory];
- var count = testsInDirectory.length;
- if (count <= kMaxTestsPerGroup) {
- individualTests = individualTests.concat(testsInDirectory);
- return;
- }
- callback(directory + ' (' + count + ' tests)');
- });
- individualTests.forEach(callback);
}
});
@@ -230,11 +241,9 @@
init: function()
{
this._problem.insertBefore(document.createTextNode('Build Failed:'), this._problem.firstChild);
- $(this._where).detach();
},
setFailingBuilders: function(builderNameList)
{
- // FIXME: Populate this._where with failing builders.
$(this._effects).empty().append(builderNameList.map(function(builderName) {
var effect = document.createElement('li');
effect.className = 'builder-name';
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js (94539 => 94540)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js 2011-09-05 22:58:10 UTC (rev 94539)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js 2011-09-05 23:18:00 UTC (rev 94540)
@@ -98,18 +98,8 @@
'</ul>');
});
-test('TestsFailing', 13, function() {
- var testFailures = new ui.notifications.TestsFailing();
- deepEqual(Object.getOwnPropertyNames(testFailures.__proto__), [
- "init",
- "testNameList",
- "updateBuilderResults",
- "addFailureAnalysis",
- "pinToCommitData",
- "_forEachTestGroup",
- "containsFailureAnalysis",
- "addCommitData"
- ]);
+test('FailingTestsSummary', 12, function() {
+ var testFailures = new ui.notifications.FailingTestsSummary();
equal(testFailures.tagName, 'LI');
equal(testFailures.innerHTML,
'<div class="how">' +
@@ -304,8 +294,8 @@
'</div>');
});
-test('TestsFailing (grouping)', 1, function() {
- var testFailures = new ui.notifications.TestsFailing();
+test('FailingTestsSummary (grouping)', 1, function() {
+ var testFailures = new ui.notifications.FailingTestsSummary();
testFailures.addFailureAnalysis({testName: 'path/to/test1.html', resultNodesByBuilder: {}});
testFailures.addFailureAnalysis({testName: 'path/to/test2.html', resultNodesByBuilder: {}});
testFailures.addFailureAnalysis({testName: 'path/to/test3.html', resultNodesByBuilder: {}});
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js (94539 => 94540)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js 2011-09-05 22:58:10 UTC (rev 94539)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js 2011-09-05 23:18:00 UTC (rev 94540)
@@ -60,14 +60,17 @@
'<li><a href="" +
'<li><a href="" +
'<li><a href="" +
+ '<li><a href="" +
'</ul>' +
'<div id="summary"></div>' +
'<div id="results"></div>' +
- '<div id="commits">Coming soon...</div>';
+ '<div id="commits">Coming soon...</div>' +
+ '<div id="failures"></div>';
this._tabNames = [
'summary',
'results',
- 'commits,'
+ 'commits',
+ 'failures',
]
this._tabs = $(this).tabs({
disabled: [1, 2],
@@ -89,6 +92,10 @@
{
return this.tabNamed('results');
},
+ failures: function()
+ {
+ return this.tabNamed('failures');
+ },
select: function(tabName)
{
var tabIndex = this._tabNames.indexOf(tabName);
Modified: trunk/Tools/ChangeLog (94539 => 94540)
--- trunk/Tools/ChangeLog 2011-09-05 22:58:10 UTC (rev 94539)
+++ trunk/Tools/ChangeLog 2011-09-05 23:18:00 UTC (rev 94540)
@@ -1,5 +1,27 @@
2011-09-05 Adam Barth <[email protected]>
+ Add a tab to garden-o-matic for viewing expected failures
+ https://bugs.webkit.org/show_bug.cgi?id=67619
+
+ Reviewed by Dimitri Glazkov.
+
+ This patch adds a basic tab to garden-o-matic that shows all the tests
+ failing on the bots, including the expected failures. This patch
+ mostly involves refactoring existing classes to allow new subclasses.
+
+ This view is useful for when gardeners mark tests as expected to fail
+ and then rebaseline them later.
+
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/garden-o-matic.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary-mock.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js:
+
+2011-09-05 Adam Barth <[email protected]>
+
Fix global variable leak in garden-o-matic
https://bugs.webkit.org/show_bug.cgi?id=67617