Skip to content

Commit

Permalink
esm: increase test coverage of edge cases
Browse files Browse the repository at this point in the history
PR-URL: nodejs/node#47033
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Geoffrey Booth <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
  • Loading branch information
aduh95 committed May 2, 2023
1 parent c5f4629 commit 7352e31
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 0 deletions.
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');

0 comments on commit 7352e31

Please sign in to comment.