• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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