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