|
1 |
| -'use strict'; |
2 |
| - |
3 | 1 | // Flags: --expose-internals
|
4 | 2 |
|
5 |
| -require('../common'); |
| 3 | +'use strict'; |
| 4 | + |
| 5 | +const common = require('../common'); |
6 | 6 | const assert = require('assert');
|
7 | 7 | const { getNavigatorPlatform } = require('internal/navigator');
|
| 8 | +const { execFile } = require('child_process'); |
8 | 9 |
|
9 | 10 | const is = {
|
10 | 11 | number: (value, key) => {
|
@@ -74,3 +75,48 @@ assert.strictEqual(getNavigatorPlatform({ arch: 'ia32', platform: 'sunos' }), 'S
|
74 | 75 | assert.strictEqual(getNavigatorPlatform({ arch: 'x64', platform: 'sunos' }), 'SunOS x64');
|
75 | 76 | assert.strictEqual(getNavigatorPlatform({ arch: 'ppc', platform: 'aix' }), 'AIX');
|
76 | 77 | assert.strictEqual(getNavigatorPlatform({ arch: 'x64', platform: 'reactos' }), 'Reactos x64');
|
| 78 | + |
| 79 | +assert.strictEqual(typeof navigator.language, 'string'); |
| 80 | +assert.strictEqual(navigator.language.length !== 0, true); |
| 81 | + |
| 82 | +assert.ok(Array.isArray(navigator.languages)); |
| 83 | +assert.strictEqual(navigator.languages.length, 1); |
| 84 | +assert.strictEqual(typeof navigator.languages[0], 'string'); |
| 85 | +assert.strictEqual(navigator.languages[0].length !== 0, true); |
| 86 | + |
| 87 | +assert.throws(() => { |
| 88 | + navigator.languages[0] = 'foo'; |
| 89 | +}, new TypeError("Cannot assign to read only property '0' of object '[object Array]'")); |
| 90 | +assert.notStrictEqual(navigator.languages[0], 'foo'); |
| 91 | +assert.strictEqual(typeof navigator.languages[0] === 'string', true); |
| 92 | +assert.strictEqual(navigator.languages[0].length !== 0, true); |
| 93 | + |
| 94 | +if (common.hasIntl && common.isWindows === false) { |
| 95 | + const testLocale = navigator.language === 'de-DE' ? |
| 96 | + 'en-US' : |
| 97 | + 'de-DE'; |
| 98 | + { |
| 99 | + const env = { ...process.env, LC_ALL: testLocale }; |
| 100 | + execFile( |
| 101 | + process.execPath, |
| 102 | + ['--print', `"process.exit(navigator.language === '${testLocale}' ? 0 : 1)"`], |
| 103 | + { env }, |
| 104 | + common.mustSucceed() |
| 105 | + ); |
| 106 | + } |
| 107 | + |
| 108 | + { |
| 109 | + const env = { ...process.env, LC_ALL: testLocale }; |
| 110 | + execFile( |
| 111 | + process.execPath, |
| 112 | + ['--print', `"process.exit(navigator.languages[0] === '${testLocale}' ? 0 : 1)"`], |
| 113 | + { env }, |
| 114 | + common.mustSucceed() |
| 115 | + ); |
| 116 | + } |
| 117 | +} |
| 118 | + |
| 119 | +Object.defineProperty(navigator, 'language', { value: 'for-testing' }); |
| 120 | +assert.strictEqual(navigator.language, 'for-testing'); |
| 121 | +assert.strictEqual(navigator.languages.length, 1); |
| 122 | +assert.strictEqual(navigator.languages[0] !== 'for-testing', true); |
0 commit comments