Skip to content

Commit 457eab7

Browse files
committed
module: add more test cases
1 parent 2142429 commit 457eab7

4 files changed

Lines changed: 94 additions & 10 deletions

test/es-module/test-esm-dynamic-import-not-found-error-location.mjs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ tmpdir.refresh();
99

1010
const missingPackage = 'this-package-does-not-exist';
1111

12-
async function assertDynamicImportNotFoundLocation(entry, sourceLine, underline) {
12+
async function assertDynamicImportNotFoundLocation(entry, sourceLine, underline, line = 2) {
1313
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [entry]);
1414

1515
assert.strictEqual(code, 1);
1616
assert.strictEqual(signal, null);
1717
assert.strictEqual(stdout, '');
18-
assert.ok(stderr.includes(`${entry}:2`));
18+
assert.ok(stderr.includes(`${entry}:${line}`));
1919
assert.match(stderr, new RegExp(sourceLine));
2020
assert.match(stderr, underline);
2121
assert.match(stderr, /ERR_MODULE_NOT_FOUND/);
@@ -46,3 +46,29 @@ await assertDynamicImportNotFoundLocation(
4646
`import\\(${JSON.stringify(missingPackage)}\\);`,
4747
/ {8}\^{27}/,
4848
);
49+
50+
const variableEntry = tmpdir.resolve('dynamic-variable-entry.mjs');
51+
await writeFile(variableEntry, [
52+
'Error.stackTraceLimit = 200;',
53+
`const pkg = ${JSON.stringify(missingPackage)};`,
54+
'await import(pkg);',
55+
].join('\n'));
56+
57+
await assertDynamicImportNotFoundLocation(
58+
variableEntry,
59+
'await import\\(pkg\\);',
60+
/ {13}\^{27}/,
61+
3,
62+
);
63+
64+
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [
65+
'--input-type=module',
66+
'--eval',
67+
`await import(${JSON.stringify(missingPackage)})`,
68+
]);
69+
70+
assert.strictEqual(code, 1);
71+
assert.strictEqual(signal, null);
72+
assert.strictEqual(stdout, '');
73+
assert.match(stderr, /ERR_MODULE_NOT_FOUND/);
74+
assert.doesNotMatch(stderr, /await import/);

test/es-module/test-esm-module-not-found-error-location.mjs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,26 @@ await writeFile(entry, [
1414
'console.log(ok, missing);',
1515
].join('\n'));
1616

17-
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, [entry]);
17+
async function assertModuleNotFoundLocation(args) {
18+
const { code, signal, stdout, stderr } = await spawnPromisified(execPath, args);
1819

19-
assert.strictEqual(code, 1);
20-
assert.strictEqual(signal, null);
21-
assert.strictEqual(stdout, '');
22-
assert.ok(stderr.includes(`${entry}:2`));
23-
assert.match(stderr, /import missing from "this-package-does-not-exist";/);
24-
assert.match(stderr, / {21}\^{27}/);
25-
assert.match(stderr, /ERR_MODULE_NOT_FOUND/);
20+
assert.strictEqual(code, 1);
21+
assert.strictEqual(signal, null);
22+
assert.strictEqual(stdout, '');
23+
assert.ok(stderr.includes(`${entry}:2`));
24+
assert.match(stderr, /import missing from "this-package-does-not-exist";/);
25+
assert.match(stderr, / {21}\^{27}/);
26+
assert.match(stderr, /ERR_MODULE_NOT_FOUND/);
27+
}
28+
29+
await assertModuleNotFoundLocation([entry]);
30+
31+
await assertModuleNotFoundLocation([
32+
'--no-warnings',
33+
'--import',
34+
'data:text/javascript,' +
35+
'import{register}from"node:module";' +
36+
'register("data:text/javascript,' +
37+
'export async function resolve(s,c,n){return n(s,c)}")',
38+
entry,
39+
]);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Flags: --expose-internals
2+
'use strict';
3+
4+
require('../common');
5+
6+
const assert = require('assert');
7+
const { getErrorSourceMessage } = require('internal/errors/error_source');
8+
9+
assert.strictEqual(
10+
getErrorSourceMessage('file.js', 1, undefined, 0, 1),
11+
undefined,
12+
);
13+
assert.strictEqual(
14+
getErrorSourceMessage('file.js', Number.NaN, 'const value = 1;', 0, 1),
15+
undefined,
16+
);
17+
18+
assert.strictEqual(
19+
getErrorSourceMessage('file.js', 1, '\tconst value = 1;', -5, 0),
20+
'file.js:1\n\tconst value = 1;\n^\n',
21+
);
22+
23+
assert.strictEqual(
24+
getErrorSourceMessage('file.js', 7, `${'x'.repeat(20)}target${'y'.repeat(140)}`, 20, 200),
25+
`file.js:7\n${'x'.repeat(20)}target${'y'.repeat(94)}...\n${' '.repeat(20)}${'^'.repeat(100)}\n`,
26+
);

test/parallel/test-module-not-found-error-location.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,21 @@ assert.ok(longLineResult.stderr.includes(`${longLineEntry}:1`));
4545
assert.match(longLineResult.stderr, /\.\.\.x+"; require\("this-package-does-not-exist"\);/);
4646
assert.match(longLineResult.stderr, / {43}\^{27}/);
4747
assert.match(longLineResult.stderr, /MODULE_NOT_FOUND/);
48+
49+
const variableEntry = tmpdir.resolve('variable-entry.cjs');
50+
writeFileSync(variableEntry, [
51+
'const pkg = "this-package-does-not-exist";',
52+
'require(pkg);',
53+
].join('\n'));
54+
55+
const variableResult = spawnSync(process.execPath, [variableEntry], {
56+
encoding: 'utf8',
57+
});
58+
59+
assert.strictEqual(variableResult.status, 1);
60+
assert.strictEqual(variableResult.signal, null);
61+
assert.strictEqual(variableResult.stdout, '');
62+
assert.ok(variableResult.stderr.includes(`${variableEntry}:2`));
63+
assert.match(variableResult.stderr, /require\(pkg\);/);
64+
assert.match(variableResult.stderr, /^\^{27}$/m);
65+
assert.match(variableResult.stderr, /MODULE_NOT_FOUND/);

0 commit comments

Comments
 (0)