feat: release Find-Word v0.1
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
// @vitest-environment node
|
||||
import { execFileSync } from "node:child_process";
|
||||
import { cpSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
||||
import { join } from "node:path";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
// 실제 배포는 하지 않는다. worktree 내부 임시 폴더에 public 자산만 복사한 뒤
|
||||
// 정상·누락·변조를 검사하여 빌드 검증기가 실패를 정말 감지하는지 먼저 확인한다.
|
||||
describe("production 자산 검증기", () => {
|
||||
it("101개 음성 포함을 확인하고 누락·변조는 실패시킨다", () => {
|
||||
mkdirSync(".cache", { recursive: true });
|
||||
const temporary = mkdtempSync(".cache/build-test-");
|
||||
const verify = () =>
|
||||
execFileSync(
|
||||
"node",
|
||||
[
|
||||
"--input-type=module",
|
||||
"-e",
|
||||
`import {verifyBuild} from './scripts/check-build.mjs'; console.log(verifyBuild(${JSON.stringify(temporary)}));`,
|
||||
],
|
||||
{ encoding: "utf8", stdio: "pipe" },
|
||||
);
|
||||
try {
|
||||
cpSync("public", temporary, { recursive: true });
|
||||
expect(verify().trim()).toBe("101");
|
||||
writeFileSync(join(temporary, "audio/intro.wav"), "broken");
|
||||
expect(verify).toThrow();
|
||||
rmSync(join(temporary, "audio/intro.wav"));
|
||||
expect(verify).toThrow();
|
||||
} finally {
|
||||
rmSync(temporary, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
it.each(["누락", "축약"])(
|
||||
"dist의 런타임 notice %s을 실패시킨다",
|
||||
(damage) => {
|
||||
mkdirSync(".cache", { recursive: true });
|
||||
const temporary = mkdtempSync(".cache/notice-test-");
|
||||
const verify = () =>
|
||||
execFileSync(
|
||||
"node",
|
||||
[
|
||||
"--input-type=module",
|
||||
"-e",
|
||||
`import {verifyBuild} from './scripts/check-build.mjs'; console.log(verifyBuild(${JSON.stringify(temporary)}));`,
|
||||
],
|
||||
{ encoding: "utf8", stdio: "pipe" },
|
||||
);
|
||||
try {
|
||||
cpSync("public", temporary, { recursive: true });
|
||||
expect(verify().trim()).toBe("101");
|
||||
const notice = join(temporary, "THIRD_PARTY_NOTICES.md");
|
||||
if (damage === "누락") rmSync(notice, { force: true });
|
||||
else
|
||||
writeFileSync(notice, "React / ReactDOM / scheduler — MIT License");
|
||||
expect(verify).toThrow(/notice/i);
|
||||
} finally {
|
||||
rmSync(temporary, { recursive: true, force: true });
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user