-
-
Notifications
You must be signed in to change notification settings - Fork 34.3k
test,esm: validate more edge cases for dynamic imports #46059
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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,88 @@ 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}/); | ||
| }); | ||
|
|
||
| it('should be able to handle never resolving dynamic imports (ESM entry point)', 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('should be able to handle never resolving dynamic imports (CJS entry point)', 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('should be able to handle never loading dynamic imports (ESM entry point)', 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('should be able to handle never loading dynamic imports (CJS entry point)', 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('should be able to handle race of never settling dynamic imports (ESM entry point)', 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); | ||
| }); | ||
|
|
||
| it('should be able to handle race of never settling dynamic imports (CJS entry point)', 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); | ||
| }); | ||
| }); | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| 'use strict'; | ||
|
|
||
| const neverSettlingDynamicImport = import('never-settle-load'); | ||
|
|
||
| console.log('should be output'); | ||
|
|
||
| neverSettlingDynamicImport.then(() => process.exit(1)); |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| const neverSettlingDynamicImport = import('never-settle-load'); | ||
|
|
||
| console.log('should be output'); | ||
|
|
||
| await neverSettlingDynamicImport; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| 'use strict'; | ||
|
|
||
| const neverSettlingDynamicImport = import('never-settle-resolve'); | ||
|
|
||
| console.log('should be output'); | ||
|
|
||
| neverSettlingDynamicImport.then(() => process.exit(1)); |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| const neverSettlingDynamicImport = import('never-settle-resolve'); | ||
|
|
||
| console.log('should be output'); | ||
|
|
||
| await neverSettlingDynamicImport; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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)); |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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); |
Uh oh!
There was an error while loading. Please reload this page.