Title: [90923] trunk/Tools
Revision
90923
Author
[email protected]
Date
2011-07-13 09:57:14 -0700 (Wed, 13 Jul 2011)

Log Message

garden-o-matic should show test results
https://bugs.webkit.org/show_bug.cgi?id=64440

Reviewed by Adam Roben.

This patch introduces the results detail pane, which appears at the
bottom of the window and contains test results from the bots.
Currently, you can activate the pane by mousing over one of the builder
names associated with a failing test.

This is just a first iteration of the UI.  There's no way to resize or
zoom in on elements of the details pane, and images likely aren't sized
correctly, but it's a place to start.

* Scripts/webkitpy/tool/servers/data/gardeningserver/config.js:
    - Add constants for our data attributes so we don't typo them!
* Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
    - Add DOM structure for the details pane.
* Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
* Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
    - Bind events for showing and hiding the details pane.
* Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
    - Reduce the number of result types that we query for to avoid
      overfilling the details pane.  We'll probably need another
      solution here in the long-term.  For example, we could use tabs
      to pack more results into the pane.
* Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
* Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html:
    - Now that we're using the config package during testing, we need
      to include it in the testing HTML.
* Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
* Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:
    - Change the DOM structure of the results detail to make it fit
      nicely in the details pane (rather than flowing freely in the
      body, as it did before).

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (90922 => 90923)


--- trunk/Tools/ChangeLog	2011-07-13 16:30:22 UTC (rev 90922)
+++ trunk/Tools/ChangeLog	2011-07-13 16:57:14 UTC (rev 90923)
@@ -1,3 +1,41 @@
+2011-07-13  Adam Barth  <[email protected]>
+
+        garden-o-matic should show test results
+        https://bugs.webkit.org/show_bug.cgi?id=64440
+
+        Reviewed by Adam Roben.
+
+        This patch introduces the results detail pane, which appears at the
+        bottom of the window and contains test results from the bots.
+        Currently, you can activate the pane by mousing over one of the builder
+        names associated with a failing test.
+
+        This is just a first iteration of the UI.  There's no way to resize or
+        zoom in on elements of the details pane, and images likely aren't sized
+        correctly, but it's a place to start.
+
+        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js:
+            - Add constants for our data attributes so we don't typo them!
+        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
+            - Add DOM structure for the details pane.
+        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
+        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
+            - Bind events for showing and hiding the details pane.
+        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
+            - Reduce the number of result types that we query for to avoid
+              overfilling the details pane.  We'll probably need another
+              solution here in the long-term.  For example, we could use tabs
+              to pack more results into the pane.
+        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
+        * Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html:
+            - Now that we're using the config package during testing, we need
+              to include it in the testing HTML.
+        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
+        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:
+            - Change the DOM structure of the results detail to make it fit
+              nicely in the details pane (rather than flowing freely in the
+              body, as it did before).
+
 2011-07-13  Adam Roben  <[email protected]>
 
         Make TestFailures show every time a possibly-flaky test failed, but hide it by default

Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/config.js (90922 => 90923)


--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/config.js	2011-07-13 16:30:22 UTC (rev 90922)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/config.js	2011-07-13 16:57:14 UTC (rev 90923)
@@ -19,4 +19,7 @@
   'Webkit Mac10.6 (dbg)',
 ];
 
+config.kTestNameAttr = 'data-test-name';
+config.kBuilderNameAttr = 'data-builder-name';
+
 })();

Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/index.html (90922 => 90923)


--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/index.html	2011-07-13 16:30:22 UTC (rev 90922)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/index.html	2011-07-13 16:57:14 UTC (rev 90923)
@@ -12,6 +12,8 @@
 <body>
 <div class="butterbar"><span class="status">Loading...</span> <a class="dismiss" href=""
 <div class="results"></div>
+<div class="results-detail">
+<div class="toolbar"><a class="dismiss" href="" class="content"></div></div>
 <script src="" 
 <script src=""
 <script src=""

Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.css (90922 => 90923)


--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.css	2011-07-13 16:30:22 UTC (rev 90922)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.css	2011-07-13 16:57:14 UTC (rev 90923)
@@ -2,7 +2,7 @@
     font-family: Tahoma, sans-serif;
     font-size: 11px;
     margin: 0;
-    padding: 10px;
+    padding: 0;
 }
 
 a {
@@ -17,15 +17,13 @@
 }
 
 td {
-    padding: 5px;
     overflow: hidden;
     vertical-align: top;
-    border-bottom: 1px solid LightGray;
-    border-top: 0;
+    border-right: 1px solid #CCC;
 }
 
