|
22 | 22 | 'use strict'; |
23 | 23 | const common = require('../common'); |
24 | 24 | const assert = require('assert'); |
| 25 | +const { execSync } = require('child_process'); |
25 | 26 |
|
26 | | -const error_desc = { |
| 27 | +const errorMessagesByPlatform = { |
27 | 28 | win32: ['%1 is not a valid Win32 application'], |
28 | 29 | linux: ['file too short', 'Exec format error'], |
29 | 30 | sunos: ['unknown file type', 'not an ELF file'], |
30 | 31 | darwin: ['file too short'] |
31 | 32 | }; |
32 | | -const dlerror_msg = error_desc[process.platform]; |
| 33 | +// If we don't know a priori what the error would be, we accept anything. |
| 34 | +const errorMessages = errorMessagesByPlatform[process.platform] || ['']; |
| 35 | + |
| 36 | +// On Windows, error messages are MUI dependent |
| 37 | +// Ref: https://github.com/nodejs/node/issues/13376 |
| 38 | +let localeOk = true; |
| 39 | +if (common.isWindows) { |
| 40 | + const powerShellFindMUI = |
| 41 | + 'powershell -NoProfile -ExecutionPolicy Unrestricted -c ' + |
| 42 | + '"(Get-UICulture).TwoLetterISOLanguageName"'; |
| 43 | + try { |
| 44 | + // If MUI != 'en' we'll ignore the content of the message |
| 45 | + localeOk = execSync(powerShellFindMUI).toString('utf8').trim() === 'en'; |
| 46 | + } catch (_) { |
| 47 | + // It's only a best effort try to find the MUI |
| 48 | + } |
| 49 | +} |
33 | 50 |
|
34 | 51 | assert.throws( |
35 | 52 | () => { require('../fixtures/module-loading-error.node'); }, |
36 | 53 | (e) => { |
37 | | - if (dlerror_msg && !dlerror_msg.some((msg) => e.message.includes(msg))) |
38 | | - return false; |
39 | | - if (e.name !== 'Error') |
| 54 | + if (localeOk && !errorMessages.some((msg) => e.message.includes(msg))) |
40 | 55 | return false; |
41 | | - return true; |
| 56 | + return e.name === 'Error'; |
42 | 57 | } |
43 | 58 | ); |
44 | 59 |
|
|
0 commit comments