
> launchlens@1.0.0 test
> node --test tests/*.test.mjs

✔ clean complete export has zero findings (8.585176ms)
✔ example has real errors and metadata/noindex (13.874549ms)
✔ query ignored, fragment decoded, file encoding decoded once (2.981221ms)
✔ case mismatch is actionable and fragment is case sensitive (1.138157ms)
✔ subpath base works for relative and origin absolute URLs (0.681833ms)
✔ base href determines document relative references (0.641262ms)
✔ external base links are not fetched or marked missing (0.403796ms)
✔ strict and clean HTML rules are explicit (1.441732ms)
✔ fragment-only refs check local anchors, empty hash valid (0.971667ms)
✔ URL parent path normalizes within export; files cannot traverse (0.908773ms)
✔ malformed encoded paths and fragments are warnings (0.535633ms)
✔ external and non-HTTP refs skipped safely (0.996505ms)
✔ HTML remains inert and template/script markup is not scanned (0.92651ms)
✔ duplicate refs grouped with count and first source line (0.58043ms)
✔ noindex token exact; meta refresh never called HTTP redirect (0.72006ms)
✔ canonical and hreflang inconsistencies detected (0.784216ms)
✔ valid reciprocal hreflang has no return warnings (0.715514ms)
✔ robots and sitemap coverage is bounded, entities skipped (0.281932ms)
✔ CSV formula injection and quotes protected (0.246499ms)
✔ settings reject credentials, URL queries and non-HTTP (0.269664ms)
✔ repeat analysis has no stale counts (0.517486ms)
✔ size and count caps reject conservatively (0.73393ms)
✔ deflated and stored ZIP roundtrip with UTF8 filenames (5.458837ms)
✔ malicious ZIP paths rejected without extracting (3.870024ms)
✔ ZIP high compression ratio bomb rejected (7.010855ms)
✔ ZIP wrong CRC, inconsistent lengths, truncation rejected (0.771707ms)
✔ ZIP declared huge size rejected before inflation (0.616004ms)
✔ ZIP untrusted path mismatch and encrypted flags rejected (0.495553ms)
✔ symlink and ZIP64 declarations rejected (0.442684ms)
✔ SVG title is not a document title (1.236985ms)
ℹ tests 30
ℹ suites 0
ℹ pass 30
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 200.959865
