| <!doctype html> | |
| <title>Escaped EOF</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <meta name="author" title="Tab Atkins-Bittner"> | |
| <link rel=help href="https://drafts.csswg.org/css-syntax/#consume-escaped-code-point"> | |
| <link rel=help href="https://drafts.csswg.org/css-syntax/#consume-string-token"> | |
| <link rel=help href="https://drafts.csswg.org/css-syntax/#consume-token"> | |
| <style>foo { --foo:foo\</style> | |
| <style>foo { --foo:1foo\</style> | |
| <style>foo { --foo:url(foo\</style> | |
| <style>foo { --foo:"foo\</style> | |
| <script> | |
| test(()=>{ | |
| assert_throws_dom("SyntaxError", ()=>{document.querySelector("#123");}, "numeric hash token is invalid in a selector"); | |
| document.querySelector("#foo\\"); // escaped-EOF in a hash token is valid in a selector | |
| }, "Escaped EOF turns into a U+FFFD in a hash token, makes it 'ID' type."); | |
| test(()=>{ | |
| const sh = document.styleSheets[0]; | |
| const val = sh.cssRules[0].style.getPropertyValue("--foo"); | |
| assert_equals("foo\ufffd", val); | |
| }, "Escaped EOF turns into a U+FFFD in an ident token."); | |
| test(()=>{ | |
| const sh = document.styleSheets[1]; | |
| const val = sh.cssRules[0].style.getPropertyValue("--foo"); | |
| assert_equals("1foo\ufffd", val); | |
| }, "Escaped EOF turns into a U+FFFD in a dimension token."); | |
| test(()=>{ | |
| const sh = document.styleSheets[2]; | |
| const val = sh.cssRules[0].style.getPropertyValue("--foo"); | |
| assert_equals("url(foo\ufffd)", val); | |
| }, "Escaped EOF turns into a U+FFFD in a url token."); | |
| test(()=>{ | |
| const sh = document.styleSheets[3]; | |
| const val = sh.cssRules[0].style.getPropertyValue("--foo"); | |
| assert_equals(`"foo"`, val); | |
| }, "Escaped EOF in a string is ignored."); | |
| </script> |