| Index: third_party/qunit/src/browser_test_harness.js
|
| diff --git a/third_party/qunit/src/browser_test_harness.js b/third_party/qunit/src/browser_test_harness.js
|
| index 4acfe62d6e849278e80078e2662693210d660978..78537abc1b8ad3b4e61a0f3cb2ddc59406594458 100644
|
| --- a/third_party/qunit/src/browser_test_harness.js
|
| +++ b/third_party/qunit/src/browser_test_harness.js
|
| @@ -16,6 +16,8 @@
|
|
|
| 'use strict';
|
|
|
| +var TEST_TIMEOUT_IN_MS = 5000;
|
| +
|
| var TestReporter = function() {
|
| this.errorMessage_ = '';
|
| this.failedTestsCount_ = 0;
|
| @@ -23,11 +25,25 @@ var TestReporter = function() {
|
| };
|
|
|
| TestReporter.prototype.init = function(qunit) {
|
| + qunit.testStart(this.onTestStart_.bind(this));
|
| qunit.testDone(this.onTestDone_.bind(this));
|
| qunit.log(this.onAssertion_.bind(this));
|
| };
|
|
|
| +/**
|
| + * @param {{ module:string, name: string }} details
|
| + */
|
| +TestReporter.prototype.onTestStart_ = function(details) {
|
| + console.log('[===============]');
|
| + console.log('[------RUN------] ' + details.module + '.' + details.name);
|
| +};
|
| +
|
| +/**
|
| + * @param {{ module:string, name: string }} details
|
| + */
|
| TestReporter.prototype.onTestDone_ = function(details) {
|
| + console.log('[---COMPLETED---] ' + details.module + '.' + details.name);
|
| + console.log('[===============]');
|
| if (this.failedAssertions_.length > 0) {
|
| this.errorMessage_ += ' ' + details.module + '.' + details.name + '\n';
|
| this.errorMessage_ += this.failedAssertions_.map(
|
| @@ -94,4 +110,62 @@ if (automationController) {
|
| exports.browserTestHarness = testHarness;
|
| }
|
|
|
| +var qunitTest = QUnit.test;
|
| +var reasonTimeout = {};
|
| +
|
| +/**
|
| + * Returns a promise that resolves after |delay| along with a timerId
|
| + * for cancellation.
|
| + *
|
| + * @return {promise: !Promise, timerId: number}
|
| + */
|
| +BrowserTestHarness.timeout = function(delay) {
|
| + var timerId = 0;
|
| + var promise = new Promise(function(resolve) {
|
| + timerId = window.setTimeout(function() {
|
| + resolve();
|
| + }, delay);
|
| + });
|
| + return {
|
| + timerId: timerId,
|
| + promise: promise
|
| + };
|
| +};
|
| +
|
| +QUnit.config.urlConfig.push({
|
| + id: "disableTestTimeout",
|
| + label: "disable test timeout",
|
| + tooltip: "Check this when debugging locally to disable test timeout.",
|
| +});
|
| +
|
| +/**
|
| + * Forces the test to fail after |TEST_TIMEOUT_IN_MS|.
|
| + *
|
| + * @param {function(QUnit.Assert)} testCallback
|
| + */
|
| +BrowserTestHarness.test = function(testCallback) {
|
| + return function() {
|
| + var args = Array.prototype.slice.call(arguments);
|
| + var timeout = BrowserTestHarness.timeout(TEST_TIMEOUT_IN_MS);
|
| +
|
| + var testPromise = Promise.resolve(testCallback.apply(this, args))
|
| + .then(function() {
|
| + window.clearTimeout(timeout.timerId);
|
| + });
|
| +
|
| + var asserts = args[0];
|
| + var timeoutPromise = timeout.promise.then(function(){
|
| + asserts.ok(false, 'Test timed out after ' + TEST_TIMEOUT_IN_MS + ' ms')
|
| + })
|
| +
|
| + return Promise.race([testPromise, timeoutPromise]);
|
| + };
|
| +};
|
| +
|
| +if (!QUnit.urlParams.disableTestTimeout) {
|
| + QUnit.test = function(name, expected, testCallback, async) {
|
| + qunitTest(name, expected, BrowserTestHarness.test(testCallback), async);
|
| + };
|
| +}
|
| +
|
| })(window.QUnit, window.domAutomationController, window);
|
|
|