test: close the last coverage debt the roadmap still listed
- `overflow-clip` gets a safelist anchor in index.css (its only occurrence is a `.ts` constant), and the chip-lane contract keeps it there. - PlexPlayer's Backspace ownership rule is pinned on all three branches: nothing above, a foreign layer above (it defers), and its own panel open under a layer (it still closes the panel). - Removing a playlist item bumps the list's `updated_at`, like the three other item-only writes. - Seen in a real browser on localdev: an exhausted comfort-shelf tile (an empty pinned playlist) is focusable, aria-disabled, and its Shift+F10 menu offers Play off and Remove from shelf.
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
import { ESLint } from "eslint";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
// The canonical "FE control" row (CLAUDE.md) as a lint rule: no native <select>. Six had drifted in
|
||||
// before the rule existed. A selector that matches nothing looks exactly like a clean codebase, so
|
||||
// this pins that it fires.
|
||||
const FRONTEND = fileURLToPath(new URL("../../", import.meta.url));
|
||||
|
||||
async function refused(source: string): Promise<number> {
|
||||
const eslint = new ESLint({ cwd: FRONTEND });
|
||||
const [result] = await eslint.lintText(source, { filePath: "src/components/__probe.tsx" });
|
||||
return (result?.messages ?? []).filter((m) => m.message.startsWith("No native <select>")).length;
|
||||
}
|
||||
|
||||
describe("a native select", () => {
|
||||
it("is refused; the house controls are not", async () => {
|
||||
expect(await refused("export const A = () => <select />;\n")).toBe(1);
|
||||
expect(await refused("export const B = () => <SegmentedToggle />;\n")).toBe(0);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user