import assert from 'node:assert/strict'; import { test } from 'node:test'; import { parseVersion } from './version.mjs'; test('release tag', () => { assert.deepEqual(parseVersion('v0.1.0'), { version: '0.1.0', versionCode: 10_099, prerelease: false }); assert.deepEqual(parseVersion('v1.2.3'), { version: '1.2.3', versionCode: 1_020_399, prerelease: false }); }); test('release candidate', () => { assert.deepEqual(parseVersion('v1.2.0-rc.2'), { version: '1.2.0-rc.2', versionCode: 1_020_002, prerelease: true }); }); test('version codes grow monotonically', () => { const order = ['v0.9.9', 'v1.0.0-rc.1', 'v1.0.0-rc.2', 'v1.0.0', 'v1.0.1', 'v1.1.0', 'v2.0.0']; const codes = order.map((t) => parseVersion(t).versionCode); assert.deepEqual([...codes].sort((a, b) => a - b), codes); }); test('rejects malformed tags', () => { for (const tag of ['1.2', 'v1.2.3-beta', 'v1.100.0', 'v1.2.3-rc.0', 'main']) { assert.throws(() => parseVersion(tag), undefined, tag); } });