| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| |
| const expected_keys = [ |
| 'ares', |
| 'brotli', |
| 'modules', |
| 'node', |
| 'uv', |
| 'v8', |
| 'zlib', |
| 'nghttp2', |
| 'napi', |
| 'llhttp', |
| ]; |
| |
| if (common.hasCrypto) { |
| expected_keys.push('openssl'); |
| } |
| |
| if (common.hasQuic) { |
| expected_keys.push('ngtcp2'); |
| expected_keys.push('nghttp3'); |
| } |
| |
| if (common.hasIntl) { |
| expected_keys.push('icu'); |
| expected_keys.push('cldr'); |
| expected_keys.push('tz'); |
| expected_keys.push('unicode'); |
| } |
| |
| expected_keys.sort(); |
| const actual_keys = Object.keys(process.versions).sort(); |
| |
| assert.deepStrictEqual(actual_keys, expected_keys); |
| |
| const commonTemplate = /^\d+\.\d+\.\d+(?:-.*)?$/; |
| |
| assert.match(process.versions.ares, commonTemplate); |
| assert.match(process.versions.brotli, commonTemplate); |
| assert.match(process.versions.llhttp, commonTemplate); |
| assert.match(process.versions.node, commonTemplate); |
| assert.match(process.versions.uv, commonTemplate); |
| assert.match(process.versions.zlib, commonTemplate); |
| |
| assert.match( |
| process.versions.v8, |
| /^\d+\.\d+\.\d+(?:\.\d+)?-node\.\d+(?: \(candidate\))?$/ |
| ); |
| assert.match(process.versions.modules, /^\d+$/); |
| |
| if (common.hasCrypto) { |
| const versionRegex = common.hasOpenSSL3 ? |
| // The following also matches a development version of OpenSSL 3.x which |
| // can be in the format '3.0.0-alpha4-dev'. This can be handy when building |
| // and linking against the main development branch of OpenSSL. |
| /^\d+\.\d+\.\d+(?:[-+][a-z0-9]+)*$/ : |
| /^\d+\.\d+\.\d+[a-z]?(\+quic)?(-fips)?$/; |
| assert.match(process.versions.openssl, versionRegex); |
| } |
| |
| for (let i = 0; i < expected_keys.length; i++) { |
| const key = expected_keys[i]; |
| const descriptor = Object.getOwnPropertyDescriptor(process.versions, key); |
| assert.strictEqual(descriptor.writable, false); |
| } |
| |
| assert.strictEqual(process.config.variables.napi_build_version, |
| process.versions.napi); |