mirror of
https://github.com/nodejs/node.git
synced 2024-11-28 22:46:31 +01:00
test,esm: validate more edge cases for dynamic imports
PR-URL: https://github.com/nodejs/node/pull/46059 Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com> Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com> Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
This commit is contained in:
parent
198d2037f1
commit
9b1ed04f2f
@ -4,7 +4,7 @@ import assert from 'node:assert';
|
||||
import { execPath } from 'node:process';
|
||||
import { describe, it } from 'node:test';
|
||||
|
||||
describe('Loader hooks', () => {
|
||||
describe('Loader hooks', { concurrency: true }, () => {
|
||||
it('are called with all expected arguments', async () => {
|
||||
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
|
||||
'--no-warnings',
|
||||
@ -23,4 +23,94 @@ describe('Loader hooks', () => {
|
||||
assert.match(lines[2], /{"url":"file:\/\/\/.*\/experimental\.json","format":"test","shortCircuit":true}/);
|
||||
assert.match(lines[3], /{"source":{"type":"Buffer","data":\[.*\]},"format":"json","shortCircuit":true}/);
|
||||
});
|
||||
|
||||
describe('should handle never-settling hooks in ESM files', { concurrency: true }, () => {
|
||||
it('top-level await of a never-settling resolve', async () => {
|
||||
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
|
||||
'--no-warnings',
|
||||
'--experimental-loader',
|
||||
fixtures.fileURL('es-module-loaders/never-settling-resolve-step/loader.mjs'),
|
||||
fixtures.path('es-module-loaders/never-settling-resolve-step/never-resolve.mjs'),
|
||||
]);
|
||||
|
||||
assert.strictEqual(stderr, '');
|
||||
assert.match(stdout, /^should be output\r?\n$/);
|
||||
assert.strictEqual(code, 13);
|
||||
assert.strictEqual(signal, null);
|
||||
});
|
||||
|
||||
it('top-level await of a never-settling load', async () => {
|
||||
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
|
||||
'--no-warnings',
|
||||
'--experimental-loader',
|
||||
fixtures.fileURL('es-module-loaders/never-settling-resolve-step/loader.mjs'),
|
||||
fixtures.path('es-module-loaders/never-settling-resolve-step/never-load.mjs'),
|
||||
]);
|
||||
|
||||
assert.strictEqual(stderr, '');
|
||||
assert.match(stdout, /^should be output\r?\n$/);
|
||||
assert.strictEqual(code, 13);
|
||||
assert.strictEqual(signal, null);
|
||||
});
|
||||
|
||||
|
||||
it('top-level await of a race of never-settling hooks', async () => {
|
||||
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
|
||||
'--no-warnings',
|
||||
'--experimental-loader',
|
||||
fixtures.fileURL('es-module-loaders/never-settling-resolve-step/loader.mjs'),
|
||||
fixtures.path('es-module-loaders/never-settling-resolve-step/race.mjs'),
|
||||
]);
|
||||
|
||||
assert.strictEqual(stderr, '');
|
||||
assert.match(stdout, /^true\r?\n$/);
|
||||
assert.strictEqual(code, 0);
|
||||
assert.strictEqual(signal, null);
|
||||
});
|
||||
});
|
||||
|
||||
describe('should handle never-settling hooks in CJS files', { concurrency: true }, () => {
|
||||
it('never-settling resolve', async () => {
|
||||
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
|
||||
'--no-warnings',
|
||||
'--experimental-loader',
|
||||
fixtures.fileURL('es-module-loaders/never-settling-resolve-step/loader.mjs'),
|
||||
fixtures.path('es-module-loaders/never-settling-resolve-step/never-resolve.cjs'),
|
||||
]);
|
||||
|
||||
assert.strictEqual(stderr, '');
|
||||
assert.match(stdout, /^should be output\r?\n$/);
|
||||
assert.strictEqual(code, 0);
|
||||
assert.strictEqual(signal, null);
|
||||
});
|
||||
|
||||
|
||||
it('never-settling load', async () => {
|
||||
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
|
||||
'--no-warnings',
|
||||
'--experimental-loader',
|
||||
fixtures.fileURL('es-module-loaders/never-settling-resolve-step/loader.mjs'),
|
||||
fixtures.path('es-module-loaders/never-settling-resolve-step/never-load.cjs'),
|
||||
]);
|
||||
|
||||
assert.strictEqual(stderr, '');
|
||||
assert.match(stdout, /^should be output\r?\n$/);
|
||||
assert.strictEqual(code, 0);
|
||||
assert.strictEqual(signal, null);
|
||||
});
|
||||
|
||||
it('race of never-settling hooks', async () => {
|
||||
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
|
||||
'--no-warnings',
|
||||
'--experimental-loader',
|
||||
fixtures.fileURL('es-module-loaders/never-settling-resolve-step/loader.mjs'),
|
||||
fixtures.path('es-module-loaders/never-settling-resolve-step/race.cjs'),
|
||||
]);
|
||||
|
||||
assert.strictEqual(stderr, '');
|
||||
assert.match(stdout, /^true\r?\n$/);
|
||||
assert.strictEqual(code, 0);
|
||||
assert.strictEqual(signal, null);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
10
test/fixtures/es-module-loaders/never-settling-resolve-step/loader.mjs
vendored
Normal file
10
test/fixtures/es-module-loaders/never-settling-resolve-step/loader.mjs
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
export function resolve(specifier, context, next) {
|
||||
if (specifier === 'never-settle-resolve') return new Promise(() => {});
|
||||
if (specifier === 'never-settle-load') return { __proto__: null, shortCircuit: true, url: 'never-settle:///' };
|
||||
return next(specifier, context);
|
||||
}
|
||||
|
||||
export function load(url, context, next) {
|
||||
if (url === 'never-settle:///') return new Promise(() => {});
|
||||
return next(url, context);
|
||||
}
|
7
test/fixtures/es-module-loaders/never-settling-resolve-step/never-load.cjs
vendored
Normal file
7
test/fixtures/es-module-loaders/never-settling-resolve-step/never-load.cjs
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const neverSettlingDynamicImport = import('never-settle-load');
|
||||
|
||||
console.log('should be output');
|
||||
|
||||
neverSettlingDynamicImport.then(() => process.exit(1));
|
5
test/fixtures/es-module-loaders/never-settling-resolve-step/never-load.mjs
vendored
Normal file
5
test/fixtures/es-module-loaders/never-settling-resolve-step/never-load.mjs
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
const neverSettlingDynamicImport = import('never-settle-load');
|
||||
|
||||
console.log('should be output');
|
||||
|
||||
await neverSettlingDynamicImport;
|
7
test/fixtures/es-module-loaders/never-settling-resolve-step/never-resolve.cjs
vendored
Normal file
7
test/fixtures/es-module-loaders/never-settling-resolve-step/never-resolve.cjs
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const neverSettlingDynamicImport = import('never-settle-resolve');
|
||||
|
||||
console.log('should be output');
|
||||
|
||||
neverSettlingDynamicImport.then(() => process.exit(1));
|
5
test/fixtures/es-module-loaders/never-settling-resolve-step/never-resolve.mjs
vendored
Normal file
5
test/fixtures/es-module-loaders/never-settling-resolve-step/never-resolve.mjs
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
const neverSettlingDynamicImport = import('never-settle-resolve');
|
||||
|
||||
console.log('should be output');
|
||||
|
||||
await neverSettlingDynamicImport;
|
7
test/fixtures/es-module-loaders/never-settling-resolve-step/race.cjs
vendored
Normal file
7
test/fixtures/es-module-loaders/never-settling-resolve-step/race.cjs
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
Promise.race([
|
||||
import('never-settle-resolve'),
|
||||
import('never-settle-load'),
|
||||
import('node:process'),
|
||||
]).then(result => console.log(result.default === process));
|
7
test/fixtures/es-module-loaders/never-settling-resolve-step/race.mjs
vendored
Normal file
7
test/fixtures/es-module-loaders/never-settling-resolve-step/race.mjs
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
const result = await Promise.race([
|
||||
import('never-settle-resolve'),
|
||||
import('never-settle-load'),
|
||||
import('node:process'),
|
||||
]);
|
||||
|
||||
console.log(result.default === process);
|
Loading…
Reference in New Issue
Block a user