2 * Copyright (C) 2011 Google Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
30 var kExampleResultsJSON = {
33 "custom-scrollbar-with-incomplete-style.html": {
37 "flaky-scrollbar.html": {
41 "unexpected-pass.html": {
47 "user-script-video-document.html": {
51 "another-test.html": {
58 "num_regressions": 14,
60 "layout_tests_dir": "\/mnt\/data\/b\/build\/slave\/Webkit_Linux\/build\/src\/third_party\/WebKit\/LayoutTests",
63 "has_pretty_patch": false,
66 "uses_expectations_file": true,
71 test("unexpectedFailures", 1, function() {
72 var unexpectedFailures = results.unexpectedFailures(kExampleResultsJSON);
73 deepEqual(unexpectedFailures, {
74 "userscripts/another-test.html": {
81 test("unexpectedFailuresByTest", 1, function() {
82 var unexpectedFailuresByTest = results.unexpectedFailuresByTest({
83 "Mock Builder": kExampleResultsJSON
85 deepEqual(unexpectedFailuresByTest, {
86 "userscripts/another-test.html": {
95 test("unexpectedSuccessesByTest", 1, function() {
96 var unexpectedFailuresByTest = results.unexpectedSuccessesByTest({
97 "Mock Builder": kExampleResultsJSON
99 deepEqual(unexpectedFailuresByTest, {
100 "scrollbars/unexpected-pass.html": {
109 test("failureInfoForTestAndBuilder", 1, function() {
110 var unexpectedFailuresByTest = results.unexpectedFailuresByTest({
111 "Mock Builder": kExampleResultsJSON
113 var failureInfo = results.failureInfoForTestAndBuilder(unexpectedFailuresByTest, "userscripts/another-test.html", "Mock Builder");
114 deepEqual(failureInfo, {
115 "testName": "userscripts/another-test.html",
116 "builderName": "Mock Builder",
117 "failureTypeList": ["TEXT"],
121 test("resultKind", 12, function() {
122 equals(results.resultKind("http://example.com/foo-actual.txt"), "actual");
123 equals(results.resultKind("http://example.com/foo-expected.txt"), "expected");
124 equals(results.resultKind("http://example.com/foo-diff.txt"), "diff");
125 equals(results.resultKind("http://example.com/foo.bar-actual.txt"), "actual");
126 equals(results.resultKind("http://example.com/foo.bar-expected.txt"), "expected");
127 equals(results.resultKind("http://example.com/foo.bar-diff.txt"), "diff");
128 equals(results.resultKind("http://example.com/foo-actual.png"), "actual");
129 equals(results.resultKind("http://example.com/foo-expected.png"), "expected");
130 equals(results.resultKind("http://example.com/foo-diff.png"), "diff");
131 equals(results.resultKind("http://example.com/foo-pretty-diff.html"), "diff");
132 equals(results.resultKind("http://example.com/foo-wdiff.html"), "diff");
133 equals(results.resultKind("http://example.com/foo-xyz.html"), "unknown");
136 test("resultType", 12, function() {
137 equals(results.resultType("http://example.com/foo-actual.txt"), "text");
138 equals(results.resultType("http://example.com/foo-expected.txt"), "text");
139 equals(results.resultType("http://example.com/foo-diff.txt"), "text");
140 equals(results.resultType("http://example.com/foo.bar-actual.txt"), "text");
141 equals(results.resultType("http://example.com/foo.bar-expected.txt"), "text");
142 equals(results.resultType("http://example.com/foo.bar-diff.txt"), "text");
143 equals(results.resultType("http://example.com/foo-actual.png"), "image");
144 equals(results.resultType("http://example.com/foo-expected.png"), "image");
145 equals(results.resultType("http://example.com/foo-diff.png"), "image");
146 equals(results.resultType("http://example.com/foo-pretty-diff.html"), "text");
147 equals(results.resultType("http://example.com/foo-wdiff.html"), "text");
148 equals(results.resultType("http://example.com/foo.xyz"), "text");
151 test("resultNodeForTest", 4, function() {
152 deepEqual(results.resultNodeForTest(kExampleResultsJSON, "userscripts/another-test.html"), {
156 equals(results.resultNodeForTest(kExampleResultsJSON, "foo.html"), null);
157 equals(results.resultNodeForTest(kExampleResultsJSON, "userscripts/foo.html"), null);
158 equals(results.resultNodeForTest(kExampleResultsJSON, "userscripts/foo/bar.html"), null);
161 test("walkHistory", 6, function() {
162 var simulator = new NetworkSimulator();
165 "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGLncUAw": {
168 "another-test.html": {
176 "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGNfTUAw":{
179 "user-script-video-document.html": {
183 "another-test.html": {
191 "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGJWCUQw":{
194 "another-test.html": {
202 "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGKbLUAw":{
205 "user-script-video-document.html": {
216 "another-test.html": {
231 simulator.jsonp = function(url, callback) {
232 simulator.scheduleCallback(function() {
233 if (/dir=1/.test(url)) {
234 if (/builder=Mock/.test(url)) {
236 { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGLncUAw" },
237 { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGNfTUAw" },
238 { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGJWCUQw" },
239 { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGKbLUAw" },
240 { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGOj5UAw" },
241 { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGP-AUQw" },
242 { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGPL3UAw" },
243 { "key": "agx0ZXN0LXJlc3VsdHNyEAsSCFRlc3RGaWxlGNHJQAw" },
245 } else if (/builder=Another/.test(url)) {
251 ok(false, 'Unexpected URL: ' + url);
254 var key = url.match(/key=([^&]+)/)[1];
255 callback(keyMap[key]);
259 simulator.runTest(function() {
260 results.regressionRangeForFailure("Mock Builder", "userscripts/another-test.html", function(oldestFailingRevision, newestPassingRevision) {
261 equals(oldestFailingRevision, 90426);
262 equals(newestPassingRevision, 90424);
265 results.unifyRegressionRanges(["Mock Builder", "Another Builder"], "userscripts/another-test.html", function(oldestFailingRevision, newestPassingRevision) {
266 equals(oldestFailingRevision, 90426);
267 equals(newestPassingRevision, 90425);
270 results.countFailureOccurances(["Mock Builder", "Another Builder"], "userscripts/another-test.html", function(failureCount) {
271 equals(failureCount, 4);
276 test("walkHistory (no revision)", 3, function() {
277 var simulator = new NetworkSimulator();
280 "vsfdsfdsafsdafasd": {
283 "another-test.html": {
291 "gavsavsrfgwaevwefawvae":{
298 simulator.jsonp = function(url, callback) {
299 simulator.scheduleCallback(function() {
300 if (/dir=1/.test(url)) {
302 { "key": "vsfdsfdsafsdafasd" },
303 { "key": "gavsavsrfgwaevwefawvae" },
306 var key = url.match(/key=([^&]+)/)[1];
307 callback(keyMap[key]);
312 simulator.runTest(function() {
313 results.regressionRangeForFailure("Mock Builder", "userscripts/another-test.html", function(oldestFailingRevision, newestPassingRevision) {
314 equals(oldestFailingRevision, 0);
315 equals(newestPassingRevision, 0);
320 test("collectUnexpectedResults", 1, function() {
321 var dictionaryOfResultNodes = {
328 "actual": "PASS TEXT"
344 var collectedResults = results.collectUnexpectedResults(dictionaryOfResultNodes);
345 deepEqual(collectedResults, ["TEXT", "IMAGE"]);
348 test("failureTypeToExtensionList", 5, function() {
349 deepEqual(results.failureTypeToExtensionList('TEXT'), ['txt']);
350 deepEqual(results.failureTypeToExtensionList('IMAGE+TEXT'), ['txt', 'png']);
351 deepEqual(results.failureTypeToExtensionList('IMAGE'), ['png']);
352 deepEqual(results.failureTypeToExtensionList('CRASH'), []);
353 deepEqual(results.failureTypeToExtensionList('TIMEOUT'), []);
356 test("canRebaseline", 6, function() {
357 ok(results.canRebaseline(['TEXT']));
358 ok(results.canRebaseline(['IMAGE+TEXT', 'CRASH']));
359 ok(results.canRebaseline(['IMAGE']));
360 ok(!results.canRebaseline(['CRASH']));
361 ok(!results.canRebaseline(['TIMEOUT']));
362 ok(!results.canRebaseline([]));
365 test("fetchResultsURLs", 5, function() {
366 var simulator = new NetworkSimulator();
369 simulator.probe = function(url, options)
371 simulator.scheduleCallback(function() {
372 probedURLs.push(url);
373 if (base.endsWith(url, '.txt'))
374 options.success.call();
375 else if (/taco.+png$/.test(url))
376 options.success.call();
378 options.error.call();
382 simulator.runTest(function() {
383 results.fetchResultsURLs({
384 'builderName': "Mock Builder",
385 'testName': "userscripts/another-test.html",
386 'failureTypeList': ['IMAGE', 'CRASH'],
387 }, function(resultURLs) {
388 deepEqual(resultURLs, [
389 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-crash-log.txt"
392 results.fetchResultsURLs({
393 'builderName': "Mock Builder",
394 'testName': "userscripts/another-test.html",
395 'failureTypeList': ['TIMEOUT'],
396 }, function(resultURLs) {
397 deepEqual(resultURLs, []);
399 results.fetchResultsURLs({
400 'builderName': "Mock Builder",
401 'testName': "userscripts/taco.html",
402 'failureTypeList': ['IMAGE', 'IMAGE+TEXT'],
403 }, function(resultURLs) {
404 deepEqual(resultURLs, [
405 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-expected.png",
406 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-actual.png",
407 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-diff.png",
408 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-expected.txt",
409 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-actual.txt",
410 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-diff.txt",
415 deepEqual(probedURLs, [
416 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-expected.png",
417 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-actual.png",
418 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-diff.png",
419 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-crash-log.txt",
420 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-expected.png",
421 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-actual.png",
422 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-diff.png",
423 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-actual.txt",
424 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-expected.txt",
425 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/taco-diff.txt",