test: add fabric tests

This commit is contained in:
HerozDotExe 2026-03-22 19:41:48 +01:00
parent eb380f9403
commit 7e4a9ad055
8 changed files with 297 additions and 9 deletions

View file

@ -47,10 +47,12 @@ const tempFolder = import.meta.dirname
if (await fExists(path.join(tempFolder, "vanilla"))) { await fs.rm(path.join(tempFolder, "vanilla"), { recursive: true }) }
if (await fExists(path.join(tempFolder, "modloaders/forge"))) { await fs.rm(path.join(tempFolder, "modloaders/forge"), { recursive: true }) }
if (await fExists(path.join(tempFolder, "modloaders/neoforge"))) { await fs.rm(path.join(tempFolder, "modloaders/neoforge"), { recursive: true }) }
if (await fExists(path.join(tempFolder, "modloaders/fabric"))) { await fs.rm(path.join(tempFolder, "modloaders/fabric"), { recursive: true }) }
await fs.mkdir(path.join(tempFolder, "vanilla"))
await fs.mkdir(path.join(tempFolder, "modloaders/forge"))
await fs.mkdir(path.join(tempFolder, "modloaders/neoforge"))
await fs.mkdir(path.join(tempFolder, "vanilla"), {recursive: true})
await fs.mkdir(path.join(tempFolder, "modloaders/forge"), {recursive: true})
await fs.mkdir(path.join(tempFolder, "modloaders/neoforge"), {recursive: true})
await fs.mkdir(path.join(tempFolder, "modloaders/fabric"), {recursive: true})
// Forge
{
@ -67,10 +69,10 @@ await fs.mkdir(path.join(tempFolder, "modloaders/neoforge"))
if (!await fExists(path.join(tempFolder, `modloaders/forge/forge-${version}-${forgeVersion}.test.ts`))) {
let result = ""
if (java) {
const template = await fs.readFile(path.join(tempFolder, "forge-java.test.ts.template"), { encoding: "utf-8" })
const template = await fs.readFile(path.join(tempFolder, "modloader-java.test.ts.template"), { encoding: "utf-8" })
result = template.replaceAll("${version}", version).replaceAll("${modloader}", "forge").replaceAll("${modloader_version}", forgeVersion).replaceAll("${java}", await getJava(version))
} else {
const template = await fs.readFile(path.join(tempFolder, "forge.test.ts.template"), { encoding: "utf-8" })
const template = await fs.readFile(path.join(tempFolder, "modloader.test.ts.template"), { encoding: "utf-8" })
result = template.replaceAll("${version}", version).replaceAll("${modloader}", "forge").replaceAll("${modloader_version}", forgeVersion)
}
await fs.writeFile(path.join(tempFolder, `modloaders/forge/forge-${version}-${forgeVersion}.test.ts`), result)
@ -99,10 +101,10 @@ await fs.mkdir(path.join(tempFolder, "modloaders/neoforge"))
if (!await fExists(path.join(tempFolder, `modloaders/neoforge/neoforge-${mcVersion}-${neoForgeVersion}.test.ts`))) {
let result = ""
if (java) {
const template = await fs.readFile(path.join(tempFolder, "forge-java.test.ts.template"), { encoding: "utf-8" })
const template = await fs.readFile(path.join(tempFolder, "modloader-java.test.ts.template"), { encoding: "utf-8" })
result = template.replaceAll("${version}", mcVersion).replaceAll("${modloader}", "neoforge").replaceAll("${modloader_version}", neoForgeVersion).replaceAll("${java}", await getJava(mcVersion))
} else {
const template = await fs.readFile(path.join(tempFolder, "forge.test.ts.template"), { encoding: "utf-8" })
const template = await fs.readFile(path.join(tempFolder, "modloader.test.ts.template"), { encoding: "utf-8" })
result = template.replaceAll("${version}", mcVersion).replaceAll("${modloader}", "neoforge").replaceAll("${modloader_version}", neoForgeVersion)
}
await fs.writeFile(path.join(tempFolder, `modloaders/neoforge/neoforge-${mcVersion}-${neoForgeVersion}.test.ts`), result)
@ -111,6 +113,32 @@ await fs.mkdir(path.join(tempFolder, "modloaders/neoforge"))
}
}
// Fabric
{
let mcVersions = (await (await fetch("https://meta.fabricmc.net/v2/versions/game")).json()).filter(v => {
return importantVersions.includes(v.version)
}).map(v => v.version)
for (const mcVersion of mcVersions) {
const loaderVersions = (await (await fetch(`https://meta.fabricmc.net/v2/versions/loader/${mcVersion}`)).json())
const fabricVersion = loaderVersions.find(v => v.loader.stable)
if (fabricVersion) {
if (!await fExists(path.join(tempFolder, `modloaders/fabric/fabric-${mcVersion}-${fabricVersion.loader.version}.test.ts`))) {
let result = ""
if (java) {
const template = await fs.readFile(path.join(tempFolder, "modloader-java.test.ts.template"), { encoding: "utf-8" })
result = template.replaceAll("${version}", mcVersion).replaceAll("${modloader}", "fabric").replaceAll("${modloader_version}", fabricVersion.loader.version).replaceAll("${java}", await getJava(mcVersion))
} else {
const template = await fs.readFile(path.join(tempFolder, "modloader.test.ts.template"), { encoding: "utf-8" })
result = template.replaceAll("${version}", mcVersion).replaceAll("${modloader}", "fabric").replaceAll("${modloader_version}", fabricVersion.loader.version)
}
await fs.writeFile(path.join(tempFolder, `modloaders/fabric/fabric-${mcVersion}-${fabricVersion.loader.version}.test.ts`), result)
console.log(`Done fabric ${mcVersion}`)
}
}
}
}
// Vanilla
{
vanillaVersions.filter(v => importantVersions.includes(v.id)).forEach(async v => {

View file

@ -15,7 +15,7 @@ test("launch game", { timeout: 0, tags: ["full", "forge"] }, async () => {
const instance = new Instance({
version: "${version}",
auth: offlineAuth("player"),
paths: { root: gameRoot, instance: path.join(gameRoot, "instances", "${version}") },
paths: { root: gameRoot, instance: path.join(gameRoot, "instances", "${modloader}-${version}-${modloader_version}") },
javaExecutable: "${java}",
modloader: {
name: "${modloader}",

View file

@ -15,7 +15,7 @@ test("launch game", { timeout: 0, tags: ["full", "vanilla"] }, async () => {
const instance = new Instance({
version: "${version}",
auth: offlineAuth("player"),
paths: { root: gameRoot, instance: path.join(gameRoot, "instances", "${version}") },
paths: { root: gameRoot, instance: path.join(gameRoot, "instances", "${modloader}-${version}-${modloader_version}") },
javaExecutable: java,
modloader: {
name: "${modloader}",

View file

@ -0,0 +1,52 @@
import { test } from "vitest";
import { Instance, offlineAuth, RuntimeManager, getJavaComponent } from "../../../dist/index.js";
import path from "path";
import fs from "fs/promises";
const gameRoot = path.join(import.meta.dirname, "..", "..", "temp");
// await fs.rm(gameRoot, { recursive: true, force: true });
// await fs.mkdir(gameRoot, { recursive: true });
test("launch game", { timeout: 0, tags: ["full", "forge"] }, async () => {
const javaManager = new RuntimeManager(path.join(gameRoot, "java"));
javaManager.on("progress", console.log)
// const java = await javaManager.use(await getJavaComponent("1.16.5"))
const instance = new Instance({
version: "1.16.5",
auth: offlineAuth("player"),
paths: { root: gameRoot, instance: path.join(gameRoot, "instances", "fabric-1.16.5-0.18.4") },
javaExecutable: "/nix/store/xsm91nhw7b3xld8db6m9yaq4i4dqhc99-openjdk-8u472-b08-jre/bin/java",
modloader: {
name: "fabric",
version: "0.18.4"
}
});
instance.on("progress", console.log);
instance.on("log", (step, msg) => {
console.log(`[${step}] ${msg}`)
})
await instance.install();
const p = await instance.launch();
p.stdout.on("data", (d: Buffer) => {
console.log(d.toString());
});
p.stderr.on("data", (d: Buffer) => {
console.log(d.toString());
});
await new Promise<void>((res) => {
p.on("error", (d: Buffer) => {
console.log(d.toString());
res();
});
p.on("close", () => {
console.log("closed");
res();
});
});
});

View file

@ -0,0 +1,52 @@
import { test } from "vitest";
import { Instance, offlineAuth, RuntimeManager, getJavaComponent } from "../../../dist/index.js";
import path from "path";
import fs from "fs/promises";
const gameRoot = path.join(import.meta.dirname, "..", "..", "temp");
// await fs.rm(gameRoot, { recursive: true, force: true });
// await fs.mkdir(gameRoot, { recursive: true });
test("launch game", { timeout: 0, tags: ["full", "forge"] }, async () => {
const javaManager = new RuntimeManager(path.join(gameRoot, "java"));
javaManager.on("progress", console.log)
// const java = await javaManager.use(await getJavaComponent("1.18.2"))
const instance = new Instance({
version: "1.18.2",
auth: offlineAuth("player"),
paths: { root: gameRoot, instance: path.join(gameRoot, "instances", "fabric-1.18.2-0.18.4") },
javaExecutable: "/nix/store/rhw336hj0iwv7s3rmcqj5zqpsrw6z1z2-openjdk-21.0.9+10/bin/java",
modloader: {
name: "fabric",
version: "0.18.4"
}
});
instance.on("progress", console.log);
instance.on("log", (step, msg) => {
console.log(`[${step}] ${msg}`)
})
await instance.install();
const p = await instance.launch();
p.stdout.on("data", (d: Buffer) => {
console.log(d.toString());
});
p.stderr.on("data", (d: Buffer) => {
console.log(d.toString());
});
await new Promise<void>((res) => {
p.on("error", (d: Buffer) => {
console.log(d.toString());
res();
});
p.on("close", () => {
console.log("closed");
res();
});
});
});

View file

@ -0,0 +1,52 @@
import { test } from "vitest";
import { Instance, offlineAuth, RuntimeManager, getJavaComponent } from "../../../dist/index.js";
import path from "path";
import fs from "fs/promises";
const gameRoot = path.join(import.meta.dirname, "..", "..", "temp");
// await fs.rm(gameRoot, { recursive: true, force: true });
// await fs.mkdir(gameRoot, { recursive: true });
test("launch game", { timeout: 0, tags: ["full", "forge"] }, async () => {
const javaManager = new RuntimeManager(path.join(gameRoot, "java"));
javaManager.on("progress", console.log)
// const java = await javaManager.use(await getJavaComponent("1.20.1"))
const instance = new Instance({
version: "1.20.1",
auth: offlineAuth("player"),
paths: { root: gameRoot, instance: path.join(gameRoot, "instances", "fabric-1.20.1-0.18.4") },
javaExecutable: "/nix/store/rhw336hj0iwv7s3rmcqj5zqpsrw6z1z2-openjdk-21.0.9+10/bin/java",
modloader: {
name: "fabric",
version: "0.18.4"
}
});
instance.on("progress", console.log);
instance.on("log", (step, msg) => {
console.log(`[${step}] ${msg}`)
})
await instance.install();
const p = await instance.launch();
p.stdout.on("data", (d: Buffer) => {
console.log(d.toString());
});
p.stderr.on("data", (d: Buffer) => {
console.log(d.toString());
});
await new Promise<void>((res) => {
p.on("error", (d: Buffer) => {
console.log(d.toString());
res();
});
p.on("close", () => {
console.log("closed");
res();
});
});
});

View file

@ -0,0 +1,52 @@
import { test } from "vitest";
import { Instance, offlineAuth, RuntimeManager, getJavaComponent } from "../../../dist/index.js";
import path from "path";
import fs from "fs/promises";
const gameRoot = path.join(import.meta.dirname, "..", "..", "temp");
// await fs.rm(gameRoot, { recursive: true, force: true });
// await fs.mkdir(gameRoot, { recursive: true });
test("launch game", { timeout: 0, tags: ["full", "forge"] }, async () => {
const javaManager = new RuntimeManager(path.join(gameRoot, "java"));
javaManager.on("progress", console.log)
// const java = await javaManager.use(await getJavaComponent("1.21.1"))
const instance = new Instance({
version: "1.21.1",
auth: offlineAuth("player"),
paths: { root: gameRoot, instance: path.join(gameRoot, "instances", "fabric-1.21.1-0.18.4") },
javaExecutable: "/nix/store/rhw336hj0iwv7s3rmcqj5zqpsrw6z1z2-openjdk-21.0.9+10/bin/java",
modloader: {
name: "fabric",
version: "0.18.4"
}
});
instance.on("progress", console.log);
instance.on("log", (step, msg) => {
console.log(`[${step}] ${msg}`)
})
await instance.install();
const p = await instance.launch();
p.stdout.on("data", (d: Buffer) => {
console.log(d.toString());
});
p.stderr.on("data", (d: Buffer) => {
console.log(d.toString());
});
await new Promise<void>((res) => {
p.on("error", (d: Buffer) => {
console.log(d.toString());
res();
});
p.on("close", () => {
console.log("closed");
res();
});
});
});

View file

@ -0,0 +1,52 @@
import { test } from "vitest";
import { Instance, offlineAuth, RuntimeManager, getJavaComponent } from "../../../dist/index.js";
import path from "path";
import fs from "fs/promises";
const gameRoot = path.join(import.meta.dirname, "..", "..", "temp");
// await fs.rm(gameRoot, { recursive: true, force: true });
// await fs.mkdir(gameRoot, { recursive: true });
test("launch game", { timeout: 0, tags: ["full", "forge"] }, async () => {
const javaManager = new RuntimeManager(path.join(gameRoot, "java"));
javaManager.on("progress", console.log)
// const java = await javaManager.use(await getJavaComponent("1.21.11"))
const instance = new Instance({
version: "1.21.11",
auth: offlineAuth("player"),
paths: { root: gameRoot, instance: path.join(gameRoot, "instances", "fabric-1.21.11-0.18.4") },
javaExecutable: "/nix/store/rhw336hj0iwv7s3rmcqj5zqpsrw6z1z2-openjdk-21.0.9+10/bin/java",
modloader: {
name: "fabric",
version: "0.18.4"
}
});
instance.on("progress", console.log);
instance.on("log", (step, msg) => {
console.log(`[${step}] ${msg}`)
})
await instance.install();
const p = await instance.launch();
p.stdout.on("data", (d: Buffer) => {
console.log(d.toString());
});
p.stderr.on("data", (d: Buffer) => {
console.log(d.toString());
});
await new Promise<void>((res) => {
p.on("error", (d: Buffer) => {
console.log(d.toString());
res();
});
p.on("close", () => {
console.log("closed");
res();
});
});
});