diff options
Diffstat (limited to 'testing/web-platform/tests/css/css-syntax/serialize-consecutive-tokens.html')
-rw-r--r-- | testing/web-platform/tests/css/css-syntax/serialize-consecutive-tokens.html | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-syntax/serialize-consecutive-tokens.html b/testing/web-platform/tests/css/css-syntax/serialize-consecutive-tokens.html new file mode 100644 index 0000000000..21eebcaef2 --- /dev/null +++ b/testing/web-platform/tests/css/css-syntax/serialize-consecutive-tokens.html @@ -0,0 +1,107 @@ +<!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> |