返回 DeepSeek-Reasonix
package-desktop-dmg.test.mjs
根目录 / scripts / package-desktop-dmg.test.mjs
1 import assert from "node:assert/strict";
2 import { spawnSync } from "node:child_process";
3 import { mkdtempSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
4 import { tmpdir } from "node:os";
5 import { join } from "node:path";
6 import test from "node:test";
7 import { fileURLToPath } from "node:url";
8
9 const script = fileURLToPath(new URL("./package-desktop-dmg.sh", import.meta.url));
10 for (const scenario of ["no-output", "invalid-output", "customization-error", "success"]) {
11 test(`fresh DMG publication: ${scenario}`, t => {
12 const root = mkdtempSync(join(tmpdir(), "reasonix-dmg-"));
13 t.after(() => rmSync(root, { recursive: true, force: true }));
14 const app = join(root, "Reasonix.app");
15 const bin = join(root, "bin");
16 const dist = join(root, "dist");
17 for (const dir of [app, bin, dist]) mkdirSync(dir);
18 writeFileSync(join(app, "build.json"), "current-build");
19 const output = join(dist, "Reasonix.dmg");
20 writeFileSync(output, "old-build");
21 writeFileSync(join(bin, "create-dmg"), `#!/usr/bin/env bash
22 set -eu
23 while [ "$#" -gt 2 ]; do shift; done
24 [ "$1" != "$OUTPUT" ]
25 [ ! -e "$1" ]
26 [ "$(cat "$2/Reasonix.app/build.json")" = current-build ]
27 case "$SCENARIO" in
28 no-output) exit 1 ;;
29 invalid-output) printf invalid > "$1" ;;
30 customization-error) printf current-build > "$1"; exit 1 ;;
31 success) printf current-build > "$1" ;;
32 esac
33 `, { mode: 0o755 });
34 writeFileSync(join(bin, "hdiutil"), `#!/usr/bin/env bash
35 set -eu
36 [ "$1" = verify ]
37 [ "$(cat "$2")" = current-build ]
38 `, { mode: 0o755 });
39 const result = spawnSync("bash", [script, app, output, "Reasonix"], {
40 encoding: "utf8",
41 env: { ...process.env, PATH: `${bin}:${process.env.PATH}`, OUTPUT: output, SCENARIO: scenario },
42 });
43 const succeeds = ["customization-error", "success"].includes(scenario);
44 assert.equal(result.status === 0, succeeds, result.stderr);
45 assert.equal(readFileSync(output, "utf8"), succeeds ? "current-build" : "old-build");
46 assert.deepEqual(readdirSync(dist), ["Reasonix.dmg"]);
47 });
48 }
49
49 lines Plain Text