| <!doctype html> | |
| <title>Input Preprocessing</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <style> | |
| foo { color: blue; } | |
| </style> | |
| <meta name="author" title="Tab Atkins-Bittner"> | |
| <link rel=help href="https://drafts.csswg.org/css-syntax/#input-preprocessing"> | |
| <script> | |
| function roundtripIdent(str) { | |
| const rule = document.styleSheets[0].cssRules[0]; | |
| rule.selectorText = "original-ident"; | |
| rule.selectorText = str; | |
| // Check for parse error. | |
| if(rule.selectorText == "original-ident") return "parse error"; | |
| return rule.selectorText; | |
| } | |
| function testParsing(input, expected) { | |
| test(()=>{ | |
| assert_equals(roundtripIdent(input), expected); | |
| }, `"${input}" becomes "${expected}"`); | |
| } | |
| /* Can't figure out how to test the newline normalization... */ | |
| /* NULL becomes FFFD */ | |
| testParsing("foo\x00", "foo\ufffd"); | |
| testParsing("f\x00oo", "f\ufffdoo"); | |
| testParsing("\x00foo", "\ufffdfoo"); | |
| testParsing("\x00", "\ufffd"); | |
| testParsing("\x00\x00\x00", "\ufffd\ufffd\ufffd"); | |
| /* surrogates become FFFD */ | |
| testParsing("foo\ud800", "foo\ufffd"); | |
| testParsing("f\ud800oo", "f\ufffdoo"); | |
| testParsing("\ud800foo", "\ufffdfoo"); | |
| testParsing("\ud800", "\ufffd"); | |
| testParsing("\ud800\ud800\ud800", "\ufffd\ufffd\ufffd"); | |
| </script> |