import { spawnSync } from "node:child_process"; import { describe, expect, it } from "vitest"; const SCRIPT = "scripts/android-screenshots.sh"; function runAndroidScreenshots(args: string[]) { return spawnSync("bash", [SCRIPT, ...args], { encoding: "utf8", }); } describe("android screenshots script", () => { it("dry-runs with a normalized locale output path", () => { const result = runAndroidScreenshots(["--dry-run", "--locale", "pt-BR"]); expect(result.status).toBe(0); expect(result.stdout).toContain( "apps/android/fastlane/metadata/android/pt-BR/images/phoneScreenshots", ); expect(result.stdout).toContain("Dry run complete."); }); it.each(["../escape", "en/US", ".hidden", "en..US", ""])( "rejects locale path escapes before dry-run output: %j", (locale) => { const result = runAndroidScreenshots(["--dry-run", "--locale", locale]); expect(result.status).not.toBe(0); expect(result.stderr).toContain("Invalid Android screenshot locale"); expect(result.stderr).toContain("path separators and dot segments are not allowed"); expect(result.stdout).not.toContain("Android screenshot output:"); }, ); });