Skip to content
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

[v18.x backport] esm: increase test coverage of edge cases #47433

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions test/es-module/test-esm-loader-hooks.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,21 @@ describe('Loader hooks', { concurrency: true }, () => {
assert.strictEqual(code, 0);
assert.strictEqual(signal, null);
});

it('import.meta.resolve of a never-settling resolve', async () => {
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
'--no-warnings',
'--experimental-import-meta-resolve',
'--experimental-loader',
fixtures.fileURL('es-module-loaders/never-settling-resolve-step/loader.mjs'),
fixtures.path('es-module-loaders/never-settling-resolve-step/import.meta.never-resolve.mjs'),
]);

assert.strictEqual(stderr, '');
assert.match(stdout, /^should be output\r?\n$/);
assert.strictEqual(code, 13);
assert.strictEqual(signal, null);
});
});

describe('should handle never-settling hooks in CJS files', { concurrency: true }, () => {
Expand Down Expand Up @@ -113,4 +128,19 @@ describe('Loader hooks', { concurrency: true }, () => {
assert.strictEqual(signal, null);
});
});

it('should not leak internals or expose import.meta.resolve', async () => {
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
'--no-warnings',
'--experimental-import-meta-resolve',
'--experimental-loader',
fixtures.fileURL('es-module-loaders/loader-edge-cases.mjs'),
fixtures.path('empty.js'),
]);

assert.strictEqual(stderr, '');
assert.strictEqual(stdout, '');
assert.strictEqual(code, 0);
assert.strictEqual(signal, null);
});
});
15 changes: 15 additions & 0 deletions test/fixtures/es-module-loaders/loader-edge-cases.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { strictEqual } from "node:assert";
import { isMainThread, workerData, parentPort } from "node:worker_threads";

// TODO(aduh95): switch this to `false` when loader hooks are run on a separate thread.
strictEqual(isMainThread, true);

// We want to make sure that internals are not leaked on the public module:
strictEqual(workerData, null);
strictEqual(parentPort, null);

// TODO(aduh95): switch to `"undefined"` when loader hooks are run on a separate thread.
// We don't want `import.meta.resolve` being available from loaders
// as the sync implementation is not compatible with calling async
// functions on the same thread.
strictEqual(typeof import.meta.resolve, 'function');
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
console.log('should be output');

await import.meta.resolve('never-settle-resolve');

console.log('should not be output');