| Index: bower_components/web-animations-js/test/test-runner.html
|
| diff --git a/bower_components/web-animations-js/test/test-runner.html b/bower_components/web-animations-js/test/test-runner.html
|
| deleted file mode 100755
|
| index 5b9d2f91291b19302df7a69e692163a48df4ee2c..0000000000000000000000000000000000000000
|
| --- a/bower_components/web-animations-js/test/test-runner.html
|
| +++ /dev/null
|
| @@ -1,810 +0,0 @@
|
| -<!--
|
| -Copyright 2012 Google Inc. All Rights Reserved.
|
| -
|
| -Licensed under the Apache License, Version 2.0 (the "License");
|
| -you may not use this file except in compliance with the License.
|
| -You may obtain a copy of the License at
|
| -
|
| - http://www.apache.org/licenses/LICENSE-2.0
|
| -
|
| -Unless required by applicable law or agreed to in writing, software
|
| -distributed under the License is distributed on an "AS IS" BASIS,
|
| -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -See the License for the specific language governing permissions and
|
| -limitations under the License.
|
| --->
|
| -<!DOCTYPE html>
|
| -<meta charset="UTF-8">
|
| -
|
| -<style>
|
| -
|
| -#status-box {
|
| - position: fixed;
|
| - bottom: 0;
|
| - right: 0;
|
| - background: white;
|
| - border: 1px solid black;
|
| - padding-right: 5px;
|
| -}
|
| -
|
| -h1 {
|
| - display: inline;
|
| -}
|
| -
|
| -table {
|
| - border-collapse: collapse;
|
| -}
|
| -
|
| -td {
|
| - border: 1px solid black;
|
| -}
|
| -
|
| -iframe {
|
| - width: 800px;
|
| - height: 600px;
|
| -}
|
| -
|
| -tbody {
|
| - color: gray;
|
| -}
|
| -
|
| -td.log ul li {
|
| - white-space: pre;
|
| - font-family: monospace;
|
| -}
|
| -
|
| -/* Fail styles */
|
| -tbody.fail {
|
| - color: red;
|
| -}
|
| -
|
| -li.fail {
|
| - color: red;
|
| -}
|
| -
|
| -tbody.timeout {
|
| - color: yellow;
|
| -}
|
| -
|
| -li.timeout {
|
| - color: yellow;
|
| -}
|
| -
|
| -
|
| -/* Pass styles */
|
| -tbody.pass {
|
| - color: green;
|
| -}
|
| -
|
| -li.pass {
|
| - color: green;
|
| -}
|
| -
|
| -tbody.pass-expected-failure {
|
| - color: #00aa00;
|
| -}
|
| -
|
| -li.pass-expected-failure {
|
| - color: #00aa00;
|
| -}
|
| -
|
| -tbody.skipped {
|
| - color: #00aa00;
|
| -}
|
| -
|
| -li.skipped {
|
| - color: #00aa00;
|
| -}
|
| -
|
| -/* No-test styles */
|
| -tbody.no-tests {
|
| - color: #ff8a00;
|
| -}
|
| -
|
| -</style>
|
| -<script src="browserdetect/bowser.js"></script>
|
| -<script src="testcases.js"></script>
|
| -
|
| -<div id=status-box>
|
| -<h1 id=status>Pending</h1>
|
| -Tests: <span id=tests></span>
|
| -Loading: <span id=loading></span> (<span id=loaded></span>)
|
| -Running: <span id=running></span> (<span id=finished></span>)
|
| -Posting: <span id=posting></span> (<span id=posted></span>)
|
| -</div>
|
| -
|
| -<table id="results"></table>
|
| -<div id="spacer"></div>
|
| -
|
| -<script>
|
| -'use strict';
|
| -window.onerror = function(msg, url, line) {
|
| - // Ignore errors caused by webdriver
|
| - if (msg.match(/webdriver/))
|
| - return;
|
| -
|
| - if (document.getElementById('javascript-errors') == null) {
|
| - document.body.innerHTML = '<pre id="javascript-errors">JAVASCRIPT ERRORS\n\n</pre>';
|
| - }
|
| -
|
| - var e = document.getElementById('javascript-errors');
|
| - var msg = 'Javascript Error in ' + url + '\n' +
|
| - 'Line ' + line + ': ' + msg + '\n';
|
| - e.innerHTML += msg;
|
| -};
|
| -</script>
|
| -
|
| -<script>
|
| -'use strict';
|
| -
|
| -(function() {
|
| -window.finished = false;
|
| -window.getTestRunnerProgress = function() {
|
| - return {
|
| - completed: testStates['POSTED'].length,
|
| - total: tests.length,
|
| - };
|
| -}
|
| -
|
| -var results = [];
|
| -
|
| -if (/coverage/.test(window.location.hash)) {
|
| - // Trigger coverage runs for child tests.
|
| - window.__coverage__ = {};
|
| - // Share resources loaded by child tests to avoid instrumenting the same
|
| - // source file multiple times.
|
| - window.__resources__ = {original: {}};
|
| -}
|
| -
|
| -window.addEventListener('load', function() {
|
| - document.querySelector('#spacer').style.height =
|
| - getComputedStyle(document.querySelector('body')).height;
|
| -});
|
| -function trueOffsetTop(element) {
|
| - var t = 0;
|
| - if (element.offsetParent) {
|
| - do {
|
| - t += element.offsetTop;
|
| - } while (element = element.offsetParent);
|
| - return t;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Get a value for busting the cache.
|
| - */
|
| -var cacheBuster = '' + window.Date.now();
|
| -
|
| -/**
|
| - * Get the most accurate version of time possible.
|
| - *
|
| - * @return {number} Time as this very moment.
|
| - */
|
| -function now() {
|
| - try {
|
| - return window.performance.now();
|
| - } catch (e) {
|
| - return Date.now();
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Creates HTML elements in a table for a test.
|
| - *
|
| - * +-----------+------+-------+
|
| - * | Test Name | Link | Count |
|
| - * +-----------+------+-------+
|
| - * | Log of test run. |
|
| - * +--------------------------+
|
| - * | iFrame containing test |
|
| - * +--------------------------+
|
| - *
|
| - * @param {String} testName Name of the test suite being run.
|
| - * @param {String} testURL The url of the test suite.
|
| - * @return {Element} tbody containing newly created table rows.
|
| - */
|
| -function createTestRows(testName, testURL) {
|
| - var tableGroup = document.createElement('tbody');
|
| - tableGroup.id = testName.replace('.', '-');
|
| -
|
| - var basicInfoRow = document.createElement('tr');
|
| - basicInfoRow.className = 'info-row';
|
| - tableGroup.appendChild(basicInfoRow);
|
| - var iframeRow = document.createElement('tr');
|
| - tableGroup.appendChild(iframeRow);
|
| - var logRow = document.createElement('tr');
|
| - tableGroup.appendChild(logRow);
|
| -
|
| - // Name
|
| - var header = document.createElement('h1');
|
| - header.textContent = testName;
|
| -
|
| - var headerCell = document.createElement('td');
|
| - headerCell.appendChild(header);
|
| - basicInfoRow.appendChild(headerCell);
|
| -
|
| - // Link
|
| - var link = document.createElement('a');
|
| - link.textContent = testName;
|
| - link.href = testURL;
|
| -
|
| - var linkCell = document.createElement('td');
|
| - linkCell.appendChild(link);
|
| - basicInfoRow.appendChild(linkCell);
|
| -
|
| - // Test count
|
| - var countCell = document.createElement('td');
|
| - countCell.className = 'count';
|
| - basicInfoRow.appendChild(countCell);
|
| -
|
| - // Timing info
|
| - var timingCell = document.createElement('td');
|
| - timingCell.className = 'timing';
|
| - basicInfoRow.appendChild(timingCell);
|
| -
|
| - // iframe containing a preview of object
|
| - var iframe = document.createElement('iframe');
|
| - iframe.src = testURL + '?' + cacheBuster + '#message';
|
| -
|
| - var iframeCell = document.createElement('td');
|
| - iframeCell.colSpan = '4';
|
| - iframeCell.appendChild(iframe);
|
| - iframeRow.appendChild(iframeCell);
|
| -
|
| - // table row containing the complete test log
|
| - var logCell = document.createElement('td');
|
| - logCell.className = 'log';
|
| - logCell.colSpan = '4';
|
| - logRow.appendChild(logCell);
|
| -
|
| - /**
|
| - * Normally we would use "display: none;" but that causes Firefox to return
|
| - * null for getComputedStyle, so instead we have to use this visibility hack.
|
| - */
|
| - tableGroup.showInfo = function() {
|
| - logRow.style.visibility = 'visible';
|
| - logRow.style.position = '';
|
| - logRow.style.height = 'auto';
|
| -
|
| - iframeRow.style.visibility = 'visible';
|
| - iframeRow.style.position = '';
|
| - iframeRow.style.height = 'auto';
|
| - };
|
| - tableGroup.hideInfo = function() {
|
| - logRow.style.visibility = 'hidden';
|
| - logRow.style.position = 'absolute';
|
| - logRow.style.height = '0';
|
| -
|
| - iframeRow.style.visibility = 'hidden';
|
| - iframeRow.style.position = 'absolute';
|
| - iframeRow.style.height = '0';
|
| - };
|
| - tableGroup.toggleInfo = function() {
|
| - if (logRow.style.visibility == 'hidden') {
|
| - tableGroup.showInfo();
|
| - } else {
|
| - tableGroup.hideInfo();
|
| - }
|
| - };
|
| - basicInfoRow.onclick = tableGroup.toggleInfo;
|
| -
|
| - tableGroup.hideInfo();
|
| -
|
| - return tableGroup;
|
| -}
|
| -
|
| -/* @type {?number} */ var runTestsId = null;
|
| -
|
| -/**
|
| - * Checks all the tests are in the loaded state and then kicks of running
|
| - * the tests.
|
| - */
|
| -function runTestsIfLoaded() {
|
| - if (testStates['LOADING'].length > 0)
|
| - return;
|
| -
|
| - if (runTestsId == null) {
|
| - runTestsId = window.setInterval(runTests, 10);
|
| - }
|
| -}
|
| -
|
| -function generateCoverageReport() {
|
| - // TODO: generate a pretty report, prompt to save the JSON, post it somewhere
|
| - for (var file in window.__coverage__) {
|
| - var results = window.__coverage__[file];
|
| - var hits = 0;
|
| - var statements = 0;
|
| - for (var stmt in results.s) {
|
| - statements++;
|
| - if (results.s[stmt] > 0) {
|
| - hits++;
|
| - }
|
| - }
|
| - var percent = (100 * hits / statements).toFixed(2);
|
| - console.log(file + ' statement coverage ' +
|
| - percent + '% (' + hits + '/' + statements + ')');
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * This object tracks which state a test is in. An individual test should only
|
| - * ever be in one of the lists. You use the changeTestState() function to move
|
| - * from one state to another.
|
| - *
|
| - * Tests start off in the loading state and move downwards until ending up in
|
| - * the finished state.
|
| - */
|
| -var testStates = {};
|
| -testStates['LOADING'] = []; /* Test which is being loaded. */
|
| -testStates['LOADED'] = []; /* Test which have yet to start. */
|
| -testStates['RUNNING'] = []; /* Test that is currently running. */
|
| -testStates['FINISHED'] = []; /* Test that are finished. */
|
| -testStates['POSTING'] = []; /* Test that is currently posting results to server. */
|
| -testStates['POSTED'] = []; /* Test which have completed and sent their
|
| - results to the server. */
|
| -
|
| -/**
|
| - * Track if we should skip the POSTING state, occurs if posting returns an error.
|
| - */
|
| -/* @type {Boolean} */ var skipPosting = false;
|
| -
|
| -/**
|
| - * Changes the state of the given test to the given state.
|
| - * This function doesn't check that the state transition actually make sense.
|
| - *
|
| - * @param {Element} test DOM object representing the test. The id will contain
|
| - * the test name.
|
| - * @param {States} The new state to transition too.
|
| - */
|
| -function changeTestState(test, newState) {
|
| - var i = null;
|
| -
|
| - if (newState == 'POSTING' && skipPosting) {
|
| - newState = 'POSTED';
|
| - }
|
| -
|
| - var oldState = test.state;
|
| -
|
| - // If we have already posted, we should never leave...
|
| - if (oldState == 'POSTED') {
|
| - throw 'Unexpected state change! Trying to leave POSTED state to ' + newState;
|
| - return;
|
| - }
|
| -
|
| - if (typeof oldState != 'undefined') {
|
| - var i = testStates[oldState].indexOf(test);
|
| - testStates[oldState].splice(i, 1);
|
| - }
|
| -
|
| - test.state = newState;
|
| - testStates[test.state].unshift(test);
|
| -
|
| - function testSort(a, b) {
|
| - return a.id.localeCompare(b.id);
|
| - }
|
| - testStates[test.state].sort(testSort);
|
| -
|
| - switch(newState) {
|
| - case 'LOADING':
|
| - runTestsIfLoaded();
|
| - break;
|
| -
|
| - case 'LOADED':
|
| - if (oldState != 'LOADING') {
|
| - throw 'Unexpected state change! ' + oldState + ' changing to LOADED';
|
| - }
|
| - break;
|
| -
|
| - case 'RUNNING':
|
| - if (oldState != 'LOADED') {
|
| - throw 'Unexpected state change! ' + oldState + ' changing to RUNNING';
|
| - }
|
| -
|
| - test.start = now();
|
| - var testWindow = test.querySelector('iframe').contentWindow;
|
| - var msg = {type: 'start', url: testWindow.location.href + ''};
|
| - testWindow.postMessage(msg, '*');
|
| - break;
|
| -
|
| - case 'FINISHED':
|
| - // If a test doesn't use any timing stuff it could come from the LOADING or
|
| - // LOADED state into the FINISHED state bypassing the RUNNING state.
|
| - if (oldState != 'LOADING' && oldState != 'LOADED' && oldState != 'RUNNING') {
|
| - throw 'Unexpected state change! ' + oldState + ' changing to FINISHED';
|
| - }
|
| -
|
| - var timingInfo = test.querySelector('.timing');
|
| - if (test.start) {
|
| - test.finished = now();
|
| - timingInfo.textContent = (test.finished - test.start).toFixed(2) + 'ms';
|
| - } else {
|
| - timingInfo.textContent = '(Load only)';
|
| - }
|
| -
|
| - var test_iframe = test.querySelector('iframe');
|
| - processResults(test, expectedFailuresForBrowser(test_iframe.contentWindow.expected_failures));
|
| -
|
| - break;
|
| -
|
| - case 'POSTING':
|
| - if (oldState != 'FINISHED') {
|
| - throw 'Unexpected state change! ' + oldState + ' changing to POSTING';
|
| - }
|
| -
|
| - if (test.className == 'fail') {
|
| - // Open up the window of the failed result
|
| - test.showInfo();
|
| - // Scroll to it.
|
| - window.scroll(0, trueOffsetTop(test));
|
| - }
|
| -
|
| - // Open the status window for taking of screenshots
|
| - var data = new FormData();
|
| - data.append('data', JSON.stringify(test.results_processed));
|
| -
|
| - var xhr = new XMLHttpRequest();
|
| - xhr.onload = function (e) {
|
| - if (e.target.status >= 400) {
|
| - skipPosting = true;
|
| - }
|
| - // Move from running to finished state
|
| - changeTestState(this, 'POSTED');
|
| - }.bind(test);
|
| - xhr.open('POST', 'test-results-post.html', true);
|
| - xhr.send(data);
|
| -
|
| - break;
|
| -
|
| - case 'POSTED':
|
| - // If we are skipping POSTING, tests can transition straight from FINISHED
|
| - // state into the POSTED state.
|
| - if (oldState != 'POSTING' && (!skipPosting || oldState != 'FINISHED')) {
|
| - throw 'Unexpected state change! ' + oldState + ' changing to POSTED';
|
| - }
|
| - break;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Elements for reporting the overall status.
|
| - */
|
| -/* @type {Element} */ var statusElement = document.querySelector('#status');
|
| -
|
| -/* @type {Element} */ var testElement = document.querySelector('#tests');
|
| -
|
| -/* @type {Element} */ var loadingElement = document.querySelector('#loading');
|
| -/* @type {Element} */ var loadedElement = document.querySelector('#loaded');
|
| -
|
| -/* @type {Element} */ var runningElement = document.querySelector('#running');
|
| -/* @type {Element} */ var finishedElement = document.querySelector('#finished');
|
| -
|
| -/* @type {Element} */ var postingElement = document.querySelector('#posting');
|
| -/* @type {Element} */ var postedElement = document.querySelector('#posted');
|
| -
|
| -/**
|
| - * Update the status dialog with information about the current status.
|
| - */
|
| -function updateStatus() {
|
| - testElement.textContent = tests.length;
|
| -
|
| - loadingElement.textContent = testStates['LOADING'].length;
|
| - loadedElement.textContent = testStates['LOADED'].length;
|
| -
|
| - runningElement.textContent = testStates['RUNNING'].length;
|
| - finishedElement.textContent = testStates['FINISHED'].length;
|
| -
|
| - postingElement.textContent = testStates['POSTING'].length;
|
| - postedElement.textContent = testStates['POSTED'].length;
|
| -
|
| - if (testStates['LOADED'].length > 0) {
|
| - statusElement.textContent = 'Loading';
|
| - } else if (testStates['RUNNING'].length > 0) {
|
| - statusElement.textContent = 'Running';
|
| - } else if (testStates['POSTING'].length > 0) {
|
| - statusElement.textContent = 'Posting results';
|
| - } else if (testStates['POSTED'].length == tests.length) {
|
| - statusElement.textContent = 'Finished';
|
| -
|
| - window.clearInterval(updateStatusId);
|
| - window.clearInterval(runTestsId);
|
| - window.finished = true;
|
| - if (window.__coverage__) {
|
| - generateCoverageReport();
|
| - }
|
| - }
|
| -}
|
| -
|
| -/* @type {?number} */ var updateStatusId = setInterval(updateStatus, 100);
|
| -
|
| -
|
| -var testRunners = [];
|
| -
|
| -/**
|
| - * Create the iframes for each test.
|
| - */
|
| -window.onload = function createTestRunners() {
|
| - // Filter the tests
|
| - var filter = window.location.href.split('?')[1];
|
| - if (filter) {
|
| - filter = new RegExp(filter);
|
| - tests = tests.filter(function(v) {
|
| - return filter.exec(v);
|
| - });
|
| - }
|
| -
|
| - function testSort(a, b) {
|
| - a = a.replace('.', '-');
|
| - b = b.replace('.', '-');
|
| - return a.localeCompare(b);
|
| - }
|
| - tests.sort(testSort);
|
| -
|
| - for (var i = 0; i < tests.length; i++) {
|
| - var testName = tests[i];
|
| - var testURL = 'testcases/' + testName;
|
| -
|
| - var test = createTestRows(testName, testURL);
|
| - testRunners.unshift(test);
|
| -
|
| - changeTestState(test, 'LOADING');
|
| -
|
| - document.querySelector('#results').appendChild(test);
|
| - test.querySelector('iframe').contentWindow.onload = function() {
|
| - // You can get multiple onload events, only deal with the first one.
|
| - if (this.state == 'LOADING') {
|
| - changeTestState(this, 'LOADED');
|
| - runTestsIfLoaded();
|
| - }
|
| - }.bind(test);
|
| - }
|
| -
|
| -};
|
| -
|
| -/**
|
| - * Start as many loaded tests as possible, wait for results and then post
|
| - * them.
|
| - */
|
| -function runTests() {
|
| - // Start a test running
|
| - if (testStates['LOADED'].length > 0 &&
|
| - testStates['RUNNING'].length < 1) {
|
| - changeTestState(testStates['LOADED'][0], 'RUNNING');
|
| - }
|
| -
|
| - // Start a test posting
|
| - if (testStates['FINISHED'].length > 0 &&
|
| - testStates['POSTING'].length < 1) {
|
| - changeTestState(testStates['FINISHED'][0], 'POSTING');
|
| - }
|
| -
|
| - // Deal with tests which are taking too long...
|
| - for (var i in testStates['RUNNING']) {
|
| - var test = testStates['RUNNING'][i];
|
| - if (now() - test.start > 300e3) {
|
| - // Only way to stop all the javascript and anything else running in the
|
| - // test is to clear the document.
|
| - var test_iframe = test.querySelector('iframe');
|
| - test_iframe.src = "data:text/html;charset=utf-8,<!DOCTYPE html><html><body>TIMEOUT</body></html>";
|
| -
|
| - test.results_raw = [];
|
| - changeTestState(test, 'FINISHED');
|
| - }
|
| - }
|
| -}
|
| -
|
| -/* @type {Object.<string, Object>} */ var testResults = {};
|
| -/**
|
| - * Callback that occurs when the test has finished running.
|
| - */
|
| -window.addEventListener(
|
| - 'message',
|
| - function(evt) {
|
| - // If the test timed out, this will fail with a cross-origin error.
|
| - try {
|
| - var testname = evt.source.location.pathname.split('/').pop().replace('.', '-');
|
| - } catch (e) {
|
| - return;
|
| - }
|
| -
|
| - var test = document.getElementById(testname);
|
| -
|
| - // We only respond to complete as postMessage doesn't guarantee order so
|
| - // result messages can come in after the complete message.
|
| - if (evt.data['type'] != 'complete')
|
| - return;
|
| -
|
| - // Try changing to state FINISHED, but this message may be after the a
|
| - // timeout or transition.
|
| - try {
|
| - test.results_raw = evt.data['tests'];
|
| - changeTestState(test, 'FINISHED');
|
| - } catch (e) {
|
| - console.warn(e);
|
| - }
|
| - },
|
| - false);
|
| -
|
| -
|
| -/**
|
| - * Filters expected test failures for ones that match the current browser
|
| - * configuration.
|
| - *
|
| - * @param {Array.<Object>} Test failure expectations for all browser
|
| - * configurations.
|
| - * @return {Object.<string, string>} Mapping from test regex to failure reason
|
| - * for current browser.
|
| - */
|
| -function expectedFailuresForBrowser(expected_failures) {
|
| - var browser_expected_failures = {};
|
| - if (typeof expected_failures === 'object') {
|
| - expected_failures.forEach(function(expected_failure) {
|
| - if (expected_failure.browser_configurations.some(
|
| - browserConfigurationMatches)) {
|
| - expected_failure.tests.forEach(function(test) {
|
| - browser_expected_failures[test] = expected_failure.message;
|
| - });
|
| - }
|
| - });
|
| - }
|
| - return browser_expected_failures;
|
| -}
|
| -
|
| -/**
|
| - * Returns whether the browser configuration pattern matches the browser
|
| - * configuration reported by bowser.js.
|
| - * Example:
|
| - * { name: 'Chrome', version: '28|29' }
|
| - * matches browser configuration:
|
| - * { name: 'Chrome', webkit: true, chrome: true, version: '28.0' }
|
| - *
|
| - * @param {Object} Key - RegExp value pairs to check against.
|
| - * @return {bool}
|
| - */
|
| -function browserConfigurationMatches(browser_configuration) {
|
| - for (var browser_feature in browser_configuration) {
|
| - var valueRegex = new RegExp(browser_configuration[browser_feature]);
|
| - if (!valueRegex.test(bowser[browser_feature])) {
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -/**
|
| - * Processes the test's results and put the information into the test object.
|
| - *
|
| - * @param {Element} test DOM object representing the test.
|
| - * @param {Array.<Object>} results List of testharness.js result objects.
|
| - */
|
| -function processResults(test, browser_expected_failures) {
|
| - var counts = {
|
| - passed: 0,
|
| - failed: 0,
|
| - skipped: 0,
|
| - expected_failed: 0, // This count is included in the above
|
| - total: test.results_raw.length
|
| - };
|
| - var results = [];
|
| - var newResultsDiv = document.createElement('ul');
|
| -
|
| - for(var i = 0; i < test.results_raw.length; i++) {
|
| - var result = test.results_raw[i];
|
| - results[i] = result;
|
| -
|
| - // Invert expected_failures
|
| - var expected_failure = null;
|
| - for(var tname in browser_expected_failures) {
|
| - var tomatch = tname;
|
| - if (tname.charAt(0) == '/' && tname.charAt(tname.length-1) == '/') {
|
| - tomatch = new RegExp(tname.substr(1, tname.length-2));
|
| - }
|
| - if (result['name'].match(tomatch)) {
|
| - expected_failure = browser_expected_failures[tname];
|
| - }
|
| - }
|
| - if (expected_failure !== null && result.status != result.NOTRUN) {
|
| - if (result.status != result.FAIL) {
|
| - result.message = "Expected failure (" + expected_failure + "), actually " +
|
| - {0: 'PASS', 2: 'TIMEOUT', 3:'NOTRUN'}[result.status] + " " +
|
| - result.message;
|
| - result.status = result.FAIL;
|
| - } else {
|
| - result.status = result.PASS;
|
| - result.message = "Expected failure (" + expected_failure + "): " + result.message;
|
| - }
|
| - counts.expected_failed++;
|
| - }
|
| -
|
| - var output = document.createElement('li');
|
| - output.innerHTML += result.name + ': ';
|
| -
|
| - switch (result.status) {
|
| - case result.PASS:
|
| - if (!expected_failure) {
|
| - output.className = 'pass';
|
| - } else {
|
| - output.className = 'pass-expected-failure';
|
| - }
|
| - counts.passed++;
|
| - break;
|
| -
|
| - case result.TIMEOUT:
|
| - output.className = 'timeout';
|
| - counts.failed++;
|
| - break;
|
| -
|
| - case result.NOTRUN:
|
| - output.className = 'skipped';
|
| - counts.skipped++;
|
| - break;
|
| -
|
| - case result.FAIL:
|
| - default:
|
| - output.className = 'failed';
|
| - counts.failed++;
|
| - }
|
| -
|
| - output.innerHTML += output.className;
|
| - if (result.message != null) {
|
| - output.innerHTML += ' - ' + result.message;
|
| - }
|
| - newResultsDiv.appendChild(output);
|
| - }
|
| - test.querySelector('.log').appendChild(newResultsDiv);
|
| -
|
| - var debug = '';
|
| - try {
|
| - debug = test.querySelector('iframe').contentDocument.getElementById('debug').innerText;
|
| - } catch (e) {
|
| - debug = 'No debug... :(';
|
| - }
|
| -
|
| - if (counts.total > 0) {
|
| - test.results_processed = {
|
| - type: 'result',
|
| - testName: test.id,
|
| - results: results,
|
| - debug: debug
|
| - };
|
| -
|
| - if (counts.failed == 0) {
|
| - if (counts.expected_failed > 0) {
|
| - test.className = 'pass-expected-failure';
|
| - } else if (counts.skipped > 0) {
|
| - test.className = 'skipped';
|
| - } else {
|
| - test.className = 'pass';
|
| - }
|
| - } else {
|
| - test.className = 'fail';
|
| - }
|
| -
|
| - var summary = counts.total + ' tests; ';
|
| - if (counts.passed > 0) {
|
| - summary += ' ' + counts.passed + ' passed';
|
| - if (counts.expected_failed > 0) {
|
| - summary += ' (with ' + counts.expected_failed + ' expected failures)';
|
| - }
|
| - }
|
| - if (counts.failed > 0) {
|
| - summary += ' ' + counts.failed + ' failed';
|
| - }
|
| - if (counts.skipped > 0) {
|
| - summary += ' ' + counts.skipped + ' skipped';
|
| - }
|
| - test.querySelector('.count').textContent = summary;
|
| - } else {
|
| - test.results_processed = {
|
| - type: 'result',
|
| - testName: test.id,
|
| - results: [],
|
| - };
|
| - test.className = 'no-tests';
|
| - test.querySelector('.count').textContent = 'TIMEOUT';
|
| - }
|
| -}
|
| -
|
| -})();
|
| -
|
| -
|
| -</script>
|
|
|