• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import { mustCall } from '../common/index.mjs';
2import assert from 'assert';
3import fixtures from '../common/fixtures.js';
4import { spawn } from 'child_process';
5
6const Export1 = fixtures.path('/es-modules/es-note-unexpected-export-1.cjs');
7const Export2 = fixtures.path('/es-modules/es-note-unexpected-export-2.cjs');
8const Import1 = fixtures.path('/es-modules/es-note-unexpected-import-1.cjs');
9const Import2 = fixtures.path('/es-modules/es-note-promiserej-import-2.cjs');
10const Import3 = fixtures.path('/es-modules/es-note-unexpected-import-3.cjs');
11const Import4 = fixtures.path('/es-modules/es-note-unexpected-import-4.cjs');
12const Import5 = fixtures.path('/es-modules/es-note-unexpected-import-5.cjs');
13
14// Expect note to be included in the error output
15const expectedNote = 'To load an ES module, ' +
16'set "type": "module" in the package.json ' +
17'or use the .mjs extension.';
18
19const expectedCode = 1;
20
21const pExport1 = spawn(process.execPath, [Export1]);
22let pExport1Stderr = '';
23pExport1.stderr.setEncoding('utf8');
24pExport1.stderr.on('data', (data) => {
25  pExport1Stderr += data;
26});
27pExport1.on('close', mustCall((code) => {
28  assert.strictEqual(code, expectedCode);
29  assert.ok(pExport1Stderr.includes(expectedNote),
30            `${expectedNote} not found in ${pExport1Stderr}`);
31}));
32
33
34const pExport2 = spawn(process.execPath, [Export2]);
35let pExport2Stderr = '';
36pExport2.stderr.setEncoding('utf8');
37pExport2.stderr.on('data', (data) => {
38  pExport2Stderr += data;
39});
40pExport2.on('close', mustCall((code) => {
41  assert.strictEqual(code, expectedCode);
42  assert.ok(pExport2Stderr.includes(expectedNote),
43            `${expectedNote} not found in ${pExport2Stderr}`);
44}));
45
46const pImport1 = spawn(process.execPath, [Import1]);
47let pImport1Stderr = '';
48pImport1.stderr.setEncoding('utf8');
49pImport1.stderr.on('data', (data) => {
50  pImport1Stderr += data;
51});
52pImport1.on('close', mustCall((code) => {
53  assert.strictEqual(code, expectedCode);
54  assert.ok(pImport1Stderr.includes(expectedNote),
55            `${expectedNote} not found in ${pExport1Stderr}`);
56}));
57
58// Note this test shouldn't include the note
59const pImport2 = spawn(process.execPath, [Import2]);
60let pImport2Stderr = '';
61pImport2.stderr.setEncoding('utf8');
62pImport2.stderr.on('data', (data) => {
63  pImport2Stderr += data;
64});
65pImport2.on('close', mustCall((code) => {
66  // As this exits normally we expect 0
67  assert.strictEqual(code, 0);
68  assert.ok(!pImport2Stderr.includes(expectedNote),
69            `${expectedNote} must not be included in ${pImport2Stderr}`);
70}));
71
72const pImport3 = spawn(process.execPath, [Import3]);
73let pImport3Stderr = '';
74pImport3.stderr.setEncoding('utf8');
75pImport3.stderr.on('data', (data) => {
76  pImport3Stderr += data;
77});
78pImport3.on('close', mustCall((code) => {
79  assert.strictEqual(code, expectedCode);
80  assert.ok(pImport3Stderr.includes(expectedNote),
81            `${expectedNote} not found in ${pImport3Stderr}`);
82}));
83
84
85const pImport4 = spawn(process.execPath, [Import4]);
86let pImport4Stderr = '';
87pImport4.stderr.setEncoding('utf8');
88pImport4.stderr.on('data', (data) => {
89  pImport4Stderr += data;
90});
91pImport4.on('close', mustCall((code) => {
92  assert.strictEqual(code, expectedCode);
93  assert.ok(pImport4Stderr.includes(expectedNote),
94            `${expectedNote} not found in ${pImport4Stderr}`);
95}));
96
97// Must exit with zero and show note
98const pImport5 = spawn(process.execPath, [Import5]);
99let pImport5Stderr = '';
100pImport5.stderr.setEncoding('utf8');
101pImport5.stderr.on('data', (data) => {
102  pImport5Stderr += data;
103});
104pImport5.on('close', mustCall((code) => {
105  assert.strictEqual(code, 0);
106  assert.ok(!pImport5Stderr.includes(expectedNote),
107            `${expectedNote} must not be included in ${pImport5Stderr}`);
108}));
109