From 6a89aa7598d8cb7ff49afb9ec3e25d7e14aa13cc Mon Sep 17 00:00:00 2001 From: Geoffrey Booth Date: Fri, 28 Jun 2024 17:22:17 -0700 Subject: [PATCH] update tests --- test/es-module/test-esm-cjs-exports.js | 3 +-- test/es-module/test-esm-detect-ambiguous.mjs | 2 +- .../test-esm-extensionless-esm-and-wasm.mjs | 15 ++++++--------- test/es-module/test-esm-import-flag.mjs | 4 ++-- test/es-module/test-esm-loader-hooks.mjs | 16 ++++++++-------- test/es-module/test-esm-resolve-type.mjs | 12 ++++++------ test/es-module/test-require-module-implicit.js | 16 +--------------- .../builtin-named-exports-loader.mjs | 2 +- 8 files changed, 26 insertions(+), 44 deletions(-) diff --git a/test/es-module/test-esm-cjs-exports.js b/test/es-module/test-esm-cjs-exports.js index b06e1ca764ccf0..046d06af1f1851 100644 --- a/test/es-module/test-esm-cjs-exports.js +++ b/test/es-module/test-esm-cjs-exports.js @@ -21,9 +21,8 @@ describe('ESM: importing CJS', { concurrency: !process.env.TEST_PARALLEL }, () = const invalidEntry = fixtures.path('/es-modules/cjs-exports-invalid.mjs'); const { code, signal, stderr } = await spawnPromisified(execPath, [invalidEntry]); + assert.match(stderr, /SyntaxError: The requested module '\.\/invalid-cjs\.js' does not provide an export named 'default'/); assert.strictEqual(code, 1); assert.strictEqual(signal, null); - assert.ok(stderr.includes('Warning: To load an ES module')); - assert.ok(stderr.includes('Unexpected token \'export\'')); }); }); diff --git a/test/es-module/test-esm-detect-ambiguous.mjs b/test/es-module/test-esm-detect-ambiguous.mjs index a58872e661c4f7..051350ab299d43 100644 --- a/test/es-module/test-esm-detect-ambiguous.mjs +++ b/test/es-module/test-esm-detect-ambiguous.mjs @@ -185,7 +185,7 @@ describe('--experimental-detect-module', { concurrency: !process.env.TEST_PARALL ]); strictEqual(stderr, ''); - strictEqual(stdout, 'null\nexecuted\n'); + strictEqual(stdout, 'undefined\nexecuted\n'); strictEqual(code, 0); strictEqual(signal, null); diff --git a/test/es-module/test-esm-extensionless-esm-and-wasm.mjs b/test/es-module/test-esm-extensionless-esm-and-wasm.mjs index e36f5c7e141b65..8b06cf2b4360e8 100644 --- a/test/es-module/test-esm-extensionless-esm-and-wasm.mjs +++ b/test/es-module/test-esm-extensionless-esm-and-wasm.mjs @@ -60,25 +60,22 @@ describe('extensionless Wasm modules within a "type": "module" package scope', { }); describe('extensionless ES modules within no package scope', { concurrency: !process.env.TEST_PARALLEL }, () => { - // This succeeds with `--experimental-default-type=module` - it('should error as the entry point', async () => { + it('should run as the entry point', async () => { const { code, signal, stdout, stderr } = await spawnPromisified(process.execPath, [ fixtures.path('es-modules/noext-esm'), ]); - match(stderr, /SyntaxError/); - strictEqual(stdout, ''); - strictEqual(code, 1); + strictEqual(stdout, 'executed\n'); + strictEqual(stderr, ''); + strictEqual(code, 0); strictEqual(signal, null); }); - // This succeeds with `--experimental-default-type=module` - it('should error on import', async () => { + it('should run on import', async () => { try { await import(fixtures.fileURL('es-modules/noext-esm')); + } catch { mustNotCall(); - } catch (err) { - ok(err instanceof SyntaxError); } }); }); diff --git a/test/es-module/test-esm-import-flag.mjs b/test/es-module/test-esm-import-flag.mjs index 8861133c9ee4b9..81de3b11a38609 100644 --- a/test/es-module/test-esm-import-flag.mjs +++ b/test/es-module/test-esm-import-flag.mjs @@ -146,9 +146,9 @@ describe('import modules using --import', { concurrency: !process.env.TEST_PARAL ] ); - assert.match(stderr, /SyntaxError: Unexpected token 'export'/); + assert.strictEqual(stderr, ''); assert.match(stdout, /^\.mjs file\r?\n$/); - assert.strictEqual(code, 1); + assert.strictEqual(code, 0); assert.strictEqual(signal, null); }); diff --git a/test/es-module/test-esm-loader-hooks.mjs b/test/es-module/test-esm-loader-hooks.mjs index c7536f93e51567..cbdb05c2fddce8 100644 --- a/test/es-module/test-esm-loader-hooks.mjs +++ b/test/es-module/test-esm-loader-hooks.mjs @@ -751,15 +751,15 @@ describe('Loader hooks', { concurrency: !process.env.TEST_PARALLEL }, () => { '--no-warnings', '--experimental-loader', `data:text/javascript,import{readFile}from"node:fs/promises";import{fileURLToPath}from"node:url";export ${ - async function load(u, c, n) { - const r = await n(u, c); - if (u.endsWith('/common/index.js')) { - r.source = '"use strict";module.exports=require("node:module").createRequire(' + - `${JSON.stringify(u)})(${JSON.stringify(fileURLToPath(u))});\n`; - } else if (c.format === 'commonjs') { - r.source = await readFile(new URL(u)); + async function load(url, context, nextLoad) { + const result = await nextLoad(url, context); + if (url.endsWith('/common/index.js')) { + result.source = '"use strict";module.exports=require("node:module").createRequire(' + + `${JSON.stringify(url)})(${JSON.stringify(fileURLToPath(url))});\n`; + } else if (url.startsWith('file:') && (context.format === undefined || context.format === 'commonjs')) { + result.source = await readFile(new URL(url)); } - return r; + return result; }}`, '--experimental-loader', fixtures.fileURL('es-module-loaders/loader-resolve-passthru.mjs'), diff --git a/test/es-module/test-esm-resolve-type.mjs b/test/es-module/test-esm-resolve-type.mjs index d2642eda39062b..4c08c751b99244 100644 --- a/test/es-module/test-esm-resolve-type.mjs +++ b/test/es-module/test-esm-resolve-type.mjs @@ -41,8 +41,8 @@ try { [ '/es-modules/package-ends-node_modules/index.js', 'module' ], [ '/es-modules/package-type-module/index.js', 'module' ], [ '/es-modules/package-type-commonjs/index.js', 'commonjs' ], - [ '/es-modules/package-without-type/index.js', 'commonjs' ], - [ '/es-modules/package-without-pjson/index.js', 'commonjs' ], + [ '/es-modules/package-without-type/index.js', undefined ], + [ '/es-modules/package-without-pjson/index.js', undefined ], ].forEach(([ testScript, expectedType ]) => { const resolvedPath = path.resolve(fixtures.path(testScript)); const resolveResult = resolve(url.pathToFileURL(resolvedPath)); @@ -55,11 +55,11 @@ try { * * for test-module-ne: everything .js that is not 'module' is 'commonjs' */ - for (const [ moduleName, moduleExtenstion, moduleType, expectedResolvedType ] of + for (const [ moduleName, moduleExtension, moduleType, expectedResolvedType ] of [ [ 'test-module-mainjs', 'js', 'module', 'module'], [ 'test-module-mainmjs', 'mjs', 'module', 'module'], [ 'test-module-cjs', 'js', 'commonjs', 'commonjs'], - [ 'test-module-ne', 'js', undefined, 'commonjs'], + [ 'test-module-ne', 'js', undefined, undefined], ]) { process.chdir(previousCwd); tmpdir.refresh(); @@ -73,14 +73,14 @@ try { const mDir = rel(`node_modules/${moduleName}`); const subDir = rel(`node_modules/${moduleName}/subdir`); const pkg = rel(`node_modules/${moduleName}/package.json`); - const script = rel(`node_modules/${moduleName}/subdir/mainfile.${moduleExtenstion}`); + const script = rel(`node_modules/${moduleName}/subdir/mainfile.${moduleExtension}`); createDir(nmDir); createDir(mDir); createDir(subDir); const pkgJsonContent = { ...(moduleType !== undefined) && { type: moduleType }, - main: `subdir/mainfile.${moduleExtenstion}` + main: `subdir/mainfile.${moduleExtension}` }; fs.writeFileSync(pkg, JSON.stringify(pkgJsonContent)); fs.writeFileSync(script, diff --git a/test/es-module/test-require-module-implicit.js b/test/es-module/test-require-module-implicit.js index 5b5a4a4bbb47b0..f62fd78f2ebe6f 100644 --- a/test/es-module/test-require-module-implicit.js +++ b/test/es-module/test-require-module-implicit.js @@ -1,26 +1,12 @@ // Flags: --experimental-require-module 'use strict'; -// Tests that require()ing modules without explicit module type information -// warns and errors. +// Tests that require()ing .mjs should not be matched as default extensions. require('../common'); const assert = require('assert'); const { isModuleNamespaceObject } = require('util/types'); -assert.throws(() => { - require('../fixtures/es-modules/package-without-type/noext-esm'); -}, { - message: /Unexpected token 'export'/ -}); - -assert.throws(() => { - require('../fixtures/es-modules/loose.js'); -}, { - message: /Unexpected token 'export'/ -}); - { - // .mjs should not be matched as default extensions. const id = '../fixtures/es-modules/should-not-be-resolved'; assert.throws(() => { require(id); diff --git a/test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs b/test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs index fca31c585a6ea9..e2ce62c8ee7b8e 100644 --- a/test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs +++ b/test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs @@ -28,7 +28,7 @@ export function load(url, context, next) { source: generateBuiltinModule(urlObj.pathname), format: 'commonjs', }; - } else if (context.format === 'commonjs') { + } else if (context.format === undefined || context.format === 'commonjs') { return { shortCircuit: true, source: readFileSync(new URL(url)),