Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Unified Diff: third_party/qunit/src/browser_test_harness.js

Issue 1638753003: Fails QUnit.test() after a timeout of 5 seconds. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@FixUT
Patch Set: Rebase Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/qunit/README.chromium ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « third_party/qunit/README.chromium ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698