Import css/css-syntax WPT tests
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / css / css-syntax / anb-parsing.html
1 <!doctype html>
2 <title>An+B Parsing</title>
3 <script src="/resources/testharness.js"></script>
4 <script src="/resources/testharnessreport.js"></script>
5 <style>
6
7 foo { color: blue; }
8
9 </style>
10
11 <meta name="author" title="Tab Atkins-Bittner">
12 <link rel=help href="https://drafts.csswg.org/css-syntax/#the-anb-type">
13
14 <script>
15
16 function roundtripANB(str) {
17     const rule = document.styleSheets[0].cssRules[0];
18     rule.selectorText = "foo";
19     rule.selectorText = `:nth-child(${str})`;
20     // Check for parse error.
21     if(rule.selectorText == "foo") return "parse error";
22     return rule.selectorText.slice(11, -1);
23 }
24 function testANB(input, expected) {
25     test(()=>{
26         assert_equals(roundtripANB(input), expected);
27     }, `"${input}" becomes "${expected}"`);
28 }
29
30 /* Just going down all the syntax clauses one-by-one */
31 //  odd | even |
32 testANB("odd", "2n+1");
33 testANB("even", "2n");
34 //  <integer> |
35 testANB("1", "1");
36 testANB("+1", "1");
37 testANB("-1", "-1");
38 //
39 //  <n-dimension> |
40 testANB("5n", "5n");
41 testANB("5N", "5n");
42 //  '+'?† n |
43 testANB("+n", "n");
44 testANB("n", "n");
45 testANB("N", "n");
46 testANB("+ n", "parse error");
47 //  -n |
48 testANB("-n", "-n");
49 testANB("-N", "-n");
50 //
51 //  <ndashdigit-dimension> |
52 testANB("5n-5", "5n-5");
53 //  '+'?† <ndashdigit-ident> |
54 testANB("+n-5", "n-5");
55 testANB("n-5", "n-5");
56 testANB("+ n-5", "parse error");
57 //  <dashndashdigit-ident> |
58 testANB("-n-5", "-n-5");
59 //
60 //  <n-dimension> <signed-integer> |
61 testANB("5n +5", "5n+5");
62 testANB("5n -5", "5n-5");
63 //  '+'?† n <signed-integer> |
64 testANB("+n +5", "n+5");
65 testANB("n +5", "n+5");
66 testANB("+n -5", "n-5");
67 testANB("+ n +5", "parse error");
68 testANB("n 5", "parse error");
69 //  -n <signed-integer> |
70 testANB("-n +5", "-n+5");
71 testANB("-n -5", "-n-5");
72 testANB("-n 5", "parse error");
73 //
74 //  <ndash-dimension> <signless-integer> |
75 testANB("5n- 5", "5n-5");
76 testANB("5n- -5", "parse error");
77 testANB("5n- +5", "parse error");
78 testANB("-5n- 5", "-5n-5");
79 //  '+'?† n- <signless-integer> |
80 testANB("+n- 5", "n-5");
81 testANB("n- 5", "n-5");
82 testANB("+ n- 5", "parse error");
83 testANB("n- +5", "parse error");
84 testANB("n- -5", "parse error");
85 //  -n- <signless-integer> |
86 testANB("-n- 5", "-n-5");
87 testANB("-n- +5", "parse error");
88 testANB("-n- -5", "parse error");
89 //
90 //  <n-dimension> ['+' | '-'] <signless-integer>
91 testANB("5n + 5", "5n+5");
92 testANB("5n - 5", "5n-5");
93 testANB("5n + +5", "parse error");
94 testANB("5n + -5", "parse error");
95 testANB("5n - +5", "parse error");
96 testANB("5n - -5", "parse error");
97 //  '+'?† n ['+' | '-'] <signless-integer> |
98 testANB("+n + 5", "n+5");
99 testANB("n + 5", "n+5");
100 testANB("+ n + 5", "parse error");
101 testANB("+n - 5", "n-5");
102 testANB("+n + +5", "parse error");
103 testANB("+n + -5", "parse error");
104 testANB("+n - +5", "parse error");
105 testANB("+n - -5", "parse error");
106 //  -n ['+' | '-'] <signless-integer>
107 testANB("-n + 5", "-n+5");
108 testANB("-n - 5", "-n-5");
109 testANB("-n + +5", "parse error");
110 testANB("-n + -5", "parse error");
111 testANB("-n - +5", "parse error");
112 testANB("-n - -5", "parse error");
113
114 /* Swapped ordering is invalid */
115 testANB("1 - n", "parse error");
116 testANB("0 - n", "parse error");
117 testANB("-1 + n", "parse error");
118
119 /* Odd space usage */
120 testANB("2 n + 2", "parse error");
121 testANB("- 2n", "parse error");
122 testANB("+ 2n", "parse error");
123 testANB("+2 n", "parse error");
124
125 </script>