Convert moar Sheriff-o-Matic tests to Polymer.

BUG=400387
R=ojan@chromium.org,esprehn@chromium.org,leviw@chromium.org
NOTRY=true

Review URL: https://codereview.chromium.org/459463003

git-svn-id: svn://svn.chromium.org/blink/trunk@180026 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 662f7a12
......@@ -14,20 +14,22 @@ module.exports = function(config) {
// mocha setup
client: {
mocha: {
ui: 'bdd'
ui: 'bdd',
globals: ['net']
}
},
// list of files / patterns to load in the browser
files: [
'bower_components/platform/platform.js',
'test/karma_loader.html',
'test/karma-loader.html',
'bower_components/chai/chai.js',
'bower_components/sugar/release/sugar-full.development.js',
{pattern: 'bower_components/**/*.{js,html,css,map}', included: false},
'node_modules/mocha/mocha.js',
'polymer-load-warning.html',
{pattern: 'model/*.html', included: false},
{pattern: 'lib/*.html', included: false},
'model/test/*.html',
'scripts/*.js',
{pattern: 'ui/*.html', included: false},
......
<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<script>
function NetworkSimulator(assert, done) {
this._assert = assert;
this._done = done;
this._pendingPromises = [];
}
NetworkSimulator._testInProgress = false;
NetworkSimulator.prototype.schedulePromise = function(promise) {
this._pendingPromises.push(promise);
return promise;
};
NetworkSimulator.prototype.resolvePromises = function() {
var self = this;
return new Promise(function(resolve, reject) {
var pendingPromises = self._pendingPromises;
self._pendingPromises = [];
function allResolved(results) {
if (self._pendingPromises.length) {
resolve(self.resolvePromises());
return;
}
resolve(results);
}
Promise.all(pendingPromises).then(allResolved, allResolved);
});
};
NetworkSimulator.prototype.runTest = function(testCase) {
if (NetworkSimulator._testInProgress) {
this._assert(false, "runTest calls cannot be nested");
this._done();
return;
}
NetworkSimulator._testInProgress = true;
var self = this;
return new Promise(function(resolve, reject) {
var realNet = window.net;
function reset() {
window.net = realNet;
NetworkSimulator._testInProgress = false;
}
// All net.* methods should return promises. This watches all
// promises generated by test-overridden methods.
window.net = {};
['probe', 'jsonp', 'get', 'post',
'ajax', 'json', 'xml'].forEach(function(method) {
if (method in self) {
net[method] = function() {
return self.schedulePromise(self[method].apply(self, arguments));
};
};
});
try {
testCase();
} catch(e) {
// Make sure errors thrown in the test case don't leave window.net in a bad state.
reset();
self._assert(false, "Test case threw an error:" + e);
}
self.resolvePromises().then(function() {
reset();
self._assert(window.net == realNet);
resolve();
}).catch(function(e) {
reset();
self._assert(false, "Failed to finish test: " + e);
});
});
};
</script>
......@@ -36,7 +36,7 @@ var closedTreeJson = {
};
asyncTest("basic", 6, function() {
var simulator = new NetworkSimulator();
var simulator = new NetworkSimulator(ok, start);
simulator.json = function(url) {
if (url.indexOf('closed') != -1)
return Promise.resolve(closedTreeJson);
......
......@@ -51,24 +51,14 @@ THE POSSIBILITY OF SUCH DAMAGE.
<script src="bower_components/platform/platform.js"></script>
<link rel="import" href="bower_components/polymer/polymer.html">
<link rel="import" href="polymer-load-warning.html">
<link rel="import" href="lib/network-simulator.html">
<link rel="import" href="model/ct-builder-tests.html">
<link rel="import" href="model/ct-commit-log-tests.html">
<link rel="import" href="model/ct-commit-tests.html">
<link rel="import" href="model/ct-failure-tests.html">
<link rel="import" href="model/tree-status-tests.html">
<link rel="import" href="ui/ct-builder-grid-tests.html">
<link rel="import" href="ui/ct-builder-tests.html">
<link rel="import" href="ui/ct-commit-tests.html">
<link rel="import" href="ui/ct-commit-list-tests.html">
<link rel="import" href="ui/ct-embedded-flakiness-dashboard-tests.html">
<link rel="import" href="ui/ct-failure-analyzer-tests.html">
<link rel="import" href="ui/ct-failure-card-tests.html">
<link rel="import" href="ui/ct-failure-stream-tests.html">
<link rel="import" href="ui/ct-party-time-tests.html">
<link rel="import" href="ui/ct-results-by-builder-tests.html">
<link rel="import" href="ui/ct-results-comparison-tests.html">
<link rel="import" href="ui/ct-results-comparison-zoomer-tests.html">
<link rel="import" href="ui/ct-results-detail-tests.html">
<link rel="import" href="ui/ct-results-panel-tests.html">
<link rel="import" href="ui/ct-revision-details-tests.html">
<link rel="import" href="ui/ct-test-list-tests.html">
......
......@@ -23,85 +23,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
// Export NetworkSimulator for use by other unittests.
function NetworkSimulator()
{
this._pendingPromises = [];
};
NetworkSimulator._testInProgress = false;
NetworkSimulator.prototype.schedulePromise = function(promise) {
this._pendingPromises.push(promise);
return promise;
};
NetworkSimulator.prototype.resolvePromises = function() {
var self = this;
return new Promise(function(resolve, reject) {
var pendingPromises = self._pendingPromises;
self._pendingPromises = [];
function allResolved(results) {
if (self._pendingPromises.length) {
resolve(self.resolvePromises());
return;
}
resolve(results);
}
Promise.all(pendingPromises).then(allResolved, allResolved);
});
};
NetworkSimulator.prototype.runTest = function(testCase)
{
if (NetworkSimulator._testInProgress) {
ok(false, "runTest calls cannot be nested");
start();
return;
}
NetworkSimulator._testInProgress = true;
var self = this;
return new Promise(function(resolve, reject) {
var realNet = window.net;
function reset() {
window.net = realNet;
NetworkSimulator._testInProgress = false;
}
// All net.* methods should return promises. This watches all
// promises generated by test-overridden methods.
window.net = {};
['probe', 'jsonp', 'get', 'post',
'ajax', 'json', 'xml'].forEach(function(method) {
if (method in self) {
net[method] = function() {
return self.schedulePromise(self[method].apply(self, arguments));
};
};
});
try {
testCase();
} catch(e) {
// Make sure errors thrown in the test case don't leave window.net in a bad state.
reset();
ok(false, "Test case threw an error:" + e);
}
self.resolvePromises().then(function() {
reset();
equal(window.net, realNet);
resolve();
}).catch(function(e) {
reset();
ok(false, "Failed to finish test: " + e);
});
});
};
(function () {
module("net");
......
<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<script>
function NetworkSimulator(assert, done) {
this._assert = assert;
this._done = done;
this._pendingPromises = [];
}
NetworkSimulator._testInProgress = false;
NetworkSimulator.prototype.schedulePromise = function(promise) {
this._pendingPromises.push(promise);
return promise;
};
NetworkSimulator.prototype.resolvePromises = function() {
var self = this;
return new Promise(function(resolve, reject) {
var pendingPromises = self._pendingPromises;
self._pendingPromises = [];
function allResolved(results) {
if (self._pendingPromises.length) {
resolve(self.resolvePromises());
return;
}
resolve(results);
}
Promise.all(pendingPromises).then(allResolved, allResolved);
});
};
NetworkSimulator.prototype.runTest = function(testCase) {
if (NetworkSimulator._testInProgress) {
this._assert(false, "runTest calls cannot be nested");
this._done();
return;
}
NetworkSimulator._testInProgress = true;
var self = this;
return new Promise(function(resolve, reject) {
var realNet = window.net;
function reset() {
window.net = realNet;
NetworkSimulator._testInProgress = false;
}
// All net.* methods should return promises. This watches all
// promises generated by test-overridden methods.
window.net = {};
['probe', 'jsonp', 'get', 'post',
'ajax', 'json', 'xml'].forEach(function(method) {
if (method in self) {
net[method] = function() {
return self.schedulePromise(self[method].apply(self, arguments));
};
};
});
try {
testCase();
} catch(e) {
// Make sure errors thrown in the test case don't leave window.net in a bad state.
reset();
self._assert(false, "Test case threw an error:" + e);
}
self.resolvePromises().then(function() {
reset();
self._assert(window.net == realNet);
resolve();
}).catch(function(e) {
reset();
self._assert(false, "Failed to finish test: " + e);
});
});
};
</script>
......@@ -80,7 +80,7 @@ test("resultType", 12, function() {
});
asyncTest("fetchResultsURLs", 5, function() {
var simulator = new NetworkSimulator();
var simulator = new NetworkSimulator(ok, start);
var probedURLs = [];
simulator.probe = function(url)
......
......@@ -9,7 +9,7 @@ found in the LICENSE file.
<link rel="stylesheet" href="../node_modules/mocha/mocha.css">
<title>Sheriff-O-Matic Unit Tests</title>
<script src="../scripts/ui.js"></script>
<script src="../scripts/results.js"></script>
<script src="../bower_components/chai/chai.js"></script>
<script src="../node_modules/mocha/mocha.js"></script>
<script src="../bower_components/sugar/release/sugar-full.development.js"></script>
......@@ -19,6 +19,7 @@ found in the LICENSE file.
<script>
mocha.checkLeaks();
mocha.globals(['net']);
mocha.setup('bdd');
</script>
......@@ -27,5 +28,5 @@ mocha.setup('bdd');
<div id="mocha"></div>
<script>
mocha.run();
Polymer.whenReady(mocha.run);
</script>
......@@ -11,5 +11,8 @@ found in the LICENSE file.
<link rel="import" href="../ui/test/ct-commit-tests.html">
<link rel="import" href="../ui/test/ct-embedded-flakiness-dashboard-tests.html">
<link rel="import" href="../ui/test/ct-failure-analyzer-tests.html">
<link rel="import" href="../ui/test/ct-failure-stream-tests.html">
<link rel="import" href="../ui/test/ct-last-updated-tests.html">
<link rel="import" href="../ui/test/ct-party-time-tests.html">
<link rel="import" href="../ui/test/ct-results-by-builder-tests.html">
<link rel="import" href="../ui/test/ct-results-comparison-tests.html">
<link rel="import" href="../ui/test/ct-results-detail-tests.html">
<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="ct-party-time.html">
<script>
(function() {
module("ct-party-time");
asyncTest("partyTime", 1, function() {
var partyTime = document.createElement('ct-party-time');
var tree = 'blink';
partyTime.failures = { blink: [ ] };
partyTime.tree = tree;
requestAnimationFrame(function() {
equal(partyTime._partytime, true);
start();
});
});
asyncTest("noPartyTime", 1, function() {
var noPartyTime = document.createElement('ct-party-time');
var resultsByBuilder = {};
var failure1 = new CTFailure("step1", "reason1", resultsByBuilder, 123, 123);
var tree = 'blink';
noPartyTime.failures = { blink: [ failure1 ] };
noPartyTime.tree = tree;
requestAnimationFrame(function() {
equal(noPartyTime._partytime, false);
start();
});
});
})()
</script>
\ No newline at end of file
<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="ct-results-by-builder.html">
<script>
(function () {
var kExampleFailure = {
"testName": "inspector/console/console-viewport-selection.html",
"resultNodesByBuilder": {
"WebKit Mac10.6 (dbg)": {
"actual": "IMAGE",
},
"WebKit Linux (dbg)": {
"actual": "TEXT",
},
},
"oldestFailingRevision": 177164,
"newestPassingRevision": 177165,
};
module("ct-results-by-builder");
asyncTest("basic", 9, function() {
// FIXME: Remove this override when ct-results-detail is fixed to not use
// results.fetchResultsURLs.
var oldFetchResultsURLs = results.fetchResultsURLs;
results.fetchResultsURLs = function() { return Promise.resolve([]); };
var resultsByBuilder = document.createElement('ct-results-by-builder');
resultsByBuilder.failure = kExampleFailure;
requestAnimationFrame(function() {
var tabs = resultsByBuilder.shadowRoot.querySelectorAll('paper-tab');
equal(tabs.length, 2);
equal(tabs[0].textContent, 'WebKit Linux (dbg)');
equal(tabs[1].textContent, 'WebKit Mac10.6 (dbg)');
var detail = resultsByBuilder.shadowRoot.querySelectorAll('ct-results-detail');
equal(detail.length, 1);
equal(detail[0].failure.testName, 'inspector/console/console-viewport-selection.html');
equal(detail[0].builder, 'WebKit Linux (dbg)');
resultsByBuilder.shadowRoot.querySelector('paper-tabs').selected = 1;
requestAnimationFrame(function() {
results.fetchResultsURLs = oldFetchResultsURLs;
var detail = resultsByBuilder.shadowRoot.querySelectorAll('ct-results-detail');
equal(detail.length, 1);
equal(detail[0].failure.testName, 'inspector/console/console-viewport-selection.html');
equal(detail[0].builder, 'WebKit Mac10.6 (dbg)');
start();
});
});
});
})()
</script>
<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="ct-results-comparison.html">
<script>
(function () {
module("ct-results-comparison");
asyncTest("basic", 8, function() {
var comparison = document.createElement('ct-results-comparison');
comparison.type = results.kImageType;
var expected = "http://domain.com/dummy-expected";
var actual = "http://domain.com/dummy-actual";
var diff = "http://domain.com/dummy-diff";
comparison.expectedUrl = expected;
comparison.actualUrl = actual;
comparison.diffUrl = diff;
requestAnimationFrame(function() {
var outputs = comparison.shadowRoot.querySelectorAll('ct-test-output');
equal(outputs.length, 3);
// Verify we didn't typo any of the bindings.
equal(outputs[0].type, results.kImageType);
equal(outputs[0].url, expected);
equal(outputs[1].type, results.kImageType);
equal(outputs[1].url, actual);
equal(outputs[2].type, results.kImageType);
equal(outputs[2].url, diff);
equal(comparison.shadowRoot.querySelectorAll('ct-results-comparison-zoomer').length, 0);
start();
});
});
asyncTest('zoomer', 3, function() {
// FIXME: Create a MouseEventMock class to use here.
var mockMouseEvent = {
clientX: 0,
clientY: 0,
target: document.createElement('div'),
}
var imageComparison = document.createElement('ct-results-comparison');
imageComparison.type = results.kImageType;
var nonImageComparison = document.createElement('ct-results-comparison');
requestAnimationFrame(function() {
imageComparison._handleMouseMove(mockMouseEvent);
nonImageComparison._handleMouseMove(mockMouseEvent);
requestAnimationFrame(function() {
equal(imageComparison.shadowRoot.querySelectorAll('ct-results-comparison-zoomer').length, 1);
equal(nonImageComparison.shadowRoot.querySelectorAll('ct-results-comparison-zoomer').length, 0);
imageComparison.type = 'foo';
requestAnimationFrame(function() {
equal(imageComparison.shadowRoot.querySelectorAll('ct-results-comparison-zoomer').length, 0);
start();
});
});
});
});
})()
</script>
<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="ct-results-detail.html">
<link rel="import" href="../model/ct-failure.html">
<script>
(function () {
module("ct-results-detail");
asyncTest("image+text", 4, function() {
var simulator = new NetworkSimulator();
var probedUrls = [];
simulator.probe = function(url)
{
probedUrls.push(url);
if (url.endsWith('.txt') || url.endsWith('.png'))
return Promise.resolve();
else
return Promise.reject();
};
simulator.runTest(function() {
var comparisonResult = document.createElement('ct-results-detail');
comparisonResult.builder = 'dummy builder';
// FIXME: Use a proper mock model object.
comparisonResult.failure = new CTFailure(
"testName", "dummy/test.html",
{
"dummy builder": {
"actual": "IMAGE+TEXT",
},
}, 177164, 177165
);
comparisonResult.async(function() {
deepEqual(probedUrls, [
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-expected.png',
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-actual.png',
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-diff.png',
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-actual.txt',
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-expected.txt',
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-diff.txt',
]);
var comparisons = comparisonResult.shadowRoot.querySelectorAll('ct-results-comparison');
equal(comparisons.length, 2);
equal(comparisonResult.shadowRoot.querySelectorAll('ct-test-output').length, 0);
start();
});
});
});
asyncTest("crash", 4, function() {
var simulator = new NetworkSimulator();
var probedUrls = [];
simulator.probe = function(url)
{
probedUrls.push(url);
if (url.endsWith('.txt'))
return Promise.resolve();
else
return Promise.reject();
};
simulator.runTest(function() {
var crashResult = document.createElement('ct-results-detail');
crashResult.builder = 'dummy builder';
// FIXME: Use a proper mock model object.
crashResult.failure = {
"testName": "dummy/test.html",
"resultNodesByBuilder": {
"dummy builder": {
"actual": "CRASH",
},
},
"oldestFailingRevision": 177164,
"newestPassingRevision": 177165,
};
crashResult.async(function() {
deepEqual(probedUrls, [
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-crash-log.txt',
]);
var crashOutputs = crashResult.shadowRoot.querySelectorAll('ct-test-output');
equal(crashOutputs.length, 1);
equal(crashResult.shadowRoot.querySelectorAll('ct-results-comparison').length, 0);
start();
});
});
});
asyncTest("unknown", 3, function() {
var result = document.createElement('ct-results-detail');
result.builder = 'dummy builder';
var resultsByBuilder = {
"dummy builder": {
actual: "UNKNOWN",
lastFailingBuild: 124,
masterUrl: 'http://masterurl/'
},
};
result.failure = new CTFailure('foo_step', 'test.html', resultsByBuilder, 123, 124);
requestAnimationFrame(function() {
var outputs = result.shadowRoot.querySelectorAll('ct-test-output');
equal(outputs.length, 1);
equal(outputs[0].url, 'http://masterurl//builders/dummy%20builder/builds/124/steps/foo_step/logs/stdio');
equal(result.shadowRoot.querySelectorAll('ct-results-comparison').length, 0);
start();
});
});
asyncTest("unknown", 3, function() {
var result = document.createElement('ct-results-detail');
result.builder = 'dummy builder';
var resultsByBuilder = {
"dummy builder": {
actual: "FAIL",
lastFailingBuild: 124,
masterUrl: 'http://masterurl/'
},
};
result.failure = new CTFailure('foo_step', 'TestSuite.TestName', resultsByBuilder, 123, 124);
requestAnimationFrame(function() {
var outputs = result.shadowRoot.querySelectorAll('ct-test-output');
equal(outputs.length, 1);
equal(outputs[0].url, 'http://masterurl//builders/dummy%20builder/builds/124/steps/foo_step/logs/TestName');
equal(result.shadowRoot.querySelectorAll('ct-results-comparison').length, 0);
start();
});
});
})()
</script>
......@@ -6,6 +6,8 @@ found in the LICENSE file.
<link rel="import" href="ct-results-panel.html">
<link rel="import" href="../model/ct-failure.html">
<script>
(function () {
......
......@@ -6,6 +6,7 @@ found in the LICENSE file.
<link rel="import" href="ct-revision-details.html">
<link rel="import" href="../model/ct-builder-revisions-mock.html">
<link rel="import" href="../model/ct-commit-log-mock.html">
<script>
(function() {
......@@ -40,4 +41,4 @@ asyncTest("basic", 2, function() {
});
})()
</script>
\ No newline at end of file
</script>
......@@ -6,6 +6,8 @@ found in the LICENSE file.
<link rel="import" href="ct-test-list.html">
<link rel="import" href="../model/ct-failure.html">
<script>
(function () {
......
......@@ -29,7 +29,7 @@ asyncTest('basic', 5, function() {
closedTreeStatus.message = 'Tree is closed';
closedTree.status = closedTreeStatus;
var simulator = new NetworkSimulator();
var simulator = new NetworkSimulator(ok, start);
simulator.runTest(function() {
requestAnimationFrame(function() {
ok(!openTree.shadowRoot.textContent.has("open-tree-project"));
......
......@@ -7,6 +7,7 @@ found in the LICENSE file.
<link rel="import" href="../ct-builder-grid.html">
<link rel="import" href="../ct-builder.html">
<link rel="import" href="../../model/ct-failure.html">
<script>
(function () {
......
......@@ -12,57 +12,32 @@ found in the LICENSE file.
var assert = chai.assert;
describe('ct-embedded-flakiness-dashboard', function() {
var embeddedFlakinessDashboard;
describe('embedded flakiness dashboard UI', function() {
var oldUrlForEmbeddedFlakinessDashboard = ui.urlForEmbeddedFlakinessDashboard;
var testName;
var step;
var tree;
beforeEach(function(done) {
ui.urlForEmbeddedFlakinessDashboard = function(test, step, tree) { return "about:blank#" + test + step + tree; }
embeddedFlakinessDashboard = document.createElement('ct-embedded-flakiness-dashboard');
testName = "foo/bar.html";
step = "foo_tests";
tree = "blink";
embeddedFlakinessDashboard.test = {
testName: testName,
step: step,
};
embeddedFlakinessDashboard.tree = tree;
setTimeout(done);
});
afterEach(function() {
ui.urlForEmbeddedFlakinessDashboard = oldUrlForEmbeddedFlakinessDashboard;
});
it('should point the iframe to the dashboard', function() {
it('should point the iframe to the dashboard', function(done) {
var failure = new CTFailure('foo_tests', 'foo/bar.html');
var tree = "blink";
var embeddedFlakinessDashboard = document.createElement('ct-embedded-flakiness-dashboard');
embeddedFlakinessDashboard.test = failure;
embeddedFlakinessDashboard.tree = tree;
setTimeout(function() {
var iframe = embeddedFlakinessDashboard.shadowRoot.querySelector('#iframe');
assert.equal(iframe.src, ui.urlForEmbeddedFlakinessDashboard(testName, step, tree));
assert.equal(iframe.src, failure.embeddedFlakinessDashboardURL(tree));
done();
});
});
describe('heightChanged', function() {
beforeEach(function(done) {
embeddedFlakinessDashboard = document.createElement('ct-embedded-flakiness-dashboard');
setTimeout(done);
});
it('should respond to heightChanged', function(done) {
var embeddedFlakinessDashboard = document.createElement('ct-embedded-flakiness-dashboard');
it('should resize the iframe', function(done) {
var finishTest = function() {
window.removeEventListener('message', finishTest);
var iframe = embeddedFlakinessDashboard.shadowRoot.querySelector('#iframe');
assert.equal(iframe.style.height, '100px');
done();
};
var finishTest = function() {
window.removeEventListener('message', finishTest);
var iframe = embeddedFlakinessDashboard.shadowRoot.querySelector('#iframe');
assert.equal(iframe.style.height, '100px');
done();
};
window.addEventListener('message', finishTest);
window.postMessage({command: 'heightChanged', height: "100"}, '*');
});
window.addEventListener('message', finishTest);
window.postMessage({command: 'heightChanged', height: "100"}, '*');
});
});
......
<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="../ct-party-time.html">
<script>
(function () {
var assert = chai.assert;
describe('ct-party-time', function() {
var partyTime;
var blinkFailures;
beforeEach(function(done) {
partyTime = document.createElement('ct-party-time');
partyTime.failures = { blink: blinkFailures };
partyTime.tree = 'blink';
setTimeout(done);
});
describe('party time: party', function() {
before(function() {
blinkFailures = [];
});
it('should have a party', function() {
assert(partyTime._partytime);
});
});
describe('party time: no party', function() {
before(function() {
var resultsByBuilder = {};
blinkFailures = [new CTFailure("step1", "reason1", resultsByBuilder, 123, 123)];
});
it('should not have a party', function() {
assert(!partyTime._partytime);
});
});
});
})()
</script>
<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="../ct-results-by-builder.html">
<script>
(function () {
var assert = chai.assert;
var kExampleFailure = {
"testName": "inspector/console/console-viewport-selection.html",
"resultNodesByBuilder": {
"WebKit Mac10.6 (dbg)": {
"actual": "IMAGE",
},
"WebKit Linux (dbg)": {
"actual": "TEXT",
},
},
"oldestFailingRevision": 177164,
"newestPassingRevision": 177165,
};
describe('ct-results-by-builder', function() {
var resultsByBuilder;
var oldFetchResultsURLs;
beforeEach(function(done) {
// FIXME: Remove this override when ct-results-detail is fixed to not use
// results.fetchResultsURLs.
oldFetchResultsURLs = results.fetchResultsURLs;
results.fetchResultsURLs = function() { return Promise.resolve([]); };
resultsByBuilder = document.createElement('ct-results-by-builder');
resultsByBuilder.failure = kExampleFailure;
setTimeout(done);
});
afterEach(function() {
results.fetchResultsURLs = oldFetchResultsURLs;
});
describe('results UI', function() {
it('should show details in each tab', function(done) {
var tabs = resultsByBuilder.shadowRoot.querySelectorAll('paper-tab');
assert.lengthOf(tabs, 2);
assert.equal(tabs[0].textContent, 'WebKit Linux (dbg)');
assert.equal(tabs[1].textContent, 'WebKit Mac10.6 (dbg)');
var detail = resultsByBuilder.shadowRoot.querySelectorAll('ct-results-detail');
assert.lengthOf(detail, 1);
assert.equal(detail[0].failure.testName, 'inspector/console/console-viewport-selection.html');
assert.equal(detail[0].builder, 'WebKit Linux (dbg)');
resultsByBuilder.shadowRoot.querySelector('paper-tabs').selected = 1;
setTimeout(function() {
var detail = resultsByBuilder.shadowRoot.querySelectorAll('ct-results-detail');
assert.lengthOf(detail, 1);
assert.equal(detail[0].failure.testName, 'inspector/console/console-viewport-selection.html');
assert.equal(detail[0].builder, 'WebKit Mac10.6 (dbg)');
done();
});
});
});
});
})()
</script>
<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="../ct-results-comparison.html">
<script>
(function () {
var assert = chai.assert;
describe('ct-results-comparison', function() {
describe('results comparison UI', function() {
var comparison;
var expected, actual, diff;
before(function(done) {
comparison = document.createElement('ct-results-comparison');
comparison.type = results.kImageType;
expected = "http://domain.com/dummy-expected";
actual = "http://domain.com/dummy-actual";
diff = "http://domain.com/dummy-diff";
comparison.expectedUrl = expected;
comparison.actualUrl = actual;
comparison.diffUrl = diff;
setTimeout(done);
});
it('should show expected, actual and diff', function() {
var outputs = comparison.shadowRoot.querySelectorAll('ct-test-output');
assert.lengthOf(outputs, 3);
// Verify we didn't typo any of the bindings.
assert.equal(outputs[0].type, results.kImageType);
assert.equal(outputs[0].url, expected);
assert.equal(outputs[1].type, results.kImageType);
assert.equal(outputs[1].url, actual);
assert.equal(outputs[2].type, results.kImageType);
assert.equal(outputs[2].url, diff);
assert.lengthOf(comparison.shadowRoot.querySelectorAll('ct-results-comparison-zoomer'), 0);
});
});
describe('zoomer', function() {
// FIXME: Create a MouseEventMock class to use here.
var mockMouseEvent = {
clientX: 0,
clientY: 0,
target: document.createElement('div'),
};
var imageComparison;
var nonImageComparison;
before(function(done) {
imageComparison = document.createElement('ct-results-comparison');
imageComparison.type = results.kImageType;
nonImageComparison = document.createElement('ct-results-comparison');
setTimeout(done);
});
before(function(done) {
imageComparison._handleMouseMove(mockMouseEvent);
nonImageComparison._handleMouseMove(mockMouseEvent);
setTimeout(done);
});
it('should exist on images', function(done) {
assert.lengthOf(imageComparison.shadowRoot.querySelectorAll('ct-results-comparison-zoomer'), 1);
assert.lengthOf(nonImageComparison.shadowRoot.querySelectorAll('ct-results-comparison-zoomer'), 0);
imageComparison.type = 'foo';
setTimeout(done);
});
it('should not exist on other result types', function() {
assert.lengthOf(imageComparison.shadowRoot.querySelectorAll('ct-results-comparison-zoomer'), 0);
});
});
});
})()
</script>
<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="../ct-results-detail.html">
<link rel="import" href="../../lib/network-simulator.html">
<link rel="import" href="../../model/ct-failure.html">
<script>
(function () {
var assert = chai.assert;
describe('ct-results-detail', function() {
describe('webkit failures', function() {
var resultsDetail;
var probedUrls;
// Set to test different types.
var resultType = '';
var extensions = [];
beforeEach(function(done) {
var simulator = new NetworkSimulator(assert, done);
probedUrls = [];
simulator.probe = function(url) {
probedUrls.push(url);
for (var i = 0; i < extensions.length; i++) {
if (url.endsWith(extensions[i]))
return Promise.resolve();
}
return Promise.reject();
};
// FIXME: Use a proper mock model object.
var failure = new CTFailure(
"testName", "dummy/test.html",
{
"dummy builder": {
"actual": resultType,
},
}, 177164, 177165
);
simulator.runTest(function() {
resultsDetail = document.createElement('ct-results-detail');
resultsDetail.builder = 'dummy builder';
resultsDetail.failure = failure;
});
setTimeout(done);
});
describe('image+text', function() {
before(function() {
resultType = "IMAGE+TEXT";
extensions = ['.txt', '.png'];
});
it('should fetch the correct URLs', function() {
assert.deepEqual(probedUrls, [
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-expected.png',
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-actual.png',
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-diff.png',
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-actual.txt',
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-expected.txt',
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-diff.txt',
]);
assert.lengthOf(resultsDetail.shadowRoot.querySelectorAll('ct-results-comparison'), 2);
assert.lengthOf(resultsDetail.shadowRoot.querySelectorAll('ct-test-output'), 0);
});
});
describe('crash', function() {
before(function() {
resultType = "CRASH";
extensions = ['.txt'];
});
it('should fetch the correct URLs', function() {
assert.deepEqual(probedUrls, [
'https://storage.googleapis.com/chromium-layout-test-archives/dummy_builder/results/layout-test-results/dummy/test-crash-log.txt',
]);
assert.lengthOf(resultsDetail.shadowRoot.querySelectorAll('ct-test-output'), 1);
assert.lengthOf(resultsDetail.shadowRoot.querySelectorAll('ct-results-comparison'), 0);
});
});
});
describe('failures', function() {
var result;
var expectedUrl;
afterEach(function() {
var outputs = result.shadowRoot.querySelectorAll('ct-test-output');
assert.lengthOf(outputs, 1);
assert.equal(outputs[0].url, expectedUrl);
assert.lengthOf(result.shadowRoot.querySelectorAll('ct-results-comparison'), 0);
});
describe('unknown failures', function() {
it('should show the failure output', function(done) {
result = document.createElement('ct-results-detail');
result.builder = 'dummy builder';
var resultsByBuilder = {
"dummy builder": {
actual: "UNKNOWN",
lastFailingBuild: 124,
masterUrl: 'http://masterurl/'
},
};
result.failure = new CTFailure('foo_step', 'test.html', resultsByBuilder, 123, 124);
expectedUrl = 'http://masterurl//builders/dummy%20builder/builds/124/steps/foo_step/logs/stdio';
setTimeout(done);
});
});
describe('failures', function() {
it('should show the failure output', function(done) {
result = document.createElement('ct-results-detail');
result.builder = 'dummy builder';
var resultsByBuilder = {
"dummy builder": {
actual: "FAIL",
lastFailingBuild: 124,
masterUrl: 'http://masterurl/'
},
};
result.failure = new CTFailure('foo_step', 'TestSuite.TestName', resultsByBuilder, 123, 124);
expectedUrl = 'http://masterurl//builders/dummy%20builder/builds/124/steps/foo_step/logs/TestName';
setTimeout(done);
});
});
});
});
})()
</script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment