Build App / compute-version (push) Successful in 7s
Secret Scan / scan (push) Successful in 8s
Build App / build-macos (push) Successful in 2m53s
Build App / build-linux (push) Successful in 5m12s
Build App / build-windows (push) Successful in 5m15s
Build App / create-tag (push) Successful in 3s
Build App / sync-to-github (push) Successful in 1m5s
Clicking a file path in Claude's terminal output now opens the file in its own window with a CodeMirror 6 editor. The editor highlights the target line, live-reloads while the file changes, and saves explicitly with hash-based conflict detection. The viewer commands are gated by window label. Every app command is now ACL-gated per window through a Tauri AppManifest. build.rs checks the handler list against the capability files and fails the build on any mismatch. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
29 lines
1.0 KiB
TypeScript
29 lines
1.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { languageFor, wrapsLines } from "./languages";
|
|
|
|
describe("languageFor", () => {
|
|
it.each(["a.ts", "a.tsx", "a.js", "a.jsx", "a.mjs", "a.rs", "a.py", "a.json", "a.yaml", "a.yml", "a.toml", "a.sh", "a.bash", "a.css", "a.html", "a.md", "Dockerfile", "Cargo.lock", "README"])(
|
|
"resolves %s without throwing", async (name) => {
|
|
const result = await languageFor(`/workspace/${name}`);
|
|
if (name === "README") {
|
|
expect(result).toBeNull();
|
|
} else {
|
|
expect(result).not.toBeNull();
|
|
}
|
|
});
|
|
it("returns null for an unknown extension", async () => {
|
|
await expect(languageFor("/workspace/x.xyz")).resolves.toBeNull();
|
|
});
|
|
it("returns an extension for markdown", async () => {
|
|
await expect(languageFor("/workspace/x.md")).resolves.not.toBeNull();
|
|
});
|
|
});
|
|
|
|
describe("wrapsLines", () => {
|
|
it("wraps prose, not code", () => {
|
|
expect(wrapsLines("x.md")).toBe(true);
|
|
expect(wrapsLines("x.txt")).toBe(true);
|
|
expect(wrapsLines("x.rs")).toBe(false);
|
|
});
|
|
});
|