Path: blob/main/tests/unit/tools/tinytex.test.ts
12925 views
/*1* tinytex.test.ts2*3* Copyright (C) 2026 Posit Software, PBC4*/56import { unitTest } from "../../test.ts";7import { assert, assertEquals } from "testing/asserts";8import { tinyTexPkgName } from "../../../src/tools/impl/tinytex.ts";9import { getLatestRelease } from "../../../src/tools/github.ts";10import { GitHubRelease } from "../../../src/tools/types.ts";1112// ---- Pure logic tests for tinyTexPkgName ----1314unitTest("tinyTexPkgName - Linux aarch64 with version", async () => {15assertEquals(16tinyTexPkgName("TinyTeX", "v2026.04", { os: "linux", arch: "aarch64" }),17[18"TinyTeX-linux-arm64-v2026.04.tar.xz",19"TinyTeX-arm64-v2026.04.tar.gz",20],21);22});2324unitTest("tinyTexPkgName - Linux x86_64 with version", async () => {25assertEquals(26tinyTexPkgName("TinyTeX", "v2026.04", { os: "linux", arch: "x86_64" }),27[28"TinyTeX-linux-x86_64-v2026.04.tar.xz",29"TinyTeX-v2026.04.tar.gz",30],31);32});3334unitTest("tinyTexPkgName - macOS with version", async () => {35assertEquals(36tinyTexPkgName("TinyTeX", "v2026.04", { os: "darwin", arch: "aarch64" }),37[38"TinyTeX-darwin-v2026.04.tar.xz",39"TinyTeX-v2026.04.tgz",40],41);42});4344unitTest("tinyTexPkgName - Windows with version", async () => {45assertEquals(46tinyTexPkgName("TinyTeX", "v2026.04", { os: "windows", arch: "x86_64" }),47[48"TinyTeX-windows-v2026.04.exe",49"TinyTeX-v2026.04.zip",50],51);52});5354unitTest("tinyTexPkgName - versionless Linux aarch64", async () => {55assertEquals(56tinyTexPkgName("TinyTeX", undefined, { os: "linux", arch: "aarch64" }),57["TinyTeX.tar.gz"],58);59});6061unitTest("tinyTexPkgName - TinyTeX-1 ARM64 Linux", async () => {62assertEquals(63tinyTexPkgName("TinyTeX-1", "v2026.04", {64os: "linux",65arch: "aarch64",66}),67[68"TinyTeX-1-linux-arm64-v2026.04.tar.xz",69"TinyTeX-1-arm64-v2026.04.tar.gz",70],71);72});7374unitTest("tinyTexPkgName - default base", async () => {75assertEquals(76tinyTexPkgName(undefined, "v2026.04", { os: "linux", arch: "x86_64" }),77[78"TinyTeX-linux-x86_64-v2026.04.tar.xz",79"TinyTeX-v2026.04.tar.gz",80],81);82});8384// ---- Asset-existence tests (network, verify against latest release) ----8586const kTinyTexRepo = "rstudio/tinytex-releases";8788let cachedRelease: GitHubRelease | undefined;89async function getRelease() {90if (!cachedRelease) {91cachedRelease = await getLatestRelease(kTinyTexRepo);92}93return cachedRelease;94}9596function assertAssetExists(97candidates: string[],98assetNames: string[],99label: string,100) {101const found = candidates.some((c) => assetNames.includes(c));102assert(103found,104`No matching asset for ${label}. Candidates: ${candidates.join(", ")}. ` +105`Available TinyTeX assets: ${assetNames.filter((a) => a.startsWith("TinyTeX")).join(", ")}`,106);107}108109unitTest(110"tinyTexPkgName - Linux x86_64 candidates match latest release",111async () => {112const release = await getRelease();113const assetNames = release.assets.map((a) => a.name);114const candidates = tinyTexPkgName("TinyTeX", release.tag_name, {115os: "linux",116arch: "x86_64",117});118assertAssetExists(candidates, assetNames, "Linux x86_64");119},120);121122unitTest(123"tinyTexPkgName - Linux aarch64 candidates match latest release",124async () => {125const release = await getRelease();126const assetNames = release.assets.map((a) => a.name);127const candidates = tinyTexPkgName("TinyTeX", release.tag_name, {128os: "linux",129arch: "aarch64",130});131assertAssetExists(candidates, assetNames, "Linux aarch64");132},133);134135unitTest(136"tinyTexPkgName - macOS candidates match latest release",137async () => {138const release = await getRelease();139const assetNames = release.assets.map((a) => a.name);140const candidates = tinyTexPkgName("TinyTeX", release.tag_name, {141os: "darwin",142arch: "aarch64",143});144assertAssetExists(candidates, assetNames, "macOS");145},146);147148unitTest(149"tinyTexPkgName - Windows candidates match latest release",150async () => {151const release = await getRelease();152const assetNames = release.assets.map((a) => a.name);153const candidates = tinyTexPkgName("TinyTeX", release.tag_name, {154os: "windows",155arch: "x86_64",156});157assertAssetExists(candidates, assetNames, "Windows");158},159);160161162