pdf.js/test/unit/testreporter.js
Tim van der Meij b789a0e216
Log the total number of tests and the random seed in the test runner
This might make debugging intermittent failures a bit easier in the
future because it allows us to spot unexpected differences in the number
of tests being run and allows us to run the tests locally in the same
order in case of intermittent failures.
2020-08-01 21:09:01 +02:00

94 lines
2.7 KiB
JavaScript

"use strict";
// eslint-disable-next-line no-unused-vars
var TestReporter = function (browser) {
function send(action, json, cb) {
var r = new XMLHttpRequest();
// (The POST URI is ignored atm.)
r.open("POST", action, true);
r.setRequestHeader("Content-Type", "application/json");
r.onreadystatechange = function sendTaskResultOnreadystatechange(e) {
if (r.readyState === 4) {
// Retry until successful
if (r.status !== 200) {
send(action, json, cb);
} else {
if (cb) {
cb();
}
}
}
};
json.browser = browser;
r.send(JSON.stringify(json));
}
function sendInfo(message) {
send("/info", { message });
}
function sendResult(status, description, error) {
var message = {
status,
description,
};
if (typeof error !== "undefined") {
message.error = error;
}
send("/submit_task_results", message);
}
function sendQuitRequest() {
send(`/tellMeToQuit?browser=${escape(browser)}`, {});
}
this.now = function () {
return new Date().getTime();
};
this.jasmineStarted = function (suiteInfo) {
this.runnerStartTime = this.now();
const total = suiteInfo.totalSpecsDefined;
const seed = suiteInfo.order.seed;
sendInfo(`Started ${total} tests for ${browser} with seed ${seed}.`);
};
this.suiteStarted = function (result) {
// Normally suite starts don't have to be reported because the individual
// specs inside them are reported, but it can happen that the suite cannot
// start, for instance due to an uncaught exception in `beforeEach`. This
// is problematic because the specs inside the suite will never be found
// and run, so if we don't report the suite start failure here it would be
// ignored silently, leading to passing tests even though some did not run.
if (result.failedExpectations.length > 0) {
let failedMessages = "";
for (const item of result.failedExpectations) {
failedMessages += `${item.message} `;
}
sendResult("TEST-UNEXPECTED-FAIL", result.description, failedMessages);
}
};
this.specStarted = function (result) {};
this.specDone = function (result) {
if (result.failedExpectations.length === 0) {
sendResult("TEST-PASSED", result.description);
} else {
let failedMessages = "";
for (const item of result.failedExpectations) {
failedMessages += `${item.message} `;
}
sendResult("TEST-UNEXPECTED-FAIL", result.description, failedMessages);
}
};
this.suiteDone = function (result) {};
this.jasmineDone = function () {
// Give the test runner some time process any queued requests.
setTimeout(sendQuitRequest, 500);
};
};