Diff
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js (201474 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js 2016-05-27 23:58:28 UTC (rev 201474)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js 2016-05-28 00:06:01 UTC (rev 201475)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -151,6 +151,16 @@
return this.baseURL + "builders/" + encodeURIComponent(iteration.queue.id) + "/builds/" + iteration.id;
},
+ _javascript_CoreTestFailuresURLForIteration: function(iteration, name)
+ {
+ return this.baseURL + "builders/" + encodeURIComponent(iteration.queue.id) + "/builds/" + iteration.id + "/steps/" + name + "/logs/json/text";
+ },
+
+ _javascript_CoreTestStdioUrlForIteration: function(iteration, name)
+ {
+ return this.baseURL + "builders/" + encodeURIComponent(iteration.queue.id) + "/builds/" + iteration.id + "/steps/" + name + "/logs/stdio";
+ },
+
layoutTestResultsDirectoryURLForIteration: function(iteration)
{
var underscoreSeparatedRevisions = "r";
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js (201474 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js 2016-05-27 23:58:28 UTC (rev 201474)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js 2016-05-28 00:06:01 UTC (rev 201475)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2013, 2015-2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -88,9 +88,9 @@
var message = this.revisionContentForIteration(slowestQueue.mostRecentSuccessfulIteration);
var statusMessagePassed = "all " + (queue.builder ? "builds succeeded" : "tests passed");
- var status = new StatusLineView(message, StatusLineView.Status.Good, statusMessagePassed, null, null);
- new PopoverTracker(status.statusBubbleElement, this._presentPopoverForCombinedGreenBubble.bind(this));
- this.element.appendChild(status.element);
+ var statusView = new StatusLineView(message, StatusLineView.Status.Good, statusMessagePassed, null, null);
+ new PopoverTracker(statusView.statusBubbleElement, this._presentPopoverForCombinedGreenBubble.bind(this));
+ this.element.appendChild(statusView.element);
} else {
this.appendBuildStyle.call(this, this.queues, null, function(queue) {
if (queue.buildbot.needsAuthentication && !queue.buildbot.isAuthenticated) {
@@ -107,9 +107,16 @@
if (firstRecentUnsuccessfulIteration && firstRecentUnsuccessfulIteration.loaded && mostRecentFinishedIteration && mostRecentFinishedIteration.loaded) {
console.assert(!mostRecentFinishedIteration.successful);
var message = this.revisionContentForIteration(mostRecentFinishedIteration, mostRecentFinishedIteration.productive ? mostRecentSuccessfulIteration : null);
- if (!mostRecentFinishedIteration.productive)
+ if (!mostRecentFinishedIteration.productive) {
var status = StatusLineView.Status.Danger;
- else {
+ } else if (mostRecentFinishedIteration.failedTestSteps.length === 1 && mostRecentFinishedIteration.failedTestSteps[0].name in ["jscore-test", "webkit-32bit-jsc-test", "webkit-jsc-cloop-test"]) {
+ var failedStep = mostRecentFinishedIteration.failedTestSteps[0];
+ var URL = "" failedStep.name);
+ var statusView = new StatusLineView(message, StatusLineView.Status.Bad, this._testStepFailureDescription(failedStep), failedStep.failureCount, URL);
+ this.element.appendChild(statusView.element);
+ new PopoverTracker(statusView.statusBubbleElement, this._presentPopoverForJavaScriptCoreTestRegressions.bind(this, failedStep.name), mostRecentFinishedIteration);
+ return;
+ } else {
// Direct links to some common logs.
var url = "" log");
if (!url)
@@ -123,22 +130,24 @@
// Some other step failed, link to main buildbot page for the iteration.
if (!url)
url = ""
- var status = new StatusLineView(message, status, mostRecentFinishedIteration.text, null, url);
- this.element.appendChild(status.element);
+ var statusView = new StatusLineView(message, status, mostRecentFinishedIteration.text, null, url);
+ this.element.appendChild(statusView.element);
if (needsPopover)
- new PopoverTracker(status.statusBubbleElement, this._presentIndividualQueuePopover.bind(this), mostRecentFinishedIteration);
+ new PopoverTracker(statusView.statusBubbleElement, this._presentIndividualQueuePopover.bind(this), mostRecentFinishedIteration);
}
var statusMessagePassed = "all " + (queue.builder ? "builds succeeded" : "tests passed");
if (mostRecentSuccessfulIteration && mostRecentSuccessfulIteration.loaded) {
var message = this.revisionContentForIteration(mostRecentSuccessfulIteration);
var url = ""
- var status = new StatusLineView(message, StatusLineView.Status.Good, firstRecentUnsuccessfulIteration ? "last succeeded" : statusMessagePassed, null, url);
- this.element.appendChild(status.element);
+ var label = firstRecentUnsuccessfulIteration ? "last succeeded" : statusMessagePassed;
+ var statusView = new StatusLineView(message, StatusLineView.Status.Good, label, null, url);
+ this.element.appendChild(statusView.element);
} else {
- var status = new StatusLineView("unknown", StatusLineView.Status.Neutral, firstRecentUnsuccessfulIteration ? "last succeeded" : statusMessagePassed);
- this.element.appendChild(status.element);
+ var label = firstRecentUnsuccessfulIteration ? "last succeeded" : statusMessagePassed;
+ var statusView = new StatusLineView("unknown", StatusLineView.Status.Neutral, label);
+ this.element.appendChild(statusView.element);
if (firstRecentUnsuccessfulIteration) {
// We have a failed iteration but no successful. It might be further back in time.
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js (201474 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js 2016-05-27 23:58:28 UTC (rev 201474)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js 2016-05-28 00:06:01 UTC (rev 201475)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2013, 2014, 2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -46,6 +46,7 @@
this.revision = {};
this.layoutTestResults = null; // Layout test results can be needed even if all tests passed, e.g. for the leaks bot.
+ this._javascript_CoreTestResults = null;
this.failedTestSteps = [];
@@ -250,6 +251,8 @@
var results = new BuildbotTestResults(step);
if (step.name === "layout-test")
this.layoutTestResults = results;
+ else if (step.name in ["jscore-test", "webkit-32bit-jsc-test", "webkit-jsc-cloop-test"])
+ this._javascript_CoreTestResults = results;
if (results.allPassed)
return;
this.failedTestSteps.push(results);
@@ -353,5 +356,25 @@
console.log(data.error);
callback();
}.bind(this), {jsonpCallbackName: "ADD_RESULTS", withCredentials: this.queue.buildbot.needsAuthentication});
- }
+ },
+
+ loadJavaScriptCoreTestResults: function(testName, callback)
+ {
+ if (this.queue.buildbot.needsAuthentication && this.queue.buildbot.authenticationStatus === Buildbot.AuthenticationStatus.InvalidCredentials)
+ return;
+
+ JSON.load(this.queue.buildbot._javascript_CoreTestFailuresURLForIteration(this, testName), function(data) {
+ this.queue.buildbot.isAuthenticated = true;
+ this._javascript_CoreTestResults.addJavaScriptCoreTestFailures(data);
+ callback();
+ }.bind(this),
+ function(data) {
+ if (data.errorType === JSON.LoadError && data.errorHTTPCode === 401) {
+ this.queue.buildbot.isAuthenticated = false;
+ this.dispatchEventToListeners(BuildbotIteration.Event.UnauthorizedAccess);
+ }
+ console.log(data.error);
+ callback();
+ }.bind(this), {withCredentials: this.queue.buildbot.needsAuthentication});
+ },
};
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js (201474 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js 2016-05-27 23:58:28 UTC (rev 201474)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js 2016-05-28 00:06:01 UTC (rev 201475)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2013, 2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -73,6 +73,95 @@
this.element.appendChild(status.element);
},
+ _createLoadingIndicator: function(iteration, heading) {
+ var content = document.createElement("div");
+ content.className = "test-results-popover";
+
+ this._addIterationHeadingToPopover(iteration, content, heading);
+ this._addDividerToPopover(content);
+
+ var loadingIndicator = document.createElement("div");
+ loadingIndicator.className = "loading-indicator";
+ loadingIndicator.textContent = "Loading\u2026";
+ content.appendChild(loadingIndicator);
+
+ return content;
+ },
+
+ // Work around bug 80159: -webkit-user-select:none not respected when copying content.
+ // We set clipboard data manually, temporarily making non-selectable content hidden
+ // to easily get accurate selection text.
+ _onPopoverCopy: function(event) {
+ var iterator = document.createNodeIterator(
+ event.currentTarget,
+ NodeFilter.SHOW_ELEMENT,
+ {
+ acceptNode: function(element) {
+ if (window.getComputedStyle(element).webkitUserSelect !== "none")
+ return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+ }
+ }
+ );
+
+ while ((node = iterator.nextNode()))
+ node.style.visibility = "visible";
+
+ event.currentTarget.style.visibility = "hidden";
+ event.clipboardData.setData('text', window.getSelection());
+ event.currentTarget.style.visibility = "";
+ return false;
+ },
+
+ _popoverContentForJavaScriptCoreTestRegressions: function(iteration, testName)
+ {
+ var content = document.createElement("div");
+ content.className = "test-results-popover";
+
+ this._addIterationHeadingToPopover(iteration, content, "_javascript_core test failures", iteration._javascript_CoreTestStdioUrlForIteration(iteration, testName));
+ this._addDividerToPopover(content);
+
+ if (!iteration._javascript_CoreTestResults.regressions) {
+ var message = document.createElement("div");
+ message.className = "loading-failure";
+ message.textContent = "Test results couldn\u2019t be loaded";
+ content.appendChild(message);
+ return content;
+ }
+
+ var regressions = iteration._javascript_CoreTestResults.regressions;
+
+ for (var i = 0, end = regressions.length; i != end; ++i) {
+ var test = regressions[i];
+ var rowElement = document.createElement("div");
+ var testPathElement = document.createElement("span");
+ testPathElement.className = "test-path";
+ testPathElement.textContent = test;
+ rowElement.appendChild(testPathElement);
+ content.appendChild(rowElement);
+ }
+
+ content._oncopy_ = this._onPopoverCopy;
+ return content;
+ },
+
+ _presentPopoverForJavaScriptCoreTestRegressions: function(testName, element, popover, iteration)
+ {
+ if (iteration._javascript_CoreTestResults.regressions)
+ var content = this._popoverContentForJavaScriptCoreTestRegressions(iteration);
+ else {
+ var content = this._createLoadingIndicator(iteration, "_javascript_core test failures");
+ iteration.loadJavaScriptCoreTestResults(testName, function() {
+ popover.content = this._popoverContentForJavaScriptCoreTestRegressions(iteration, testName);
+ }.bind(this));
+ }
+
+ var rect = Dashboard.Rect.rectFromClientRect(element.getBoundingClientRect());
+ popover.content = content;
+ popover.present(rect, [Dashboard.RectEdge.MIN_Y, Dashboard.RectEdge.MAX_Y, Dashboard.RectEdge.MAX_X, Dashboard.RectEdge.MIN_X]);
+ return true;
+ },
+
_presentPopoverForRevisionRange: function(element, popover, context)
{
var content = document.createElement("div");
@@ -147,7 +236,7 @@
return content;
},
- _addIterationHeadingToPopover: function(iteration, content, additionalText)
+ _addIterationHeadingToPopover: function(iteration, content, additionalText, additionalTextTarget)
{
var title = document.createElement("div");
title.className = "popover-iteration-heading";
@@ -165,9 +254,14 @@
title.appendChild(buildbotLink);
if (additionalText) {
- var additionalTextElement = document.createElement("span");
+ var elementType = additionalTextTarget ? "a" : "span";
+ var additionalTextElement = document.createElement(elementType);
additionalTextElement.className = "additional-text";
additionalTextElement.textContent = additionalText;
+ if (additionalTextTarget) {
+ additionalTextElement.href = ""
+ additionalTextElement.target = "_blank";
+ }
title.appendChild(additionalTextElement);
}
@@ -192,6 +286,27 @@
return fragment;
},
+ _testStepFailureDescription: function(failedStep)
+ {
+ if (!failedStep.failureCount)
+ return BuildbotIteration.TestSteps[failedStep.name] + " failed";
+ if (failedStep.failureCount === 1)
+ return BuildbotIteration.TestSteps[failedStep.name] + " failure";
+ return BuildbotIteration.TestSteps[failedStep.name] + " failures";
+ },
+
+ _testStepFailureDescriptionWithCount: function(failedStep)
+ {
+ if (!failedStep.failureCount)
+ return this._testStepFailureDescription(failedStep);
+ if (failedStep.tooManyFailures) {
+ // E.g. "50+ layout test failures", preventing line breaks around the "+".
+ return failedStep.failureCount + "\ufeff\uff0b\u00a0" + this._testStepFailureDescription(failedStep);
+ }
+ // E.g. "1 layout test failure", preventing line break after the number.
+ return failedStep.failureCount + "\u00a0" + this._testStepFailureDescription(failedStep);
+ },
+
appendBuildStyle: function(queues, defaultLabel, appendFunction)
{
queues.forEach(function(queue) {
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js (201474 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js 2016-05-27 23:58:28 UTC (rev 201474)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js 2016-05-28 00:06:01 UTC (rev 201475)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2013, 2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -184,4 +184,9 @@
// because buildbot counts regressions that had missing pixel results on retry (e.g. "TEXT MISSING").
console.assert(data.num_missing >= this.testsWithMissingResults.length);
},
+
+ addJavaScriptCoreTestFailures: function(data)
+ {
+ this.regressions = data.stressTestFailures;
+ },
};
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js (201474 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js 2016-05-27 23:58:28 UTC (rev 201474)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js 2016-05-28 00:06:01 UTC (rev 201475)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2013, 2014, 2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -105,6 +105,9 @@
if (failedStep.name === "layout-test") {
var status = new StatusLineView(messageElement, StatusLineView.Status.Bad, this._testStepFailureDescription(failedStep), failedStep.tooManyFailures ? failedStep.failureCount + "\uff0b" : failedStep.failureCount, iteration.queue.buildbot.layoutTestResultsURLForIteration(iteration));
new PopoverTracker(status.statusBubbleElement, this._presentPopoverForLayoutTestRegressions.bind(this), iteration);
+ } else if (failedStep.name in ["jscore-test", "webkit-32bit-jsc-test", "webkit-jsc-cloop-test"]) {
+ var status = new StatusLineView(messageElement, StatusLineView.Status.Bad, this._testStepFailureDescription(failedStep), failedStep.failureCount, iteration.queue.buildbot._javascript_CoreTestStdioUrlForIteration(iteration, failedStep.name));
+ new PopoverTracker(status.statusBubbleElement, this._presentPopoverForJavaScriptCoreTestRegressions.bind(this, failedStep.name), iteration);
} else {
var status = new StatusLineView(messageElement, StatusLineView.Status.Bad, this._testStepFailureDescription(failedStep), failedStep.failureCount ? failedStep.failureCount : undefined, failedStep.URL);
new PopoverTracker(status.statusBubbleElement, this._presentPopoverForGenericTestFailures.bind(this), iteration);
@@ -130,27 +133,6 @@
this.appendBuildStyle.call(this, this.debugQueues, "Debug", appendBuilderQueueStatus);
},
- _testStepFailureDescription: function(failedStep)
- {
- if (!failedStep.failureCount)
- return BuildbotIteration.TestSteps[failedStep.name] + " failed";
- if (failedStep.failureCount === 1)
- return BuildbotIteration.TestSteps[failedStep.name] + " failure";
- return BuildbotIteration.TestSteps[failedStep.name] + " failures";
- },
-
- _testStepFailureDescriptionWithCount: function(failedStep)
- {
- if (!failedStep.failureCount)
- return this._testStepFailureDescription(failedStep);
- if (failedStep.tooManyFailures) {
- // E.g. "50+ layout test failures", preventing line breaks around the "+".
- return failedStep.failureCount + "\ufeff\uff0b\u00a0" + this._testStepFailureDescription(failedStep);
- }
- // E.g. "1 layout test failure", preventing line break after the number.
- return failedStep.failureCount + "\u00a0" + this._testStepFailureDescription(failedStep);
- },
-
_popoverContentForLayoutTestRegressions: function(iteration)
{
var hasTestHistory = typeof testHistory !== "undefined";
@@ -229,31 +211,7 @@
content.appendChild(rowElement);
}
- // Work around bug 80159: -webkit-user-select:none not respected when copying content.
- // We set clipboard data manually, temporarily making non-selectable content hidden
- // to easily get accurate selection text.
- content._oncopy_ = function(event) {
- var iterator = document.createNodeIterator(
- event.currentTarget,
- NodeFilter.SHOW_ELEMENT,
- {
- acceptNode: function(element) {
- if (window.getComputedStyle(element).webkitUserSelect !== "none")
- return NodeFilter.FILTER_ACCEPT;
- return NodeFilter.FILTER_SKIP;
- }
- }
- );
-
- while ((node = iterator.nextNode()))
- node.style.visibility = "visible";
-
- event.currentTarget.style.visibility = "hidden";
- event.clipboardData.setData('text', window.getSelection());
- event.currentTarget.style.visibility = "";
- return false;
- }
-
+ content._oncopy_ = this._onPopoverCopy;
return content;
},
@@ -262,17 +220,8 @@
if (iteration.layoutTestResults.regressions)
var content = this._popoverContentForLayoutTestRegressions(iteration);
else {
- var content = document.createElement("div");
- content.className = "test-results-popover";
+ var content = this._createLoadingIndicator(iteration, "layout test failures");
- this._addIterationHeadingToPopover(iteration, content, "layout test failures");
- this._addDividerToPopover(content);
-
- var loadingIndicator = document.createElement("div");
- loadingIndicator.className = "loading-indicator";
- loadingIndicator.textContent = "Loading\u2026";
- content.appendChild(loadingIndicator);
-
iteration.loadLayoutTestResults(function() {
popover.content = this._popoverContentForLayoutTestRegressions(iteration);
}.bind(this));
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html (201474 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html 2016-05-27 23:58:28 UTC (rev 201474)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html 2016-05-28 00:06:01 UTC (rev 201475)
@@ -63,8 +63,10 @@
<script src=""
<script src=""
<script src=""
+ <script src=""
<script src=""
<script src=""
+ <script src=""
<script src=""
</head>
Copied: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbot.js (from rev 201474, trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js) (0 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbot.js (rev 0)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbot.js 2016-05-28 00:06:01 UTC (rev 201475)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+MockBuildbot = function() {};
+
+MockBuildbot.prototype = {
+ constructor: MockBuildbot,
+
+ buildPageURLForIteration: function(iteration)
+ {
+ return this.baseURL + "builders/" + encodeURIComponent(iteration.queue.id) + "/builds/" + iteration.id;
+ },
+
+ _javascript_CoreTestFailuresURLForIteration: function(iteration, name)
+ {
+ return "resources/test-jsc-results.json";
+ },
+
+ _javascript_CoreTestStdioUrlForIteration: function(iteration, name)
+ {
+ return this.baseURL + "builders/" + encodeURIComponent(iteration.queue.id) + "/builds/" + iteration.id + "/steps/" + name + "/logs/stdio";
+
+ },
+}
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js (201474 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js 2016-05-27 23:58:28 UTC (rev 201474)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js 2016-05-28 00:06:01 UTC (rev 201475)
@@ -39,7 +39,7 @@
heading: "",
crashesOnly: ""
};
- BuildbotQueue.call(this, "Mock BuildBot", "id", info);
+ BuildbotQueue.call(this, new MockBuildbot(), "id", info);
};
BaseObject.addConstructorFunctions(MockBuildbotQueue);
Copied: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotTestResults.js (from rev 201474, trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js) (0 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotTestResults.js (rev 0)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotTestResults.js 2016-05-28 00:06:01 UTC (rev 201475)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+MockBuildbotTestResults = function() {};
+
+MockBuildbotTestResults.prototype = {
+ constructor: MockBuildbotTestResults,
+
+ addJavaScriptCoreTestFailures: function(data)
+ {
+ this.regressions = data.stressTestFailures;
+ },
+};
Added: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-jsc-results.json (0 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-jsc-results.json (rev 0)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-jsc-results.json 2016-05-28 00:06:01 UTC (rev 201475)
@@ -0,0 +1 @@
+{"stressTestFailures":["lorem ipsum dolor sit amet", "consectetur adipiscing elit", "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"], "allApiTestsPassed": true}
Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js (201474 => 201475)
--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js 2016-05-27 23:58:28 UTC (rev 201474)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js 2016-05-28 00:06:01 UTC (rev 201475)
@@ -263,6 +263,90 @@
strictEqual(this.view._formatRevisionForDisplay("0e498db5d8e5b5a342631", repository), "0e498db", "Should be 0e498db");
});
+test("_popoverContentForJavaScriptCoreTestRegressions load failure UI test", function()
+{
+ var finished = false;
+ var iteration = new BuildbotIteration(this.queue, 1, finished);
+ iteration._javascript_CoreTestResults = new MockBuildbotTestResults();
+
+ var view = new BuildbotQueueView();
+ var content = view._popoverContentForJavaScriptCoreTestRegressions(iteration);
+
+ var numChildrenInEmptyPopoverContent = 2;
+ strictEqual(content.childNodes.length, 1 + numChildrenInEmptyPopoverContent);
+ strictEqual(content.childNodes[numChildrenInEmptyPopoverContent].className, "loading-failure", "Popover for loading failure must have the appropriate class");
+ strictEqual(content.childNodes[numChildrenInEmptyPopoverContent].textContent, "Test results couldn\u2019t be loaded", "Popover for loading failure must use the correct text");
+});
+
+test("_presentPopoverForJavaScriptCoreTestRegressions including loading", function()
+{
+ var finished = false;
+ var element = document.createElement("div");
+ var popover = new Dashboard.Popover();
+ var iteration = new BuildbotIteration(this.queue, 1, finished);
+ iteration._javascript_CoreTestResults = new MockBuildbotTestResults();
+
+ var view = new BuildbotQueueView();
+ view._presentPopoverForJavaScriptCoreTestRegressions(element, popover, iteration, "jscore-test");
+
+ JSON.load("resources/test-jsc-results.json", function(data)
+ {
+ var testRegressions = data.stressTestFailures;
+ var numChildrenInEmptyPopoverContent = 2;
+ strictEqual(popover._content.childNodes.length - numChildrenInEmptyPopoverContent,
+ testRegressions.length,
+ "Number of failures in popover must be equal to number of failed tests");
+
+ for (var i = 0; i < testRegressions.length; i++)
+ {
+ strictEqual(popover._content.childNodes[i+numChildrenInEmptyPopoverContent].childNodes[0].textContent,
+ testRegressions[i],
+ "Names of failures must match"
+ );
+ }
+ });
+});
+
+test("_createLoadingIndicator", function()
+{
+ var finished = false;
+ var iteration = new BuildbotIteration(this.queue, 1, finished);
+
+ var view = new BuildbotQueueView();
+ var heading = "Fair is foul, and foul is fair";
+ var content = view._createLoadingIndicator(iteration, heading);
+
+ var numChildrenInEmptyPopoverContent = 2;
+ strictEqual(content.childNodes.length, 1 + numChildrenInEmptyPopoverContent);
+ strictEqual(content.childNodes[numChildrenInEmptyPopoverContent].className, "loading-indicator", "Popover for loading indicator must have the appropriate class");
+ strictEqual(content.childNodes[numChildrenInEmptyPopoverContent].textContent, "Loading\u2026", "Popover for loading failure must use the correct text");
+});
+
+test("_presentPopoverForJavaScriptCoreTestRegressions already loaded", function()
+{
+ var finished = false;
+ var element = document.createElement("div");
+ var popover = new Dashboard.Popover();
+ var iteration = new BuildbotIteration(this.queue, 1, finished);
+ iteration._javascript_CoreTestResults = {"regressions": ["uno", "dos", "tres"]};
+
+ var view = new BuildbotQueueView();
+ view._presentPopoverForJavaScriptCoreTestRegressions(element, popover, iteration, "jscore-test");
+
+ var numChildrenInEmptyPopoverContent = 2;
+ strictEqual(popover._content.childNodes.length - numChildrenInEmptyPopoverContent,
+ iteration._javascript_CoreTestResults.regressions.length,
+ "Number of failures in popover must be equal to number of failed tests");
+
+ for (var i = 0; i < iteration._javascript_CoreTestResults.regressions.length; i++)
+ {
+ strictEqual(popover._content.childNodes[i+numChildrenInEmptyPopoverContent].childNodes[0].textContent,
+ iteration._javascript_CoreTestResults.regressions[i],
+ "Names of failures must match"
+ );
+ }
+});
+
module("BuildBotQueue", {
setup: function() {
Dashboard.Repository.OpenSource.trac = new MockTrac();
@@ -355,4 +439,4 @@
ok(this.queue.compareIterationsByRevisions(iteration2, iteration1) < 0, "compareIterationsByRevisions: less than");
ok(this.queue.compareIterationsByRevisions(iteration1, iteration2) > 0, "compareIterationsByRevisions: greater than");
strictEqual(this.queue.compareIterationsByRevisions(iteration2, iteration2), 0, "compareIterationsByRevisions: equal");
-});
\ No newline at end of file
+});
Modified: trunk/Tools/ChangeLog (201474 => 201475)
--- trunk/Tools/ChangeLog 2016-05-27 23:58:28 UTC (rev 201474)
+++ trunk/Tools/ChangeLog 2016-05-28 00:06:01 UTC (rev 201475)
@@ -1,3 +1,108 @@
+2016-05-27 Srinivasan Vijayaraghavan <svijayaragha...@apple.com>
+
+ Display failing JSC stress tests in buildbot dashboard
+ https://bugs.webkit.org/show_bug.cgi?id=156595
+
+ Reviewed by Alexey Proskuryakov.
+
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
+ (Buildbot.prototype._javascript_CoreTestFailuresURLForIteration):
+ (Buildbot.prototype._javascript_CoreTestStdioUrlForIteration):
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
+ (BuildbotCombinedQueueView.prototype.update):
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
+ (BuildbotIteration):
+ (BuildbotIteration.prototype._parseData):
+ (BuildbotIteration.prototype.loadLayoutTestResults):
+ (BuildbotIteration.prototype.):
+ (BuildbotIteration.prototype.loadJavaScriptCoreTestResults):
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
+ (BuildbotQueueView.prototype._createLoadingIndicator):
+ (BuildbotQueueView.prototype.):
+ (BuildbotQueueView.prototype._onPopoverCopy):
+ (BuildbotQueueView.prototype._popoverContentForJavaScriptCoreTestRegressions):
+ (BuildbotQueueView.prototype._presentPopoverForJavaScriptCoreTestRegressions):
+ (BuildbotQueueView.prototype._addIterationHeadingToPopover):
+ (BuildbotQueueView.prototype._testStepFailureDescription):
+ (BuildbotQueueView.prototype._testStepFailureDescriptionWithCount):
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
+ (BuildbotTestResults.prototype.addJavaScriptCoreTestFailures):
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
+ (BuildbotTesterQueueView.prototype.appendBuilderQueueStatus):
+ (BuildbotTesterQueueView.prototype.update):
+ (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions):
+ (BuildbotTesterQueueView.prototype._presentPopoverForLayoutTestRegressions):
+ (BuildbotTesterQueueView.prototype._testStepFailureDescription): Deleted.
+ (BuildbotTesterQueueView.prototype._testStepFailureDescriptionWithCount): Deleted.
+ (BuildbotTesterQueueView.prototype.): Deleted.
+ (BuildbotTesterQueueView.prototype.content.oncopy): Deleted.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html:
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbot.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js.
+ (MockBuildbot):
+ (MockBuildbot.prototype.buildPageURLForIteration):
+ (MockBuildbot.prototype._javascript_CoreTestFailuresURLForIteration):
+ (MockBuildbot.prototype._javascript_CoreTestStdioUrlForIteration):
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js:
+ (MockBuildbotQueue):
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotTestResults.js: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js.
+ (MockBuildbotTestResults):
+ (MockBuildbotTestResults.prototype.addJavaScriptCoreTestFailures):
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-jsc-results.json: Added.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js:
+
+2016-05-27 Srinivasan Vijayaraghavan <svijayaragha...@apple.com>
+
+ Display failing JSC stress tests in buildbot dashboard
+ https://bugs.webkit.org/show_bug.cgi?id=156595
+
+ Reviewed by Alexey Proskuryakov.
+
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
+ (Buildbot.prototype._javascript_CoreTestFailuresURLForIteration): Generate the URL for raw JSON output of
+ JSC tests.
+ (Buildbot.prototype._javascript_CoreTestStdioURLForIteration): Generate the URL for human-readable stdio output
+ of JSC tests.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
+ (BuildbotCombinedQueueView.prototype.update): Display JSC test results in popover.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
+ (BuildbotIteration): Add _javascript_CoreTestResults variable.
+ (BuildbotIteration.prototype.): Check for _javascript_core tests step.
+ (BuildbotIteration.prototype.loadLayoutTestResults): Add comma at closing brace.
+ (BuildbotIteration.prototype.loadJavaScriptCoreTestResults): Fetch JSON from Buildbot server.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
+ (BuildbotQueueView.prototype._createLoadingIndicator): Reusable function.
+ (BuildbotQueueView.prototype._onPopoverCopy): Reusable copy event handler to allow accurate copying of text
+ from popovers.
+ (BuildbotQueueView.prototype._popoverContentForJavaScriptCoreTestRegressions): Generates the popover bubble's
+ inner HTML from the JSC failure data.
+ (BuildbotQueueView.prototype._presentPopoverForJavaScriptCoreTestRegressions): Generate the popover bubble
+ for JSC results and handle request failures.
+ (BuildbotQueueView.prototype._testStepFailureDescription): Moved from subclass.
+ (BuildbotQueueView.prototype._testStepFailureDescriptionWithCount): Moved from subclass.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
+ (BuildbotTestResults.prototype.addJavaScriptCoreTestFailures): Parse JSON into a list of failing tests.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
+ (BuildbotTesterQueueView.prototype.appendBuilderQueueStatus): Instantiate PopoverTrackers for builds whose
+ only failures are JSC tests.
+ (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions): Use _onPopoverCopy.
+ (BuildbotTesterQueueView.prototype._presentPopoverForLayoutTestRegressions): Use _createLoadingIndicator.
+ (BuildbotTesterQueueView.prototype._testStepFailureDescription): Deleted. Moved to superclass.
+ (BuildbotTesterQueueView.prototype._testStepFailureDescriptionWithCount): Deleted. Moved to superclass.
+ (BuildbotTesterQueueView.prototype.content.oncopy): Deleted. Using superclass's reusable function as copy handler instead.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html: Add new script files.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbot.js: Added.
+ (MockBuildbot): Mocked version of Buildbot, only containing URL methods.
+ (MockBuildbot.prototype.buildPageURLForIteration): Same as real Buildbot.js
+ (MockBuildbot.prototype._javascript_CoreTestFailuresURLForIteration): Points to local file containing JSON for test.
+ (MockBuildbot.prototype._javascript_CoreTestStdioURLForIteration): Same as real Buildbot.js
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js:
+ (MockBuildbotQueue): Use a MockBuildbot() instead of a string.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotTestResults.js: Added.
+ (MockBuildbotTestResults): Mocked version of BuildbotTestResults.
+ (MockBuildbotTestResults.prototype.addJavaScriptCoreTestFailures): Sets the 'regressions' variable.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-jsc-results.json: Added.
+ * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js: Add four groups of tests.
+
2016-05-27 Chris Dumez <cdu...@apple.com>
WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables