| <!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> |