blob: 21eebcaef2fb04748675a4a1dbc2a1e8b22e5f84 [file] [log] [blame]
<!doctype html>
<title>Serialization of consecutive tokens.</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/#serialization">
<body>
<!--
The serialization chapter provides a table listing all the combinations of consecutive tokens that will,
if naively serialized next to each other,
produce a different set of tokens when re-parsed.
The spec requires that a comment must be inserted between such tokens in the serialization,
to ensure that they round-trip correctly.
-->
<script>
function testTokenPairs(t1, t2) {
const b = document.body;
test(()=>{
b.style.setProperty("--t1", t1);
b.style.setProperty("--t2", t2);
b.style.setProperty("--result", "var(--t1)var(--t2)");
const result = getComputedStyle(b).getPropertyValue("--result");
assert_equals(result.slice(0, t1.length), t1, `Result must start with ${t1}`);
assert_equals(result.slice(-t2.length), t2, `Result must end with ${t2}`);
assert_not_equals(result, t1+t2, `Result must have a comment between ${t1} and ${t2}`);
}, `Serialization of consecutive ${t1} and ${t2} tokens.`);
}
testTokenPairs("foo", "bar");
testTokenPairs("foo", "bar()");
testTokenPairs("foo", "url(bar)");
testTokenPairs("foo", "-");
testTokenPairs("foo", "123");
testTokenPairs("foo", "123%");
testTokenPairs("foo", "123em");
testTokenPairs("foo", "-->");
testTokenPairs("foo", "()");
testTokenPairs("@foo", "bar");
testTokenPairs("@foo", "bar()");
testTokenPairs("@foo", "url(bar)");
testTokenPairs("@foo", "-");
testTokenPairs("@foo", "123");
testTokenPairs("@foo", "123%");
testTokenPairs("@foo", "123em");
testTokenPairs("@foo", "-->");
testTokenPairs("#foo", "bar");
testTokenPairs("#foo", "bar()");
testTokenPairs("#foo", "url(bar)");
testTokenPairs("#foo", "-");
testTokenPairs("#foo", "123");
testTokenPairs("#foo", "123%");
testTokenPairs("#foo", "123em");
testTokenPairs("#foo", "-->");
testTokenPairs("123foo", "bar");
testTokenPairs("123foo", "bar()");
testTokenPairs("123foo", "url(bar)");
testTokenPairs("123foo", "-");
testTokenPairs("123foo", "123");
testTokenPairs("123foo", "123%");
testTokenPairs("123foo", "123em");
testTokenPairs("123foo", "-->");
testTokenPairs("#", "bar");
testTokenPairs("#", "bar()");
testTokenPairs("#", "url(bar)");
testTokenPairs("#", "-");
testTokenPairs("#", "123");
testTokenPairs("#", "123%");
testTokenPairs("#", "123em");
testTokenPairs("-", "bar");
testTokenPairs("-", "bar()");
testTokenPairs("-", "url(bar)");
testTokenPairs("-", "-");
testTokenPairs("-", "123");
testTokenPairs("-", "123%");
testTokenPairs("-", "123em");
testTokenPairs("123", "bar");
testTokenPairs("123", "bar()");
testTokenPairs("123", "url(bar)");
testTokenPairs("123", "123");
testTokenPairs("123", "123%");
testTokenPairs("123", "123em");
testTokenPairs("123", "%");
testTokenPairs("@", "bar");
testTokenPairs("@", "bar()");
testTokenPairs("@", "url(bar)");
testTokenPairs("@", "-");
testTokenPairs(".", "123");
testTokenPairs(".", "123%");
testTokenPairs(".", "123em");
testTokenPairs("+", "123");
testTokenPairs("+", "123%");
testTokenPairs("+", "123em");
testTokenPairs("/", "*");
</script>