Compliance cases

These are the 6,835 inputs a submission must decode. Each output must match the expected text byte for byte. You can run the suite without reading it, or open any case to see its input and expected output.

Run the full compliance suite locally. Replace your-component.wasm with your compiled component. Download the suite

curl -fLo unescape_html.comply.wasm https://calculated.world/comply/unescape_html.wasm
qipx comply your-component.wasm --with unescape_html.comply.wasm
Clear

5,931 of 6,835 cases

Case Name Expected Note Size
004604 html5lib/namedEntities/4197 html5lib-tests 𝔷 Named entity: zfr; with a semi-colon 5 B
004605 html5lib/namedEntities/4198 html5lib-tests &zhcy Bad named entity: zhcy without a semi-colon 5 B
004606 html5lib/namedEntities/4199 html5lib-tests ж Named entity: zhcy; with a semi-colon 6 B
004607 html5lib/namedEntities/4200 html5lib-tests &zigrarr Bad named entity: zigrarr without a semi-colon 8 B
004608 html5lib/namedEntities/4201 html5lib-tests ⇝ Named entity: zigrarr; with a semi-colon 9 B
004609 html5lib/namedEntities/4202 html5lib-tests &zopf Bad named entity: zopf without a semi-colon 5 B
004610 html5lib/namedEntities/4203 html5lib-tests 𝕫 Named entity: zopf; with a semi-colon 6 B
004611 html5lib/namedEntities/4204 html5lib-tests &zscr Bad named entity: zscr without a semi-colon 5 B
004612 html5lib/namedEntities/4205 html5lib-tests 𝓏 Named entity: zscr; with a semi-colon 6 B
004613 html5lib/namedEntities/4206 html5lib-tests &zwj Bad named entity: zwj without a semi-colon 4 B
004614 html5lib/namedEntities/4207 html5lib-tests ⟨U+200D⟩ Named entity: zwj; with a semi-colon 5 B
004615 html5lib/namedEntities/4208 html5lib-tests &zwnj Bad named entity: zwnj without a semi-colon 5 B
004616 html5lib/namedEntities/4209 html5lib-tests ⟨U+200C⟩ Named entity: zwnj; with a semi-colon 6 B
004624 ampersand-before-amp Focused regression && An & that starts no reference is copied 6 B
004791 named-notit Focused regression I'm ¬it; I tell you Legacy names decode without ; using the longest match 22 B
004792 named-notin-no-semicolon Focused regression ¬in Legacy names decode without ; using the longest match 6 B
004793 named-notin Focused regression ∉ Legacy names decode without ; using the longest match 7 B
004794 named-amp-equals Focused regression &= Legacy names decode without ; using the longest match 5 B
004795 named-copy-query Focused regression ?x=1©=2 Legacy names decode without ; using the longest match 11 B
004796 named-amp-letter Focused regression &x Legacy names decode without ; using the longest match 5 B
004797 named-amp-unicode Focused regression &é Legacy names decode without ; using the longest match 6 B
004798 named-amp-hash Focused regression &# Legacy names decode without ; using the longest match 5 B
004799 named-amp-amp Focused regression & Legacy names decode without ; using the longest match 8 B
004800 named-hellip-no-semicolon Focused regression &hellip Legacy names decode without ; using the longest match 7 B
004801 named-hellip Focused regression … Legacy names decode without ; using the longest match 8 B
004802 named-upper-amp Focused regression && Legacy names decode without ; using the longest match 9 B
004803 named-mixed-case-unknown Focused regression &Amp;&aMp; Legacy names decode without ; using the longest match 10 B
004804 named-lt-tag Focused regression <<b>> Legacy names decode without ; using the longest match 9 B
004805 named-lt-gt-run Focused regression ><< Legacy names decode without ; using the longest match 10 B
004806 named-two-letter-prefix Focused regression <x>x<x>x Legacy names decode without ; using the longest match 16 B
004807 named-unknown Focused regression &foo; &no; &qwerty Legacy names decode without ; using the longest match 18 B
004808 query-string Focused regression /search?q=1&lang=en©=2¬=3®¶=4§=5×=6 Body-text rules: legacy names decode even in URLs 58 B
004809 named-CounterClockwiseContourIntegral Focused regression ∳&CounterClockwiseContourIntegral With and without ; 65 B
004810 named-DoubleLongLeftRightArrow Focused regression ⟺&DoubleLongLeftRightArrow With and without ; 51 B
004811 named-ThickSpace Focused regression   &ThickSpace With and without ; 23 B
004812 named-nGt Focused regression ≫⃒&nGt With and without ; 9 B
004813 named-nLt Focused regression ≪⃒&nLt With and without ; 9 B
004814 named-fjlig Focused regression fj&fjlig With and without ; 13 B
004815 named-acE Focused regression ∾̳&acE With and without ; 9 B
004816 named-NotNestedGreaterGreater Focused regression ⪢̸&NotNestedGreaterGreater With and without ; 49 B
004817 named-bne Focused regression =⃥&bne With and without ; 9 B
004818 named-race Focused regression ∽̱&race With and without ; 11 B
004819 named-Lt Focused regression ≪&Lt With and without ; 7 B
004820 named-LT Focused regression << With and without ; 7 B
004821 named-lt Focused regression << With and without ; 7 B
004822 long-name-after-legacy Focused regression &xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Python looks at 32 characters; the result is the same 45 B
004823 long-unknown-name Focused regression &aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa… 62 B
004824 no-double-decode Focused regression &amp; &#38; &lt; The output of one reference is never decoded again 28 B
004825 terminators Focused regression &␉&␊&␌& &<&&&#& 40 B
004827 reference-then-raw Focused regression &␀A␍&␍ 12 B

Where these rules come from

Expected outputs come from Python’s html.unescape, changed to keep references to controls and noncharacters the way the WHATWG tokenizer does.