38 lines
1.5 KiB
JavaScript
38 lines
1.5 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { mkdtempSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
import { test } from "node:test";
|
|
import { STAMPED_PACKAGE_PATHS, normalizeStampVersion, stampVersion } from "./stamp-version.mjs";
|
|
|
|
function makeFakeRoot() {
|
|
const root = mkdtempSync(join(tmpdir(), "stamp-version-"));
|
|
for (const relativePath of STAMPED_PACKAGE_PATHS) {
|
|
const packagePath = join(root, relativePath);
|
|
mkdirSync(join(packagePath, ".."), { recursive: true });
|
|
writeFileSync(packagePath, `${JSON.stringify({ name: relativePath, version: "0.0.0-dev" }, null, 2)}\n`);
|
|
}
|
|
return root;
|
|
}
|
|
|
|
test("stamps a stable version into all three package.json files", () => {
|
|
const root = makeFakeRoot();
|
|
const result = stampVersion("0.19.0", root);
|
|
assert.equal(result.version, "0.19.0");
|
|
for (const relativePath of STAMPED_PACKAGE_PATHS) {
|
|
const json = JSON.parse(readFileSync(join(root, relativePath), "utf8"));
|
|
assert.equal(json.version, "0.19.0");
|
|
}
|
|
});
|
|
|
|
test("accepts v-prefixed tags and alpha prerelease versions", () => {
|
|
assert.equal(normalizeStampVersion("v0.19.0"), "0.19.0");
|
|
assert.equal(normalizeStampVersion("0.18.24-alpha.412+abc1234"), "0.18.24-alpha.412+abc1234");
|
|
});
|
|
|
|
test("rejects garbage versions", () => {
|
|
for (const bad of ["", "dev", "v1.2", "0.19", "0..1"]) {
|
|
assert.throws(() => normalizeStampVersion(bad), /Invalid version to stamp/, `expected ${JSON.stringify(bad)} to throw`);
|
|
}
|
|
});
|