test: improve coverage for load hooks
Refs: https://github.com/nodejs/node/pull/43363#discussion_r894366025 PR-URL: https://github.com/nodejs/node/pull/43374 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com> Reviewed-By: Akhil Marsonya <akhil.marsonya27@gmail.com>
This commit is contained in:
parent
a36a5469c2
commit
29236b5c9d
65
test/es-module/test-esm-loader-thenable.mjs
Normal file
65
test/es-module/test-esm-loader-thenable.mjs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import { mustCall } from '../common/index.mjs';
|
||||||
|
import { fileURL, path } from '../common/fixtures.mjs';
|
||||||
|
import { match, ok, notStrictEqual, strictEqual } from 'assert';
|
||||||
|
import { spawn } from 'child_process';
|
||||||
|
import { execPath } from 'process';
|
||||||
|
|
||||||
|
{
|
||||||
|
const child = spawn(execPath, [
|
||||||
|
'--experimental-loader',
|
||||||
|
fileURL('es-module-loaders', 'thenable-load-hook.mjs').href,
|
||||||
|
path('es-modules', 'test-esm-ok.mjs'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
let stderr = '';
|
||||||
|
child.stderr.setEncoding('utf8');
|
||||||
|
child.stderr.on('data', (data) => {
|
||||||
|
stderr += data;
|
||||||
|
});
|
||||||
|
child.on('close', mustCall((code, _signal) => {
|
||||||
|
strictEqual(code, 0);
|
||||||
|
ok(!stderr.includes('must not call'));
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const child = spawn(execPath, [
|
||||||
|
'--experimental-loader',
|
||||||
|
fileURL('es-module-loaders', 'thenable-load-hook-rejected.mjs').href,
|
||||||
|
path('es-modules', 'test-esm-ok.mjs'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
let stderr = '';
|
||||||
|
child.stderr.setEncoding('utf8');
|
||||||
|
child.stderr.on('data', (data) => {
|
||||||
|
stderr += data;
|
||||||
|
});
|
||||||
|
child.on('close', mustCall((code, _signal) => {
|
||||||
|
notStrictEqual(code, 0);
|
||||||
|
|
||||||
|
match(stderr, /\sError: must crash the process\r?\n/);
|
||||||
|
|
||||||
|
ok(!stderr.includes('must not call'));
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const child = spawn(execPath, [
|
||||||
|
'--experimental-loader',
|
||||||
|
fileURL('es-module-loaders', 'thenable-load-hook-rejected-no-arguments.mjs').href,
|
||||||
|
path('es-modules', 'test-esm-ok.mjs'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
let stderr = '';
|
||||||
|
child.stderr.setEncoding('utf8');
|
||||||
|
child.stderr.on('data', (data) => {
|
||||||
|
stderr += data;
|
||||||
|
});
|
||||||
|
child.on('close', mustCall((code, _signal) => {
|
||||||
|
notStrictEqual(code, 0);
|
||||||
|
|
||||||
|
match(stderr, /\sundefined\r?\n/);
|
||||||
|
|
||||||
|
ok(!stderr.includes('must not call'));
|
||||||
|
}));
|
||||||
|
}
|
10
test/fixtures/es-module-loaders/thenable-load-hook-rejected-no-arguments.mjs
vendored
Normal file
10
test/fixtures/es-module-loaders/thenable-load-hook-rejected-no-arguments.mjs
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
export function load () {
|
||||||
|
let thenAlreadyAccessed = false;
|
||||||
|
return {
|
||||||
|
get then() {
|
||||||
|
if (thenAlreadyAccessed) throw new Error('must not call');
|
||||||
|
thenAlreadyAccessed = true;
|
||||||
|
return (_, reject) => reject();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
10
test/fixtures/es-module-loaders/thenable-load-hook-rejected.mjs
vendored
Normal file
10
test/fixtures/es-module-loaders/thenable-load-hook-rejected.mjs
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
export function load () {
|
||||||
|
let thenAlreadyAccessed = false;
|
||||||
|
return {
|
||||||
|
get then() {
|
||||||
|
if (thenAlreadyAccessed) throw new Error('must not call');
|
||||||
|
thenAlreadyAccessed = true;
|
||||||
|
return (_, reject) => reject(new Error('must crash the process'));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
10
test/fixtures/es-module-loaders/thenable-load-hook.mjs
vendored
Normal file
10
test/fixtures/es-module-loaders/thenable-load-hook.mjs
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
export function load(url, context, next) {
|
||||||
|
let thenAlreadyAccessed = false;
|
||||||
|
return {
|
||||||
|
get then() {
|
||||||
|
if (thenAlreadyAccessed) throw new Error('must not call');
|
||||||
|
thenAlreadyAccessed = true;
|
||||||
|
return (resolve) => resolve(next(url, context));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user