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>');
});
})();