|
1 | 1 | import allNodeVersions from 'all-node-versions' |
2 | 2 | import test from 'ava' |
3 | | -import { major as getMajor } from 'semver' |
| 3 | +import { major as getMajor, gt as gtVersion } from 'semver' |
4 | 4 | import { each } from 'test-each' |
5 | 5 |
|
6 | 6 | import nodeVersionAlias from '../src/main.js' |
7 | 7 |
|
| 8 | +import { LATEST_BORON } from './helpers/versions.js' |
| 9 | + |
| 10 | +const getLatestFromMajor = async function (version) { |
| 11 | + const { versions } = await allNodeVersions() |
| 12 | + const majorVersion = getMajor(version) |
| 13 | + return versions.find((versionA) => getMajor(versionA) === majorVersion) |
| 14 | +} |
| 15 | + |
8 | 16 | each(['lts', 'lts/*', 'lts/-0'], ({ title }, alias) => { |
9 | 17 | test(`Can target latest LTS | ${title}`, async (t) => { |
10 | | - const [version, { majors }] = await Promise.all([ |
11 | | - nodeVersionAlias(alias), |
12 | | - allNodeVersions(), |
13 | | - ]) |
14 | | - const majorVersion = getMajor(version) |
15 | | - // eslint-disable-next-line max-nested-callbacks |
16 | | - const latestLts = majors.find(({ major }) => major === majorVersion).latest |
| 18 | + const version = await nodeVersionAlias(alias) |
| 19 | + const latestLts = await getLatestFromMajor(version) |
17 | 20 | t.is(version, latestLts) |
18 | 21 | }) |
19 | 22 | }) |
20 | 23 |
|
| 24 | +test('Can use "lts/-number"', async (t) => { |
| 25 | + const [ltsOne, ltsTwo] = await Promise.all([ |
| 26 | + nodeVersionAlias('lts/-1'), |
| 27 | + nodeVersionAlias('lts/-2'), |
| 28 | + ]) |
| 29 | + |
| 30 | + const latestLtsOne = await getLatestFromMajor(ltsOne) |
| 31 | + t.is(ltsOne, latestLtsOne) |
| 32 | + const latestLtsTwo = await getLatestFromMajor(ltsTwo) |
| 33 | + t.is(ltsTwo, latestLtsTwo) |
| 34 | + |
| 35 | + t.true(gtVersion(ltsOne, ltsTwo)) |
| 36 | +}) |
| 37 | + |
| 38 | +test('Can use "lts/name"', async (t) => { |
| 39 | + const version = await nodeVersionAlias('lts/boron') |
| 40 | + t.is(version, LATEST_BORON) |
| 41 | +}) |
| 42 | + |
21 | 43 | // This test requires non-implemented features: |
22 | 44 | // - per-mirror `index.js` caching |
23 | 45 | // - v8 canary mirror support |
|
0 commit comments