Skip to main content

fixtures

Guides authoring, organizing, and referencing test fixtures across the engine repo. Use when creating new fixtures, writing tests that depend on fixtures, or deciding what should be checked into git.

Source facts

Repository
gridaco/nothing
Last source activity
July 17, 2026 at 14:06
Detected SKILL.md language
English
Stars
54
Forks
3

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
fixtures
description
Guides authoring, organizing, and referencing test fixtures across the engine repo. Use when creating new fixtures, writing tests that depend on fixtures, or deciding what should be checked into git.
# Fixtures ## What fixtures are Fixtures are static input files — HTML, SVG, CSS, JSON, `.grida`, font binaries, images, text samples — used as **deterministic inputs** to rendering, parsing, and I/O tests. They exist so that tests are reproducible, self-contained, and don't depend on external services or generated data. ## Why we keep them - **Regression detection** — render the same input, compare the output. - **Spec coverage** — each fixture maps to a specific feature or property being tested (one concept per file). - **Onboarding** — new contributors can see exactly what the renderer handles by browsing fixtures. - **Cross-pipeline validation** — the same fixture can be consumed by unit tests, golden tests, reftests, probe tests, and visual inspection. ## What should be covered A fixture should exist for every **rendering behavior, format variant, or edge case** that the engine supports or intends to support. This includes: - Each CSS property / SVG element the htmlcss or SVG renderer handles - Format I/O round-trips (SVG → Grida, `.grida` decode) - Edge cases: zero-size, empty content, deeply nested, degenerate inputs - Unsupported-but-tracked features (the fixture documents the gap) ## Best practices - **One concept per file.** Don't combine unrelated properties. - **Self-contained.** No external resources, network fetches, or scripts. - **Minimal.** Only enough structure to isolate the behavior under test. - **Probe-friendly.** High-contrast palette (prefer B/W), round pixel values, ≤ 3 colors. Designed for headless pixel probing, not human aesthetics. - **Descriptive naming.** `<domain>-<property>[-<descriptor>].<ext>` — the filename alone should tell you what's being tested. - **Labeled specimens.** Within a fixture, label each test case with the value being exercised so both humans and heuristics can identify regions. Keep labels short, and pin the dimensions of any container holding a label (flex item, grid cell, stretched block) so font-advance-width differences between engines can't leak into box geometry. When a test pipeline offers a text-neutralizing stylesheet (e.g. `fixtures/test-html/_reftest/hide-text.css` for the htmlcss reftests), prefer that over stripping the label — keeping the text helps the next reader understand the fixture. - **Match the fixture's subject to the viewport policy.** For refbrowser fixtures under `fixtures/test-html/`, **paint / visual-property** fixtures should size their root to a preset viewport (via `min-height`) so grida's cull and Chromium's screenshot have identical dimensions. **Layout** fixtures (box-model, flex, grid, intrinsic sizing) must NOT force a body size — the output dimensions _are_ what the test measures; a `min-height` hack contaminates the result. See [`fixtures/test-html/README.md`](../../../fixtures/test-html/README.md) for the preset list, the paint-vs-layout rule, and the per-fixture `viewport` workflow for layout tests. - **Don't duplicate.** Before adding a fixture, check if an existing one already covers the behavior. Extend or split rather than duplicate. ## Git inclusion policy ### Checked in (`fixtures/`) All directories under `fixtures/` **except `fixtures/local/`** are committed to the repository. These are small, purpose-built files that are part of the test suite. ``` fixtures/ ├── apple-emoji-linux/ # Emoji PNGs (compile-time input of the golden emoji example) ├── css/ # CSS stylesheets ├── fonts/ # Bundled font binaries (deterministic text tests) ├── images/ # Test images ├── prompts/ # AI prompt fixtures (model-v2 experiments) ├── test-grida/ # .grida format fixtures ├── test-html/ # HTML+CSS renderer fixtures (L0, etc.) ├── test-svg/ # SVG fixtures ├── text/ # Plain text samples ├── text-editor/ # Shared text-editing command fixtures (v1.json) └── local/ # ← gitignored, see below ``` The grida product repo holds **frozen snapshots** of `fonts/`, `images/`, `test-grida/` and `text-editor/` for its staying TS tests — canon and history live HERE. If a fixture in those four dirs evolves, the grida side follows only by a deliberate re-snapshot ([grida fixtures README](https://github.com/gridaco/grida/blob/main/fixtures/README.md)). ### Not checked in (`fixtures/local/`) `fixtures/local/` is **gitignored**. It holds large, third-party, or benchmark-only datasets that are meaningful for local development but too large or license-restricted for the repository: - `W3C_SVG_11_TestSuite` — W3C SVG 1.1 conformance suite (~50 MB) - `resvg-test-suite` — resvg's feature-focused SVG tests - `oxygen-icons-5.116.0` — icon set for stress testing - `perf` — large scenes for benchmarking - `refig` — Figma community-file render corpus (workflow documented in the render-reftest skill; source tooling lives in the grida repo) - `svg-issues` — reduced repro cases for SVG bugs These must be downloaded separately by developers who need them. ## Referencing local-only fixtures **Never reference `fixtures/local/` paths in committed code, tests, or documentation.** Local fixtures do not exist in CI or on other developers' machines. Specifically: - Do not `include!()`, `read_to_string()`, or `fs::read()` a `local/` path in any Rust test or example that runs in CI. - Do not hardcode `fixtures/local/` paths in docs, READMEs, or AGENTS files as if they are always available. - If a doc needs to mention a local suite (e.g. for reftest instructions), clearly mark it as **local-only** and note that the developer must download it first. - Tests that depend on local fixtures must be gated (e.g. `#[ignore]` with a comment, or behind a feature flag) so they don't fail in CI.
View on GitHub