Diff
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js (93606 => 93607)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js 2011-08-23 15:48:55 UTC (rev 93606)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js 2011-08-23 16:02:41 UTC (rev 93607)
@@ -75,6 +75,18 @@
return result;
};
+base.filterDictionary = function(dictionary, predicate)
+{
+ var result = {};
+
+ for (var key in dictionary) {
+ if (predicate(key))
+ result[key] = dictionary[key];
+ }
+
+ return result;
+};
+
base.filterTree = function(tree, isLeaf, predicate)
{
var filteredTree = {};
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js (93606 => 93607)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js 2011-08-23 15:48:55 UTC (rev 93606)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js 2011-08-23 16:02:41 UTC (rev 93607)
@@ -167,6 +167,21 @@
ok(!iterator.hasPrevious())
});
+test("filterDictionary", 3, function() {
+ var dictionary = {
+ 'foo': 43,
+ 'bar': 11
+ }
+ deepEqual(base.filterDictionary(dictionary, function() { return true; }), {
+ "foo": 43,
+ "bar": 11
+ });
+ deepEqual(base.filterDictionary(dictionary, function() { return false; }), { });
+ deepEqual(base.filterDictionary(dictionary, function(key) { return key == 'foo'; }), {
+ "foo": 43
+ });
+});
+
test("filterTree", 2, function() {
var tree = {
'path': {
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers/rebaseline.js (93606 => 93607)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers/rebaseline.js 2011-08-23 15:48:55 UTC (rev 93606)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers/rebaseline.js 2011-08-23 16:02:41 UTC (rev 93607)
@@ -31,8 +31,8 @@
fetchResultsURLs: results.fetchResultsURLs
});
- var failureByTest = results.expectedOrUnexpectedFailuresByTest(model.state.resultsByBuilder);
- var controller = new contollers.ResultsDetails(resultsView, failureByTest);
+ var failuresByTest = results.expectedOrUnexpectedFailuresByTest(model.state.resultsByBuilder);
+ var controller = new controllers.ResultsDetails(resultsView, failuresByTest);
document.body.appendChild(resultsView);
});
});
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js (93606 => 93607)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js 2011-08-23 15:48:55 UTC (rev 93606)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js 2011-08-23 16:02:41 UTC (rev 93607)
@@ -23,11 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-var contollers = contollers || {};
+var controllers = controllers || {};
(function(){
-contollers.ResultsDetails = base.extends(Object, {
+controllers.ResultsDetails = base.extends(Object, {
init: function(view, resultsByTest)
{
this._view = view;
@@ -74,4 +74,74 @@
}
});
+controllers.UnexpectedFailures = base.extends(Object, {
+ init: function(view)
+ {
+ this._view = view;
+ this._testFailures = new base.UpdateTracker();
+ },
+ update: function(failureAnalysis)
+ {
+ var key = failureAnalysis.newestPassingRevision + "+" + failureAnalysis.oldestFailingRevision;
+ var failure = this._testFailures.get(key);
+ if (!failure) {
+ failure = new ui.notifications.TestFailures();
+ model.commitDataListForRevisionRange(failureAnalysis.newestPassingRevision + 1, failureAnalysis.oldestFailingRevision).forEach(function(commitData) {
+ failure.addCommitData(commitData);
+ });
+ this._view.add(failure);
+ $(failure).bind('examine', function() {
+ this.onExamine(failure);
+ }.bind(this));
+ }
+ failure.addFailureAnalysis(failureAnalysis);
+ this._testFailures.update(key, failure);
+ },
+ purge: function() {
+ this._testFailures.purge(function(failure) {
+ failure.dismiss();
+ });
+ },
+ onExamine: function(failures)
+ {
+ var resultsView = new ui.results.View({
+ fetchResultsURLs: results.fetchResultsURLs
+ });
+
+ var testNameList = failures.testNameList();
+ var failuresByTest = results.unexpectedFailuresByTest(model.state.resultsByBuilder)
+ var controller = new controllers.ResultsDetails(resultsView, base.filterDictionary(failuresByTest, function(key) {
+ return testNameList.indexOf(testNameList) != -1;
+ }));
+
+ // FIXME: This doesn't belong here. Also, we need some way to call controller.dismiss().
+ document.body.appendChild(resultsView);
+ }
+});
+
+controllers.FailingBuilders = base.extends(Object, {
+ init: function(view)
+ {
+ this._view = view;
+ this._notification = null;
+ },
+ update: function(builderNameList)
+ {
+ if (builderNameList.length == 0) {
+ if (this._notification) {
+ this._notification.dismiss();
+ this._notification = null;
+ }
+ return;
+ }
+ if (!this._notification) {
+ this._notification = new ui.notifications.BuildersFailing();
+ this._view.add(this._notification);
+ }
+ // FIXME: We should provide regression ranges for the failing builders.
+ // This doesn't seem to happen often enough to worry too much about that, however.
+ this._notification.setFailingBuilders(builderNameList);
+ }
+});
+
})();
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js (93606 => 93607)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js 2011-08-23 15:48:55 UTC (rev 93606)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.js 2011-08-23 16:02:41 UTC (rev 93607)
@@ -25,53 +25,26 @@
(function() {
-var g_actions = new ui.notifications.Stream();
-var g_info = new ui.notifications.Stream();
+var g_info = null;
var g_updateTimerId = 0;
-var g_testFailures = new base.UpdateTracker();
var g_buildersFailing = null;
+var g_unexpectedFailures = null;
+var g_failingBuilders = null;
+
function update()
{
// FIXME: This should be a button with a progress element.
- var updating = new ui.notifications.Info("Updating ...");
+ var updating = new ui.notifications.Info('Updating ...');
+
g_info.add(updating);
- builders.buildersFailingStepRequredForTestCoverage(function(builderNameList) {
- if (builderNameList.length == 0) {
- if (g_buildersFailing) {
- g_buildersFailing.dismiss();
- g_buildersFailing = null;
- }
- return;
- }
- if (!g_buildersFailing) {
- g_buildersFailing = new ui.notifications.BuildersFailing();
- g_info.add(g_buildersFailing);
- }
- // FIXME: We should provide regression ranges for the failing builders.
- // This doesn't seem to happen often enough to worry too much about that, however.
- g_buildersFailing.setFailingBuilders(builderNameList);
- });
+ builders.buildersFailingStepRequredForTestCoverage(g_failingBuilders.update.bind(g_failingBuilders));
base.callInParallel([model.updateRecentCommits, model.updateResultsByBuilder], function() {
- model.analyzeUnexpectedFailures(function(failureAnalysis) {
- var key = failureAnalysis.newestPassingRevision + "+" + failureAnalysis.oldestFailingRevision;
- var failure = g_testFailures.get(key);
- if (!failure) {
- failure = new ui.notifications.TestFailures();
- model.commitDataListForRevisionRange(failureAnalysis.newestPassingRevision + 1, failureAnalysis.oldestFailingRevision).forEach(function(commitData) {
- failure.addCommitData(commitData);
- });
- g_actions.add(failure);
- }
- failure.addFailureAnalysis(failureAnalysis);
- g_testFailures.update(key, failure);
- }, function() {
- g_testFailures.purge(function(failure) {
- failure.dismiss();
- });
+ model.analyzeUnexpectedFailures(g_unexpectedFailures.update.bind(g_unexpectedFailures), function() {
+ g_unexpectedFailures.purge();
updating.dismiss();
});
});
@@ -79,11 +52,21 @@
$(document).ready(function() {
g_updateTimerId = window.setInterval(update, config.kUpdateFrequency);
- document.body.insertBefore(g_actions, document.body.firstChild);
+
+ var actions = new ui.notifications.Stream();
+ g_unexpectedFailures = new controllers.UnexpectedFailures(actions);
+
+ g_info = new ui.notifications.Stream();
+ g_failingBuilders = new controllers.FailingBuilders(g_info);
+
+ document.body.insertBefore(actions, document.body.firstChild);
document.body.insertBefore(g_info, document.body.firstChild);
- var button = document.body.insertBefore(document.createElement("button"), document.body.firstChild);
+
+ // FIXME: This should be an Action object.
+ var button = document.body.insertBefore(document.createElement('button'), document.body.firstChild);
button.addEventListener("click", update);
button.textContent = 'update';
+
update();
});
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js (93606 => 93607)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js 2011-08-23 15:48:55 UTC (rev 93606)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js 2011-08-23 16:02:41 UTC (rev 93607)
@@ -138,7 +138,12 @@
this.appendChild(new ui.actions.List([
new ui.actions.Examine()
]));
+ this._testNameList = [];
},
+ testNameList: function()
+ {
+ return this._testNameList;
+ },
containsFailureAnalysis: function(failureAnalysis)
{
return Array.prototype.some.call(this._effects.children, function(child) {
@@ -149,6 +154,7 @@
{
if (this.containsFailureAnalysis(failureAnalysis))
return;
+ this._testNameList.push(failureAnalysis.testName);
return this._effects.appendChild(new ui.notifications.FailingTest(failureAnalysis));
},
addCommitData: function(commitData)
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js (93606 => 93607)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js 2011-08-23 15:48:55 UTC (rev 93606)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js 2011-08-23 16:02:41 UTC (rev 93607)
@@ -90,7 +90,7 @@
equal(suspiciousCommit.innerHTML, '<div class="description"><a href="" author (reviewer)</div><ul class="actions"><li><button>Roll out</button></li></ul>');
});
-test('TestFailures', 7, function() {
+test('TestFailures', 8, function() {
var testFailures = new ui.notifications.TestFailures();
equal(testFailures.tagName, 'LI');
equal(testFailures.innerHTML,
@@ -134,6 +134,7 @@
'<ul class="actions">' +
'<li><button>Examine</button></li>' +
'</ul>');
+ deepEqual(testFailures.testNameList(), ['test']);
var time = new Date();
time.setMinutes(time.getMinutes() - 10);
testFailures.addCommitData({revision: 1, time: time, title: "title", author: "author", reviewer: "reviewer"});
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js (93606 => 93607)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js 2011-08-23 15:48:55 UTC (rev 93606)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js 2011-08-23 16:02:41 UTC (rev 93607)
@@ -50,7 +50,7 @@
var resultsView = new ui.results.View({
fetchResultsURLs: $.noop
});
- var controller = new contollers.ResultsDetails(resultsView, kExampleResultsByTest);
+ var controller = new controllers.ResultsDetails(resultsView, kExampleResultsByTest);
controller.showTest("scrollbars/custom-scrollbar-with-incomplete-style.html");
equal(resultsView.currentTestName(), "scrollbars/custom-scrollbar-with-incomplete-style.html");
equal(resultsView.currentBuilderName(), "Mock Builder");
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html (93606 => 93607)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html 2011-08-23 15:48:55 UTC (rev 93606)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html 2011-08-23 16:02:41 UTC (rev 93607)
@@ -46,6 +46,7 @@
<script src=""
<script src=""
<script src=""
+<script src=""
<script src=""
</body>
</html>
Modified: trunk/Tools/ChangeLog (93606 => 93607)
--- trunk/Tools/ChangeLog 2011-08-23 15:48:55 UTC (rev 93606)
+++ trunk/Tools/ChangeLog 2011-08-23 16:02:41 UTC (rev 93607)
@@ -1,5 +1,28 @@
2011-08-23 Adam Barth <[email protected]>
+ garden-o-matic summary should be able to examine failures
+ https://bugs.webkit.org/show_bug.cgi?id=66748
+
+ Reviewed by Dimitri Glazkov.
+
+ This patch refactors a bunch of code from summary.js to independent
+ controllers in controllers.js. This patch also contains the first
+ iteration of binding the "examine" event to a the behavior showing the
+ details view for the tests. There's more work to do here to make this
+ work properly (and elegantly), but this patch is a start.
+
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base_unittests.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/controllers/rebaseline.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/summary.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:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results_unittests.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/summary.html:
+
+2011-08-23 Adam Barth <[email protected]>
+
webkitpy/common/config/build.py shouldn't mention non-existant Android directory
https://bugs.webkit.org/show_bug.cgi?id=66737