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