Title: [93607] trunk/Tools
Revision
93607
Author
[email protected]
Date
2011-08-23 09:02:41 -0700 (Tue, 23 Aug 2011)

Log Message

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:

Modified Paths

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
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to