1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4 5const expected_keys = ['ares', 'brotli', 'modules', 'node', 6 'uv', 'v8', 'zlib', 'nghttp2', 'napi', 7 'http_parser', 'llhttp']; 8 9if (common.hasCrypto) { 10 expected_keys.push('openssl'); 11} 12 13if (common.hasIntl) { 14 expected_keys.push('icu'); 15 expected_keys.push('cldr'); 16 expected_keys.push('tz'); 17 expected_keys.push('unicode'); 18} 19 20expected_keys.sort(); 21const actual_keys = Object.keys(process.versions).sort(); 22 23assert.deepStrictEqual(actual_keys, expected_keys); 24 25const commonTemplate = /^\d+\.\d+\.\d+(?:-.*)?$/; 26 27assert(commonTemplate.test(process.versions.ares)); 28assert(commonTemplate.test(process.versions.brotli)); 29assert(commonTemplate.test(process.versions.llhttp)); 30assert(commonTemplate.test(process.versions.http_parser)); 31assert(commonTemplate.test(process.versions.node)); 32assert(commonTemplate.test(process.versions.uv)); 33assert(commonTemplate.test(process.versions.zlib)); 34 35assert(/^\d+\.\d+\.\d+(?:\.\d+)?-node\.\d+(?: \(candidate\))?$/ 36 .test(process.versions.v8)); 37assert(/^\d+$/.test(process.versions.modules)); 38 39if (common.hasCrypto) { 40 assert(/^\d+\.\d+\.\d+[a-z]?(-fips)?$/.test(process.versions.openssl)); 41} 42 43for (let i = 0; i < expected_keys.length; i++) { 44 const key = expected_keys[i]; 45 const descriptor = Object.getOwnPropertyDescriptor(process.versions, key); 46 assert.strictEqual(descriptor.writable, false); 47} 48 49assert.strictEqual(process.config.variables.napi_build_version, 50 process.versions.napi); 51