fune/testing/web-platform/tests/css/css-syntax/serialize-consecutive-tokens.html
Steinar H. Gunderson 3c7e4e1cec Bug 1821354 [wpt PR 38905] - Trim whitespace around CSS custom declarations., a=testonly
Automatic update from web-platform-tests
Trim whitespace around CSS custom declarations.

There was a spec change a few years back, requiring us to
strip spaces and comments from the beginning and end of CSS
custom property declarations.

We take a slight performance hit:

Initial style (µs)     Before     After    Perf      95% CI (BCa)
=================== ========= ========= ======= =================
ECommerce               10041      9994   +0.5%  [ +0.1%,  +0.9%]
Encyclopedia           106735    106744   -0.0%  [ -0.6%,  +0.4%]
Extension              132830    133009   -0.1%  [ -0.6%,  +0.2%]
News                    42534     42653   -0.3%  [ -1.0%,  +0.1%]
Search                   2636      2662   -1.0%  [ -1.4%,  -0.6%]
Social1                 23298     23312   -0.1%  [ -0.3%,  +0.2%]
Social2                  1039      1042   -0.3%  [ -1.0%,  +0.4%]
Sports                  42680     42985   -0.7%  [ -1.0%,  -0.5%]
Video                   41971     42134   -0.4%  [ -0.6%,  -0.1%]
Geometric mean                            -0.3%  [ -0.5%,  -0.1%]

Parse (µs)             Before     After    Perf      95% CI (BCa)
=================== ========= ========= ======= =================
ECommerce                1360      1372   -0.9%  [ -1.2%,  -0.4%]
Encyclopedia             7349      7384   -0.5%  [ -0.7%,  -0.2%]
Extension                1349      1352   -0.2%  [ -1.2%,  +0.2%]
News                     7929      7982   -0.7%  [ -1.0%,  -0.3%]
Search                   4965      4997   -0.6%  [ -0.9%,  -0.4%]
Social1                 14752     14837   -0.6%  [ -0.8%,  -0.3%]
Social2                   617       620   -0.4%  [ -1.4%,  +0.7%]
Sports                  56182     56318   -0.2%  [ -0.6%,  +0.0%]
Video                   34720     35091   -1.1%  [ -1.3%,  -0.8%]
Geometric mean                            -0.6%  [ -0.9%,  -0.4%]

Recalc style (µs)      Before     After    Perf      95% CI (BCa)
=================== ========= ========= ======= =================
ECommerce               11417     11378   +0.3%  [ -0.2%,  +0.8%]
Encyclopedia            83808     84066   -0.3%  [ -1.4%,  +0.1%]
Extension              120362    120394   -0.0%  [ -0.7%,  +0.3%]
News                    31566     31549   +0.1%  [ -1.2%,  +0.5%]
Search                    242       242   -0.0%  [ -1.5%,  +0.7%]
Social1                 17242     17203   +0.2%  [ -0.1%,  +0.4%]
Social2                   602       593   +1.4%  [ +0.7%,  +2.1%]
Sports                  22817     22874   -0.3%  [ -0.5%,  +0.0%]
Video                   25931     25969   -0.1%  [ -0.4%,  +0.1%]
Geometric mean                            +0.1%  [ -0.5%,  +0.5%]

We save a little bit of RAM, obviously, but not much.

Fixed: 1211112
Fixed: 1220144
Change-Id: Ib7656de36d6a94d85ba25ecf60e9879b21c36468
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3341633
Reviewed-by: Anders Hartvoll Ruud <andruud@chromium.org>
Commit-Queue: Steinar H Gunderson <sesse@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1116326}

--

wpt-commits: c3ab769723cb249535a8845cc35af80975b8926d
wpt-pr: 38905
2023-03-29 12:51:13 +00:00

121 lines
3.9 KiB
HTML

<!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("/", "*");
// Test that interior comments are preserved, but exterior ones are not.
function testComments(text, t1, expected) {
const b = document.body;
test(()=>{
b.style.setProperty("--t1", t1);
b.style.setProperty("--result", text);
const result = getComputedStyle(b).getPropertyValue("--result");
assert_equals(result, expected);
}, `Comments are handled correctly when computing ${text} using t1:${t1}.`);
}
testComments("a/* comment */b", "", "a/* comment */b");
testComments("a/* comment */var(--t1)", "b", "a/**/b");
testComments("var(--t1)b", "a/* comment */", "a/**/b");
</script>