Title: [201475] trunk/Tools
Revision
201475
Author
commit-qu...@webkit.org
Date
2016-05-27 17:06:01 -0700 (Fri, 27 May 2016)

Log Message

Display failing JSC stress tests in buildbot dashboard
https://bugs.webkit.org/show_bug.cgi?id=156595

Patch by Srinivasan Vijayaraghavan <svijayaragha...@apple.com> on 2016-05-27
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:

Modified Paths

Added Paths

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
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to