diablo2-web/tests/drlg-alias-guard.test.ts

58 lines
2.8 KiB
TypeScript

import { describe, expect, test } from "vitest"
import { readFileSync, existsSync } from "node:fs"
import { resolve } from "node:path"
import * as maze from "../src/game/maze.ts"
import * as levelLinks from "../src/game/level-links.ts"
import * as drlgMap from "../src/game/drlg/drlg-map.ts"
describe("DRLG Export and Alias Guard (Issue #81)", () => {
const getDrlgExports = (mod: Record<string, unknown>): string[] => {
return Object.keys(mod).filter((name) => name.startsWith("DRLG"))
}
test("legacy src/game/wilderness*.ts and world-placement.ts have been removed in favor of src/game/drlg", () => {
expect(existsSync(resolve(__dirname, "../src/game/wilderness.ts"))).toBe(false)
expect(existsSync(resolve(__dirname, "../src/game/wilderness-acts.ts"))).toBe(false)
expect(existsSync(resolve(__dirname, "../src/game/wilderness-jungles.ts"))).toBe(false)
expect(existsSync(resolve(__dirname, "../src/game/wilderness-siege.ts"))).toBe(false)
expect(existsSync(resolve(__dirname, "../src/game/world-placement.ts"))).toBe(false)
})
test("src/game/level-links.ts does not export duplicate DRLGOUTDOORS_SpawnAct12Waypoint", () => {
const exports = getDrlgExports(levelLinks as Record<string, unknown>)
expect(exports).not.toContain("DRLGOUTDOORS_SpawnAct12Waypoint")
expect(exports).not.toContain("DRLGROOMTILE_ComputeNeighborMask")
expect(exports).not.toContain("DRLGROOMTILE_ApplyTransitions")
// findWaypointSpot remains exported as a local helper
expect(typeof levelLinks.findWaypointSpot).toBe("function")
})
test("src/game/maze.ts and src/game/drlg/drlg-map.ts do not export fake Blizzard DRLG aliases", () => {
const exports = [
...getDrlgExports(maze as Record<string, unknown>),
...getDrlgExports(drlgMap as Record<string, unknown>),
]
expect(exports).not.toContain("DRLGROOMTILE_ComputeNeighborMask")
expect(exports).not.toContain("DRLGROOMTILE_ApplyTransitions")
})
test("Static source check: no fake DRLG export statements in source files", () => {
const files = [
resolve(__dirname, "../src/game/maze.ts"),
resolve(__dirname, "../src/game/level-links.ts"),
resolve(__dirname, "../src/game/drlg/drlg-map.ts"),
]
for (const filePath of files) {
const source = readFileSync(filePath, "utf-8")
expect(source).not.toMatch(/export\s+(?:const|function|let|var)\s+DRLGROOMTILE_ComputeNeighborMask\b/)
expect(source).not.toMatch(/export\s+(?:const|function|let|var)\s+DRLGROOMTILE_ApplyTransitions\b/)
}
// Ensure level-links.ts does not export DRLGOUTDOORS_SpawnAct12Waypoint
const levelLinksSource = readFileSync(resolve(__dirname, "../src/game/level-links.ts"), "utf-8")
expect(levelLinksSource).not.toMatch(/export\s+(?:const|function|let|var)\s+DRLGOUTDOORS_SpawnAct12Waypoint\b/)
})
})