How niso is tested
Checked against 54d987f on 2026-11-10 by Capy (drift after the docs-site merge). The files it covers are unchanged since.
tests/check.sh runs every check that works on any machine; flags add the
device comparisons. There is no CI: the script is where checks are enforced.
Known differences are listed with their reason, and a check fails when one
appears and when a listed one stops happening.
| Check | What it compares | Recorded results |
|---|---|---|
cargo xtask layers |
crate dependencies against the layer rules | xtask/layers-allowlist.txt |
cargo test --workspace |
each crate’s contract suite, the C API conformance tests (in C, against niso.h), the JS binding’s tests, the Rust timer app |
in the tests |
examples/lang/*/build.sh |
the timer app built in C, Zig, Go and Java and driven headless | in each app’s test |
tests/svelte/run.sh |
a Svelte 5 component mounted headless and driven | in the script |
WPT (niso-wpt) |
the web-platform-tests of every Baseline feature, run headless | tests/wpt/expectations.json and per system expectations.<os>.json |
| test262 intl402 | ECMA-402 conformance of niso’s Intl |
tests/test262/ |
| Acid1, Acid2, Acid3 | Acid1 and Acid2 laid out box by box against headless Chrome; Acid3’s score | tests/acid/expectations.json |
| The docs check | the site builds, links resolve, references exist, runnable blocks run | Keeping the docs current |
--ios, --android, --iced |
each page of tests/screens/cases.txt on the device against Chrome: every element’s border box within a pixel, box-only screenshots nearly identical; on iOS and Android also text inside its box at the default and a large text size, and text styles against SwiftUI’s and Compose’s |
tests/screens/expectations.json |
--mac |
a Mac’s input played into the macOS host | tests/mac-input |
Web-platform-tests and the Baseline score
Section titled “Web-platform-tests and the Baseline score”The WPT gate fails on any subtest that stopped passing. When a change makes
more pass, cargo run --release -p niso-wpt -- --update records them on each
system and rescores tests/wpt/baseline.json, the Baseline score that
Web platform support and the banners on API
pages show. WPT is the regression net; work is picked by what real apps need,
not to raise the count (Decisions). How
the score is computed and what it leaves out: the WPT notes.
Running it: WPT and the Baseline score.
Real apps
Section titled “Real apps”tests/apps/run.sh fetches each app of the corpus at a pinned upstream version
and drives its core flow headless on QuickJS, Node or Bun, optionally rendering
a screenshot with niso-iced. The status per app and engine is in
Real apps; The app corpus says how
to run it.
Engines against each other
Section titled “Engines against each other”node tests/porffor/run.mjs builds every example and the Svelte fixture with
Porffor and compares each with QuickJS. cargo run --release -p niso-wpt -- --engine node
runs the WPT suite under Node-API and diffs it against the expectations.