test: the Firefox suite tolerates no extension error (closes #487)
The one entry in ALLOWED_ERRORS in tests/e2e/firefox/run.js, Firefox reporting a popup promise that settled after the page unloaded, lost its cause when the site-connection buttons stopped sending with an unawaited sendMessage before closing (#275). Left in place it would also hide the same error from any other popup code that sends and then closes. The entry goes, with the code that only printed and set aside tolerated errors, and the README paragraph that described it. Model: opus-5-5
This commit was merged in pull request #490.
This commit is contained in:
@@ -854,37 +854,6 @@ step(
|
||||
|
||||
// ------------------------------------------------------------- runner
|
||||
|
||||
// Uncaught extension errors that are known, tracked and deliberately
|
||||
// tolerated, in the same spirit as ALLOWED_ERRORS in tests/e2e/harness.js:
|
||||
// every entry names the issue that will delete it, and every occurrence is
|
||||
// still printed, so tolerating one is visible in the log rather than silent.
|
||||
// This is the only concession in an otherwise zero-tolerance policy.
|
||||
const ALLOWED_ERRORS = [
|
||||
{
|
||||
// The site-connection buttons in src/popup/views/approval.js send
|
||||
// their decision and call window.close() on the next line. Firefox's
|
||||
// BaseContext.wrapPromise reports, through Cu.reportError, any
|
||||
// extension-API promise that settles after its context unloaded —
|
||||
// whether or not the caller attached a handler, so notify()'s catch
|
||||
// cannot suppress it.
|
||||
//
|
||||
// Pre-existing, and not introduced by the promise shim: the send was
|
||||
// already unawaited, and this suite is merely the first thing to
|
||||
// drive that window on Firefox. It is the same teardown ordering as
|
||||
// the issue below, whose fix — making the outcome independent of when
|
||||
// the popup closes — removes this entry with it.
|
||||
pattern: /Promise (?:resolved|rejected) after context unloaded/,
|
||||
source: /\/src\/popup\/index\.js$/,
|
||||
issue: "https://git.eeqj.de/sneak/AutistMask/issues/275",
|
||||
},
|
||||
];
|
||||
|
||||
function allowedFor(e) {
|
||||
return ALLOWED_ERRORS.find(
|
||||
(a) => a.pattern.test(e.msg) && a.source.test(e.src),
|
||||
);
|
||||
}
|
||||
|
||||
function formatError(e) {
|
||||
return (
|
||||
e.msg + " (" + e.src + ":" + e.line + (e.cat ? ", " + e.cat : "") + ")"
|
||||
@@ -1001,20 +970,6 @@ async function main() {
|
||||
installFailure = null;
|
||||
}
|
||||
|
||||
// Tolerated errors are set aside, never dropped: each one is
|
||||
// printed with the issue that keeps it on the list, so the
|
||||
// concession stays in the run output.
|
||||
const tolerated = found.filter((e) => allowedFor(e));
|
||||
found = found.filter((e) => !allowedFor(e));
|
||||
for (const e of tolerated) {
|
||||
console.log(
|
||||
"# tolerated (" +
|
||||
allowedFor(e).issue +
|
||||
"): " +
|
||||
formatError(e),
|
||||
);
|
||||
}
|
||||
|
||||
// Any uncaught error from an extension source fails the step
|
||||
// that provoked it, whether or not its assertions passed.
|
||||
if (!failure && found.length > 0) {
|
||||
@@ -1039,13 +994,7 @@ async function main() {
|
||||
// blamed on any one step, but they are still reported and they
|
||||
// still fail the run.
|
||||
await sleep(1000);
|
||||
const trailingAll = await errors.take();
|
||||
for (const e of trailingAll.filter((x) => allowedFor(x))) {
|
||||
console.log(
|
||||
"# tolerated (" + allowedFor(e).issue + "): " + formatError(e),
|
||||
);
|
||||
}
|
||||
const trailing = trailingAll.filter((e) => !allowedFor(e));
|
||||
const trailing = await errors.take();
|
||||
console.log(
|
||||
"# " +
|
||||
(steps.length - failed) +
|
||||
|
||||
Reference in New Issue
Block a user