Diff
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html (93028 => 93029)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html 2011-08-14 06:55:55 UTC (rev 93028)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html 2011-08-14 07:02:36 UTC (rev 93029)
@@ -59,6 +59,7 @@
<script src=""
<script src=""
<script src=""
+<script src=""
<script src=""
<script src=""
</body>
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css (93028 => 93029)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css 2011-08-14 06:55:55 UTC (rev 93028)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css 2011-08-14 07:02:36 UTC (rev 93029)
@@ -311,35 +311,20 @@
}
.results-detail .content {
- height: 100%;
background-color: white;
}
-.results-detail .failure-details .missing-data {
- font-style: italic;
- text-align: center;
- color: #555;
-}
-
-.results-detail .failure-details {
- height: 100%;
-}
-
-.results-detail .failure-details iframe {
+.text-result {
border: none;
width: 100%;
- height: 100%;
+ height: 400px; /* FIXME: How do we get a reasonable height here? */
}
-.results-detail .failure-details img {
- width: 100%;
- height: auto;
+.image-result {
+ width: 100%;
+ height: auto;
}
-.results-detail .failure-details td {
- height: 100%;
-}
-
/*** partytime ***/
.partytime {
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js (93028 => 93029)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js 2011-08-14 06:55:55 UTC (rev 93028)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js 2011-08-14 07:02:36 UTC (rev 93029)
@@ -118,7 +118,9 @@
// FIXME: We should be passing the full list of failing builder names as the fourth argument.
status.append(ui.failureDetailsStatus(failureInfo, [failureInfo.builderName]));
- content.append(ui.failureDetails(resultsURLs));
+ var resultsGrid = new ui.results.ResultsGrid();
+ resultsGrid.addResults(resultsURLs);
+ content.append(resultsGrid);
toggleButton($('.results-detail .actions .next'), g_resultsDetailsIterator.hasNext());
toggleButton($('.results-detail .actions .previous'), g_resultsDetailsIterator.hasPrevious());
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html (93028 => 93029)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html 2011-08-14 06:55:55 UTC (rev 93028)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html 2011-08-14 07:02:36 UTC (rev 93029)
@@ -52,6 +52,7 @@
<script src=""
<script src=""
<script src=""
+<script src=""
<script src=""
<script src=""
<script src=""
Added: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js (0 => 93029)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js (rev 0)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js 2011-08-14 07:02:36 UTC (rev 93029)
@@ -0,0 +1,114 @@
+var ui = ui || {};
+ui.results = ui.results || {};
+
+(function(){
+
+// FIXME: Rather than using table, should we be using something fancier?
+ui.results.Comparison = base.extends('table', {
+ init: function()
+ {
+ this.className = 'comparison';
+ this.innerHTML = '<thead><tr><th>Expected</th><th>Actual</th><th>Diff</th></tr></thead>' +
+ '<tbody><tr><td class="expected"></td><td class="actual"></td><td class="diff"></td></tr></tbody>';
+ },
+ _selectorForKind: function(kind)
+ {
+ switch (kind) {
+ case results.kExpectedKind:
+ return '.expected';
+ case results.kActualKind:
+ return '.actual';
+ case results.kDiffKind:
+ return '.diff';
+ }
+ return '.unknown';
+ },
+ update: function(kind, result)
+ {
+ var selector = this._selectorForKind(kind);
+ $(selector, this).empty().append(result);
+ return result;
+ },
+});
+
+// We'd really like TextResult and ImageResult to extend a common Result base
+// class, but we can't seem to do that because they inherit from different
+// HTMLElements. We could have them inherit from <div>, but that seems lame.
+
+ui.results.TextResult = base.extends('iframe', {
+ init: function(url)
+ {
+ this.className = 'text-result';
+ this.src = ""
+ }
+});
+
+ui.results.ImageResult = base.extends('img', {
+ init: function(url)
+ {
+ this.className = 'image-result';
+ this.src = ""
+ }
+});
+
+function constructorForResultType(type)
+{
+ return (type == results.kImageType) ? ui.results.ImageResult : ui.results.TextResult;
+}
+
+ui.results.ResultsGrid = base.extends('div', {
+ init: function()
+ {
+ this.className = 'results-grid';
+ },
+ _addResult: function(comparison, constructor, resultsURLsByKind, kind)
+ {
+ var url = ""
+ if (!url)
+ return;
+ comparison.update(kind, new constructor(url));
+ },
+ addComparison: function(resultType, resultsURLsByKind)
+ {
+ var comparison = new ui.results.Comparison();
+ var constructor = constructorForResultType(resultType);
+
+ this._addResult(comparison, constructor, resultsURLsByKind, results.kExpectedKind);
+ this._addResult(comparison, constructor, resultsURLsByKind, results.kActualKind);
+ this._addResult(comparison, constructor, resultsURLsByKind, results.kDiffKind);
+
+ this.appendChild(comparison);
+ return comparison;
+ },
+ addRow: function(resultType, url)
+ {
+ var constructor = constructorForResultType(resultType);
+ var view = new constructor(url);
+ this.appendChild(view);
+ return view;
+ },
+ addResults: function(resultsURLs)
+ {
+ var resultsURLsByTypeAndKind = {};
+
+ resultsURLsByTypeAndKind[results.kImageType] = {};
+ resultsURLsByTypeAndKind[results.kTextType] = {};
+
+ resultsURLs.forEach(function(url) {
+ resultsURLsByTypeAndKind[results.resultType(url)][results.resultKind(url)] = url;
+ });
+
+ $.each(resultsURLsByTypeAndKind, function(resultType, resultsURLsByKind) {
+ if ($.isEmptyObject(resultsURLsByKind))
+ return;
+ if (results.kUnknownKind in resultsURLsByKind) {
+ // This is something like "crash" that isn't a comparison.
+ this.addRow(resultType, resultsURLsByKind[results.kUnknownKind]);
+ return;
+ }
+ this.addComparison(resultType, resultsURLsByKind);
+ }.bind(this));
+ }
+});
+
+})();
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js (93028 => 93029)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js 2011-08-14 06:55:55 UTC (rev 93028)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js 2011-08-14 07:02:36 UTC (rev 93029)
@@ -82,24 +82,6 @@
return block;
};
-ui.failureDetails = function(resultsURLs)
-{
- var block = $('<table class="failure-details"><tbody><tr></tr></tbody></table>');
-
- if (!resultsURLs.length)
- $('tr', block).append($('<td><div class="missing-data">No data</div></td>'));
-
- $.each(resultsURLs, function(index, resultURL) {
- var kind = results.resultKind(resultURL);
- var type = results.resultType(resultURL);
- 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;
-};
-
function builderTableDataCells(resultNodesByBuilder)
{
if (!resultNodesByBuilder)
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js (93028 => 93029)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js 2011-08-14 06:55:55 UTC (rev 93028)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js 2011-08-14 07:02:36 UTC (rev 93029)
@@ -73,40 +73,61 @@
'</span>');
});
-test("failureDetails", 1, function() {
- var testResults = ui.failureDetails([
+test("results.ResultsGrid", 1, function() {
+ var grid = new ui.results.ResultsGrid()
+ grid.addResults([
'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',
]);
- testResults.wrap('<wrapper></wrapper>');
- equal(testResults.parent().html(),
- '<table class="failure-details">' +
+ equal(grid.innerHTML,
+ '<table class="comparison">' +
+ '<thead>' +
+ '<tr>' +
+ '<th>Expected</th>' +
+ '<th>Actual</th>' +
+ '<th>Diff</th>' +
+ '</tr>' +
+ '</thead>' +
'<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>' +
+ '<td class="expected"><img class="image-result" src="" +
+ '<td class="actual"><img class="image-result" src="" +
+ '<td class="diff"><img class="image-result" src="" +
'</tr>' +
'</tbody>' +
- '</table>');
-});
-
-test("failureDetails (empty)", 1, function() {
- var testResults = ui.failureDetails([]);
- testResults.wrap('<wrapper></wrapper>');
- equal(testResults.parent().html(),
- '<table class="failure-details">' +
+ '</table>' +
+ '<table class="comparison">' +
+ '<thead>' +
+ '<tr>' +
+ '<th>Expected</th>' +
+ '<th>Actual</th>' +
+ '<th>Diff</th>' +
+ '</tr>' +
+ '</thead>' +
'<tbody>' +
'<tr>' +
- '<td><div class="missing-data">No data</div></td>' +
+ '<td class="expected"></td>' +
+ '<td class="actual"></td>' +
+ '<td class="diff"><iframe class="text-result" src="" +
'</tr>' +
'</tbody>' +
'</table>');
});
+test("results.ResultsGrid (crashlog)", 1, function() {
+ var grid = new ui.results.ResultsGrid()
+ grid.addResults(['http://example.com/layout-test-results/foo-bar-crash-log.txt']);
+ equal(grid.innerHTML, '<iframe class="text-result" src=""
+});
+
+test("results.ResultsGrid (empty)", 1, function() {
+ var grid = new ui.results.ResultsGrid()
+ grid.addResults([]);
+ equal(grid.innerHTML, '');
+});
+
test("summarizeFailure", 1, function() {
var failureAnalysis = {
"testName": "svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop.html",
Modified: trunk/Tools/ChangeLog (93028 => 93029)
--- trunk/Tools/ChangeLog 2011-08-14 06:55:55 UTC (rev 93028)
+++ trunk/Tools/ChangeLog 2011-08-14 07:02:36 UTC (rev 93029)
@@ -1,3 +1,21 @@
+2011-08-14 Adam Barth <[email protected]>
+
+ Switch results detail view over to new-style object-oriented UI widgets
+ https://bugs.webkit.org/show_bug.cgi?id=66200
+
+ Reviewed by Dimitri Glazkov.
+
+ This patch replaces my goofy template-based UI for the results
+ comparison screen with new object-oriented UI widgets.
+
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/garden-o-matic.html:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.css:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/main.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui.js:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui/results.js: Added.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/ui_unittests.js:
+
2011-08-13 Dimitri Glazkov <[email protected]>
garden-o-matic's analyzeUnexpectedFailures needs a completion callback.