forked from nodejs/node
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest-process-release.js
More file actions
125 lines (114 loc) · 3.6 KB
/
Copy pathtest-process-release.js
File metadata and controls
125 lines (114 loc) · 3.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
'use strict';
require('../common');
const assert = require('assert');
const versionParts = process.versions.node.split('.');
assert.strictEqual(process.release.name, 'node');
// It's expected that future LTS release lines will have additional
// branches in here
if (versionParts[0] === '4' && versionParts[1] >= 2) {
assert.strictEqual(process.release.lts, 'Argon');
} else if (versionParts[0] === '6' && versionParts[1] >= 9) {
assert.strictEqual(process.release.lts, 'Boron');
} else if (versionParts[0] === '8' && versionParts[1] >= 9) {
assert.strictEqual(process.release.lts, 'Carbon');
} else {
assert.strictEqual(process.release.lts, undefined);
}
const {
majorVersion: major,
minorVersion: minor,
patchVersion: patch,
prereleaseTag: tag,
compareVersion,
} = process.release;
[
[major, minor, patch, tag, 0],
[major + 1, minor, patch, tag, 1],
[major - 1, minor, patch, tag, -1],
[major, minor + 1, patch, tag, 1],
[major, minor - 1, patch, tag, -1],
[major, minor, patch + 1, tag, 1],
[major, minor, patch - 1, tag, -1]
].forEach(([major, minor, patch, tag, expected]) => {
// Skip invalid entries.
if (major < 0 || minor < 0 || patch < 0)
return;
assert.strictEqual(compareVersion(major, minor, patch, tag), expected);
const semverStr = `${major}.${minor}.${patch}${tag ? `-${tag}` : ''}`;
assert.strictEqual(compareVersion(semverStr), expected);
});
if (tag) {
assert.strictEqual(compareVersion(major, minor, patch), 1);
assert.strictEqual(compareVersion(`${major}.${minor}.${patch}`), 1);
assert.strictEqual(compareVersion(major, minor, patch, `${tag}-fake`), 1);
assert.strictEqual(
compareVersion(major, minor, patch, `${tag.slice(0, -1)}`), -1);
} else {
assert.strictEqual(compareVersion(major, minor, patch, 'fake-tag'), 1);
assert.strictEqual(compareVersion(`${major}.${minor}.${patch}-fake-tag`), 1);
assert.strictEqual(compareVersion(major, minor, patch), 0);
}
[
[['1', 0, 0, ''], 'major', 'string'],
[[0, '1', 0, ''], 'minor', 'string'],
[[0, 0, '1', ''], 'patch', 'string'],
[[0, 0, 0, 1], 'tag', 'number'],
[[0, 0, 0, null], 'tag', 'object'],
].forEach(([args, argName, receivedType]) => {
const expectedType = argName === 'tag' ? 'string' : 'number';
assert.throws(() => {
compareVersion(...args);
}, {
code: 'ERR_INVALID_ARG_TYPE',
name: 'TypeError [ERR_INVALID_ARG_TYPE]',
message: `The "${argName}" argument must be of type ${expectedType}. ` +
`Received type ${receivedType}`
});
});
[
[-1, 0, 0, 'major'],
[0, -1, 0, 'minor'],
[0, 0, -1, 'patch'],
].forEach(([major, minor, patch, expected]) => {
assert.throws(() => {
compareVersion(major, minor, patch);
}, {
code: 'ERR_OUT_OF_RANGE',
name: 'RangeError [ERR_OUT_OF_RANGE]',
message: `The value of "${expected}" is out of range. ` +
'It must be >= 0. Received -1'
});
});
[
[1.5, 1, 1, 'major'],
[1, 1.5, 1, 'minor'],
[1, 1, 1.5, 'patch'],
].forEach(([major, minor, patch, expected]) => {
assert.throws(() => {
compareVersion(major, minor, patch);
}, {
code: 'ERR_OUT_OF_RANGE',
name: 'RangeError [ERR_OUT_OF_RANGE]',
message: `The value of "${expected}" is out of range. ` +
'It must be an integer. Received 1.5'
});
});
[
'1a.0.0',
'1.0a.0',
'1.0.0a',
'1.0.0.0',
'01.0.0',
'1.01.0',
'1.0',
'1..0',
].forEach((version) => {
assert.throws(() => {
compareVersion(version);
}, {
code: 'ERR_INVALID_ARG_VALUE',
name: 'TypeError [ERR_INVALID_ARG_VALUE]',
message: "The argument 'version' is not a valid Semantic Version. " +
`Received '${version}'`
});
});