mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 21:19:50 +01:00
8273320f9f
Fixes: https://github.com/nodejs/node/issues/45380 PR-URL: https://github.com/nodejs/node/pull/45698 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
123 lines
4.7 KiB
JavaScript
123 lines
4.7 KiB
JavaScript
// Copyright Joyent, Inc. and other Node contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
// persons to whom the Software is furnished to do so, subject to the
|
|
// following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
|
|
// Changes in environment should be visible to child processes
|
|
if (process.argv[2] === 'you-are-the-child') {
|
|
assert.strictEqual('NODE_PROCESS_ENV_DELETED' in process.env, false);
|
|
assert.strictEqual(process.env.NODE_PROCESS_ENV, '42');
|
|
assert.strictEqual(process.env.hasOwnProperty, 'asdf');
|
|
const has = Object.hasOwn(process.env, 'hasOwnProperty');
|
|
assert.strictEqual(has, true);
|
|
process.exit(0);
|
|
}
|
|
|
|
{
|
|
const spawn = require('child_process').spawn;
|
|
|
|
assert.strictEqual(Object.prototype.hasOwnProperty,
|
|
process.env.hasOwnProperty);
|
|
const has = Object.hasOwn(process.env, 'hasOwnProperty');
|
|
assert.strictEqual(has, false);
|
|
|
|
process.env.hasOwnProperty = 'asdf';
|
|
|
|
process.env.NODE_PROCESS_ENV = 42;
|
|
assert.strictEqual(process.env.NODE_PROCESS_ENV, '42');
|
|
|
|
process.env.NODE_PROCESS_ENV_DELETED = 42;
|
|
assert.strictEqual('NODE_PROCESS_ENV_DELETED' in process.env, true);
|
|
|
|
delete process.env.NODE_PROCESS_ENV_DELETED;
|
|
assert.strictEqual('NODE_PROCESS_ENV_DELETED' in process.env, false);
|
|
|
|
const child = spawn(process.argv[0], [process.argv[1], 'you-are-the-child']);
|
|
child.stdout.on('data', function(data) { console.log(data.toString()); });
|
|
child.stderr.on('data', function(data) { console.log(data.toString()); });
|
|
child.on('exit', function(statusCode) {
|
|
if (statusCode !== 0) {
|
|
process.exit(statusCode); // Failed assertion in child process
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
// Delete should return true except for non-configurable properties
|
|
// https://github.com/nodejs/node/issues/7960
|
|
delete process.env.NON_EXISTING_VARIABLE;
|
|
assert(delete process.env.NON_EXISTING_VARIABLE);
|
|
|
|
// For the moment we are not going to support setting the timezone via the
|
|
// environment variables. The problem is that various V8 platform backends
|
|
// deal with timezone in different ways. The Windows platform backend caches
|
|
// the timezone value while the Linux one hits libc for every query.
|
|
//
|
|
// https://github.com/joyent/node/blob/08782931205bc4f6d28102ebc29fd806e8ccdf1f/deps/v8/src/platform-linux.cc#L339-345
|
|
// https://github.com/joyent/node/blob/08782931205bc4f6d28102ebc29fd806e8ccdf1f/deps/v8/src/platform-win32.cc#L590-596
|
|
//
|
|
// // set the timezone; see tzset(3)
|
|
// process.env.TZ = 'Europe/Amsterdam';
|
|
//
|
|
// // time difference between Greenwich and Amsterdam is +2 hours in the summer
|
|
// date = new Date('Fri, 10 Sep 1982 03:15:00 GMT');
|
|
// assert.strictEqual(3, date.getUTCHours());
|
|
// assert.strictEqual(5, date.getHours());
|
|
|
|
// Environment variables should be case-insensitive on Windows, and
|
|
// case-sensitive on other platforms.
|
|
process.env.TEST = 'test';
|
|
assert.strictEqual(process.env.TEST, 'test');
|
|
|
|
// Check both mixed case and lower case, to avoid any regressions that might
|
|
// simply convert input to lower case.
|
|
if (common.isWindows) {
|
|
assert.strictEqual(process.env.test, 'test');
|
|
assert.strictEqual(process.env.teST, 'test');
|
|
} else {
|
|
assert.strictEqual(process.env.test, undefined);
|
|
assert.strictEqual(process.env.teST, undefined);
|
|
}
|
|
|
|
{
|
|
const keys = Object.keys(process.env);
|
|
assert.ok(keys.length > 0);
|
|
}
|
|
|
|
// https://github.com/nodejs/node/issues/45380
|
|
{
|
|
const env = structuredClone(process.env);
|
|
// deepEqual(), not deepStrictEqual(), because of different prototypes.
|
|
// eslint-disable-next-line no-restricted-properties
|
|
assert.deepEqual(env, process.env);
|
|
}
|
|
|
|
// Setting environment variables on Windows with empty names should not cause
|
|
// an assertion failure.
|
|
// https://github.com/nodejs/node/issues/32920
|
|
{
|
|
process.env[''] = '';
|
|
assert.strictEqual(process.env[''], undefined);
|
|
}
|