-tr:last-of-type td {
-    border-bottom: 0;
+td:last-of-type {
+    border-right: 0px;
 }
 
 .butterbar {
@@ -46,6 +44,10 @@
     opacity: 0.5;
 }
 
+.results {
+    margin: 10px;
+}
+
 .regression {
     padding: 0 0 10px 0;
 }
@@ -136,6 +138,11 @@
     color: #555;
 }
 
+.regression .where li:hover {
+    color: black;
+    background-color: #f3f3f3;
+}
+
 .regression .regression-range, .regression .failure-count {
     padding: 0px 2px;
     display: inline-block;
@@ -144,3 +151,47 @@
 .regression .failure-count {
     color: #555;
 }
+
+.results-detail {
+    display: none;
+    position: fixed;
+    background-color: #f3f3f3;
+    top: 50%;
+    left: 0px;
+    right: 0px;
+    bottom: 0px;
+}
+
+.results-detail .toolbar {
+    border-top: 1px solid #CCC;
+    text-align: right;
+    border-bottom: 1px solid #CCC;
+}
+
+.results-detail .dismiss {
+    display: inline-block;
+    padding: 5px;
+}
+
+.results-detail .toolbar {
+    position: relative;
+}
+
+.results-detail .content {
+    height: 100%;
+    background-color: white;
+}
+
+.results-detail .failure-details {
+    height: 100%;
+}
+
+.results-detail .failure-details iframe {
+    border: none;
+    width: 100%;
+    height: 100%;
+}
+
+.results-detail .failure-details td {
+    height: 100%;
+}

Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js (90922 => 90923)


--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js	2011-07-13 16:30:22 UTC (rev 90922)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js	2011-07-13 16:57:14 UTC (rev 90923)
@@ -5,6 +5,12 @@
     $('.butterbar').fadeOut();
 }
 
+function displayOnButterbar(message)
+{
+    $('.butterbar .status').text(message);
+    $('.butterbar').fadeIn();
+}
+
 function setIconState(hasFailures)
 {
     var faviconURL = 'favicon-' + (hasFailures ? 'red' : 'green') + '.png';
@@ -48,7 +54,49 @@
     });
 }
 
+function showResultsDetail()
+{
+    var builderName = $(this).attr(config.kBuilderNameAttr);
+    var testName = $('.what', $(this).parents('.test')).text();
+
+    var content = $('.results-detail .content');
+    if ($('.results', content).attr(config.kBuilderNameAttr) == builderName && $('.results', content).attr(config.kTestNameAttr) == testName)
+        return;
+
+    displayOnButterbar('Loading results');
+
+    results.fetchResultsURLs(builderName, testName, function(resultsURLs) {
+        function appendResults() {
+            content.append(ui.failureDetails(resultsURLs));
+            $('.results', content).attr(config.kBuilderNameAttr, builderName);
+            $('.results', content).attr(config.kTestNameAttr, testName);
+        }
+
+        var children = content.children();
+        if (children.length && $('.results-detail').is(":visible")) {
+            // The results-detail pane is already open. Let's do a quick cross-fade.
+            children.fadeOut('fast', function() {
+                content.empty();
+                appendResults();
+                content.children().hide().fadeIn('fast', dismissButterbar);
+            });
+        } else {
+            appendResults();
+            $('.results-detail').fadeIn('fast', dismissButterbar);
+        }
+    });
+}
+
+function hideResultsDetail()
+{
+    $('.results-detail').fadeOut('fast', function() {
+        $('.results-detail .content').empty();
+    });
+}
+
 $('.butterbar .dismiss').live('click', dismissButterbar);
