| <!doctype html> | |
| <title>An+B Serialization</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/#serializing-anb"> | |
| <script> | |
| function roundtripANB(str) { | |
| const rule = document.styleSheets[0].cssRules[0]; | |
| rule.selectorText = "foo"; | |
| rule.selectorText = `:nth-child(${str})`; | |
| // Check for parse error. | |
| if(rule.selectorText == "foo") return "parse error"; | |
| return rule.selectorText.slice(11, -1); | |
| } | |
| function testANB(input, expected) { | |
| test(()=>{ | |
| assert_equals(roundtripANB(input), expected); | |
| }, `"${input}" becomes "${expected}"`); | |
| } | |
| /* A is 0, or omitted */ | |
| testANB("1", "1"); | |
| testANB("+1", "1"); | |
| testANB("-1", "-1"); | |
| testANB("0n + 0", "0"); | |
| testANB("0n + 1", "1"); | |
| testANB("0n - 1", "-1"); | |
| /* A is 1 */ | |
| testANB("1n", "n"); | |
| testANB("1n - 0", "n"); | |
| testANB("1n + 1", "n+1"); | |
| testANB("1n - 1", "n-1"); | |
| /* A is -1 */ | |
| testANB("-1n", "-n"); | |
| testANB("-1n - 0", "-n"); | |
| testANB("-1n + 1", "-n+1"); | |
| testANB("-1n - 1", "-n-1"); | |
| /* A is implied via + or - */ | |
| testANB("+n+1", "n+1"); | |
| testANB("-n-1", "-n-1"); | |
| /* B is 0 */ | |
| testANB("n + 0", "n"); | |
| testANB("n - 0", "n"); | |
| /* A & B both nonzero */ | |
| testANB("2n + 2", "2n+2"); | |
| testANB("-2n - 2", "-2n-2"); | |
| </script> |