dev-sidecar/packages/gui/test/versionTest.mjs

134 lines
4.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import assert from 'node:assert'
const log = console
function parseVersion (version) {
const matched = version.match(/^v?(\d{1,2}\.\d{1,2}\.\d{1,3}(?:\.\d{1,2})?)(.*)$/)
const versionArr = matched[1].split('.')
return {
major: Number.parseInt(versionArr[0]), // 大版本
minor: Number.parseInt(versionArr[1]), // 中版本
patch: Number.parseInt(versionArr[2]), // 小版本
temp: Number.parseInt(versionArr[3]) || 0, // 临时版本
pre: matched[2], // 预发布版本号
}
}
/**
* 比较版本号
*
* @param onlineVersion 线上版本号
* @param currentVersion 当前版本号
* @returns {number} 比较线上版本号是否为更新版本1=是|0=相等|-1=否|-99=出现异常,比较结果未知
*/
function isNewVersion (onlineVersion, currentVersion) {
if (onlineVersion === currentVersion) {
return 0
}
try {
const versionObj = parseVersion(onlineVersion)
const curVersionObj = parseVersion(currentVersion)
// 大版本
if (versionObj.major > curVersionObj.major) {
return 1 // 大版本号更大,为新版本,需要更新
} else if (versionObj.major < curVersionObj.major) {
return -1 // 大版本号更小,为旧版本,无需更新
}
// 中版本
if (versionObj.minor > curVersionObj.minor) {
return 2 // 中版本号更大,为新版本,需要更新
} else if (versionObj.minor < curVersionObj.minor) {
return -2 // 中版本号更小,为旧版本,无需更新
}
// 小版本
if (versionObj.patch > curVersionObj.patch) {
return 3 // 小版本号更大,为新版本,需要更新
} else if (versionObj.patch < curVersionObj.patch) {
return -3 // 小版本号更小,为旧版本,无需更新
}
// 临时版本号
if (versionObj.temp > curVersionObj.temp) {
return 4 // 临时版本号更大,为新版本,需要更新
} else if (versionObj.temp < curVersionObj.temp) {
return -4 // 临时版本号更小,为旧版本,无需更新
}
// 预发布版本号
if (versionObj.pre && curVersionObj.pre) {
// 当两个后缀版本号都存在时,直接比较后缀版本号字符串的大小
if (versionObj.pre > curVersionObj.pre) {
return 51
} else if (versionObj.pre < curVersionObj.pre) {
return -51
}
} else if (!versionObj.pre && curVersionObj.pre) {
// 线上版本号没有后缀版本号,说明为正式版本,为新版本,需要更新
return 52
} else if (versionObj.pre && !curVersionObj.pre) {
return -52
} else {
return -53 // 相同版本,无需更新(一般不会出现,除非例如 `2.0.0` 和 `2.0.0.0` 进行比较)
}
} catch (e) {
log.error(`比对版本失败,当前版本号:${currentVersion},线上版本号:${onlineVersion}, error:`, e)
return -99 // 比对异常
}
}
let ret;
ret = isNewVersion('2.0.0', '1.0.0')
console.log(ret)
assert.strictEqual(ret, 1)
ret = isNewVersion('1.0.0', '2.0.0')
console.log(ret)
assert.strictEqual(ret, -1)
ret = isNewVersion('2.1.0', '2.0.0')
console.log(ret)
assert.strictEqual(ret, 2)
ret = isNewVersion('2.0.0', '2.1.0')
console.log(ret)
assert.strictEqual(ret, -2)
ret = isNewVersion('2.0.1', '2.0.0')
console.log(ret)
assert.strictEqual(ret, 3)
ret = isNewVersion('2.0.0', '2.0.1')
console.log(ret)
assert.strictEqual(ret, -3)
ret = isNewVersion('2.0.0.1', '2.0.0')
console.log(ret)
assert.strictEqual(ret, 4)
ret = isNewVersion('2.0.0', '2.0.0.1')
console.log(ret)
assert.strictEqual(ret, -4)
ret = isNewVersion('2.0.0-RC2', '2.0.0-RC1')
console.log(ret)
assert.strictEqual(ret, 51)
ret = isNewVersion('2.0.0-RC1', '2.0.0-RC2')
console.log(ret)
assert.strictEqual(ret, -51)
ret = isNewVersion('2.0.0', '2.0.0-RC1')
console.log(ret)
assert.strictEqual(ret, 52)
ret = isNewVersion('2.0.0-RC1', '2.0.0')
console.log(ret)
assert.strictEqual(ret, -52)
ret = isNewVersion('2.0.0.0', '2.0.0')
console.log(ret)
assert.strictEqual(ret, -53)
ret = isNewVersion('x', 'v')
console.log(ret)
assert.strictEqual(ret, -99)