+$('.regression .where li').live('mouseenter', showResultsDetail);
+$('.results-detail .dismiss').live('click', hideResultsDetail);
 
 $(document).ready(function() {
     fetchResults(function() {

Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js (90922 => 90923)


--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js	2011-07-13 16:30:22 UTC (rev 90922)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js	2011-07-13 16:57:14 UTC (rev 90923)
@@ -11,14 +11,15 @@
 var kLayoutTestResultsServer = 'http://build.chromium.org/f/chromium/layout_test_results/';
 var kLayoutTestResultsPath = '/results/layout-test-results/';
 
+// FIXME: Add support for the rest of the result types.
 var kPossibleSuffixList = [
     '-expected.png',
     '-actual.png',
     '-diff.png',
-    '-expected.txt',
-    '-actual.txt',
+    // '-expected.txt',
+    // '-actual.txt',
     '-diff.txt',
-    // FIXME: Add support for these result types.
+    '-crash-log.txt',
     // '-wdiff.html',
     // '-pretty-diff.html',
     // '-expected.html',

Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js (90922 => 90923)


--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js	2011-07-13 16:30:22 UTC (rev 90922)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js	2011-07-13 16:57:14 UTC (rev 90923)
@@ -344,9 +344,8 @@
     simulator.runTest(function() {
         results.fetchResultsURLs("Mock Builder", "userscripts/another-test.html", function(resultURLs) {
             deepEqual(resultURLs, [
-                "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-expected.txt",
-                "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-actual.txt",
                 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-diff.txt",
+                "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-crash-log.txt"
             ]);
         });
     });
@@ -355,9 +354,8 @@
         "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-expected.png",
         "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-actual.png",
         "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-diff.png",
-        "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-expected.txt",
-        "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-actual.txt",
         "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-diff.txt",
+        "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-crash-log.txt"
     ]);
 });
 

Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html (90922 => 90923)


--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html	2011-07-13 16:30:22 UTC (rev 90922)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/run-unittests.html	2011-07-13 16:57:14 UTC (rev 90923)
@@ -11,6 +11,7 @@
 <div id="qunit-testrunner-toolbar"></div>
 <h2 id="qunit-userAgent"></h2>
 <ol id="qunit-tests"></ol>
+<script src=""
 <script src=""
 <script src=""
 <script src=""

Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js (90922 => 90923)


--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js	2011-07-13 16:30:22 UTC (rev 90922)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js	2011-07-13 16:57:14 UTC (rev 90923)
@@ -41,7 +41,7 @@
 
     var where = $('.where', block);
     $.each(resultNodesByBuilder, function(builderName, resultNode) {
-        where.append($('<li></li>').text(displayNameForBuilder(builderName)));
+        where.append($('<li></li>').attr(config.kBuilderNameAttr, builderName).text(displayNameForBuilder(builderName)));
     });
 
     return block;
@@ -73,14 +73,15 @@
     return '(Seen ' + failureCount + ' times.)';
 };
 
-ui.results = function(resultsURLs)
+ui.failureDetails = function(resultsURLs)
 {
-    var block = $('<div class="results"></div>');
+    var block = $('<table class="failure-details"><tbody><tr></tr></tbody></table>');
     $.each(resultsURLs, function(index, resultURL) {
         var kind = results.resultKind(resultURL);
         var type = results.resultType(resultURL);
-        var fragment = type == results.kImageType ? '<img>' : '<iframe></iframe>';
-        block.append($(fragment).attr('src', resultURL).addClass(kind))
+        var fragment = (type == results.kImageType) ? '<img>' : '<iframe></iframe>';
+        var content = $(fragment).attr('src', resultURL).addClass(kind);
+        $('tr', block).append($('<td></td>').append(content));
     });
     return block;
 };

Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js (90922 => 90923)


--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js	2011-07-13 16:30:22 UTC (rev 90922)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js	2011-07-13 16:57:14 UTC (rev 90923)
@@ -51,22 +51,25 @@
     equal(ui.failureCount(3), '(Seen 3 times.)');
 });
 
-test("results", 1, function() {
-    var testResults = ui.results([
-        'http://example.com/layout-test-results/foo-bar-expected.txt',
-        'http://example.com/layout-test-results/foo-bar-actual.txt',
+test("failureDetails", 1, function() {
+    var testResults = ui.failureDetails([
         'http://example.com/layout-test-results/foo-bar-diff.txt',
         'http://example.com/layout-test-results/foo-bar-expected.png',
         'http://example.com/layout-test-results/foo-bar-actual.png',
         'http://example.com/layout-test-results/foo-bar-diff.png',
     ]);
-    equal(testResults.html(),
-        '<iframe src="" class="expected"></iframe>' +
-        '<iframe src="" class="actual"></iframe>' +
-        '<iframe src="" class="diff"></iframe>' +
-        '<img src="" class="expected">' +
-        '<img src="" class="actual">' +
-        '<img src="" class="diff">');
+    testResults.wrap('<wrapper></wrapper>');
+    equal(testResults.parent().html(),
+        '<table class="failure-details">' +
+            '<tbody>' +
+                '<tr>' +
+                    '<td><iframe src="" class="diff"></iframe></td>' +
+                    '<td><img src="" class="expected"></td>' +
+                    '<td><img src="" class="actual"></td>' +
+                    '<td><img src="" class="diff"></td>' +
+                '</tr>' +
+            '</tbody>' +
+        '</table>');
 });
 
 })();
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to