OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library compiler_test; | 5 library compiler_test; |
6 | 6 |
7 import 'dart:convert'; | 7 import 'dart:convert'; |
8 import 'package:test/test.dart'; | 8 import 'package:test/test.dart'; |
9 import 'package:csslib/parser.dart'; | 9 import 'package:csslib/parser.dart'; |
| 10 import 'package:csslib/src/messages.dart'; |
10 import 'package:csslib/visitor.dart'; | 11 import 'package:csslib/visitor.dart'; |
11 import 'testing.dart'; | 12 import 'testing.dart'; |
12 | 13 |
13 void testClass() { | 14 void testClass() { |
14 var errors = []; | 15 var errors = <Message>[]; |
15 var input = ".foobar {}"; | 16 var input = ".foobar {}"; |
16 var stylesheet = parseCss(input, errors: errors); | 17 var stylesheet = parseCss(input, errors: errors); |
17 | 18 |
18 expect(stylesheet != null, true); | 19 expect(stylesheet != null, true); |
19 expect(errors.isEmpty, true, reason: errors.toString()); | 20 expect(errors.isEmpty, true, reason: errors.toString()); |
20 | 21 |
21 walkTree(stylesheet); | 22 walkTree(stylesheet); |
22 | 23 |
23 expect(stylesheet.topLevels.length, 1); | 24 expect(stylesheet.topLevels.length, 1); |
24 | 25 |
25 expect(stylesheet.topLevels[0] is RuleSet, true); | 26 expect(stylesheet.topLevels[0] is RuleSet, true); |
26 | 27 |
27 var ruleset = stylesheet.topLevels[0]; | 28 var ruleset = stylesheet.topLevels[0] as RuleSet; |
28 expect(ruleset.selectorGroup.selectors.length, 1); | 29 expect(ruleset.selectorGroup.selectors.length, 1); |
29 expect(ruleset.declarationGroup.declarations.length, 0); | 30 expect(ruleset.declarationGroup.declarations.length, 0); |
30 | 31 |
31 var selectorSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 32 var selectorSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
32 expect(selectorSeqs.length, 1); | 33 expect(selectorSeqs.length, 1); |
33 final simpSelector = selectorSeqs[0].simpleSelector; | 34 final simpSelector = selectorSeqs[0].simpleSelector; |
34 expect(simpSelector is ClassSelector, true); | 35 expect(simpSelector is ClassSelector, true); |
35 expect(selectorSeqs[0].isCombinatorNone, true); | 36 expect(selectorSeqs[0].isCombinatorNone, true); |
36 expect(simpSelector.name, "foobar"); | 37 expect(simpSelector.name, "foobar"); |
37 } | 38 } |
38 | 39 |
39 void testClass2() { | 40 void testClass2() { |
40 var errors = []; | 41 var errors = <Message>[]; |
41 var input = ".foobar .bar .no-story {}"; | 42 var input = ".foobar .bar .no-story {}"; |
42 var stylesheet = parseCss(input, errors: errors); | 43 var stylesheet = parseCss(input, errors: errors); |
43 | 44 |
44 expect(stylesheet != null, true); | 45 expect(stylesheet != null, true); |
45 expect(errors.isEmpty, true, reason: errors.toString()); | 46 expect(errors.isEmpty, true, reason: errors.toString()); |
46 | 47 |
47 walkTree(stylesheet); | 48 walkTree(stylesheet); |
48 | 49 |
49 expect(stylesheet.topLevels.length, 1); | 50 expect(stylesheet.topLevels.length, 1); |
50 | 51 |
51 expect(stylesheet.topLevels[0] is RuleSet, true); | 52 expect(stylesheet.topLevels[0] is RuleSet, true); |
52 var ruleset = stylesheet.topLevels[0]; | 53 var ruleset = stylesheet.topLevels[0] as RuleSet; |
53 expect(ruleset.selectorGroup.selectors.length, 1); | 54 expect(ruleset.selectorGroup.selectors.length, 1); |
54 expect(ruleset.declarationGroup.declarations.length, 0); | 55 expect(ruleset.declarationGroup.declarations.length, 0); |
55 | 56 |
56 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 57 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
57 expect(simpleSeqs.length, 3); | 58 expect(simpleSeqs.length, 3); |
58 | 59 |
59 var simpSelector0 = simpleSeqs[0].simpleSelector; | 60 var simpSelector0 = simpleSeqs[0].simpleSelector; |
60 expect(simpSelector0 is ClassSelector, true); | 61 expect(simpSelector0 is ClassSelector, true); |
61 expect(simpleSeqs[0].isCombinatorNone, true); | 62 expect(simpleSeqs[0].isCombinatorNone, true); |
62 expect(simpSelector0.name, "foobar"); | 63 expect(simpSelector0.name, "foobar"); |
63 | 64 |
64 var simpSelector1 = simpleSeqs[1].simpleSelector; | 65 var simpSelector1 = simpleSeqs[1].simpleSelector; |
65 expect(simpSelector1 is ClassSelector, true); | 66 expect(simpSelector1 is ClassSelector, true); |
66 expect(simpleSeqs[1].isCombinatorDescendant, true); | 67 expect(simpleSeqs[1].isCombinatorDescendant, true); |
67 expect(simpSelector1.name, "bar"); | 68 expect(simpSelector1.name, "bar"); |
68 | 69 |
69 var simpSelector2 = simpleSeqs[2].simpleSelector; | 70 var simpSelector2 = simpleSeqs[2].simpleSelector; |
70 expect(simpSelector2 is ClassSelector, true); | 71 expect(simpSelector2 is ClassSelector, true); |
71 expect(simpleSeqs[2].isCombinatorDescendant, true); | 72 expect(simpleSeqs[2].isCombinatorDescendant, true); |
72 expect(simpSelector2.name, "no-story"); | 73 expect(simpSelector2.name, "no-story"); |
73 } | 74 } |
74 | 75 |
75 void testId() { | 76 void testId() { |
76 var errors = []; | 77 var errors = <Message>[]; |
77 var input = "#elemId {}"; | 78 var input = "#elemId {}"; |
78 var stylesheet = parseCss(input, errors: errors); | 79 var stylesheet = parseCss(input, errors: errors); |
79 | 80 |
80 expect(stylesheet != null, true); | 81 expect(stylesheet != null, true); |
81 expect(errors.isEmpty, true, reason: errors.toString()); | 82 expect(errors.isEmpty, true, reason: errors.toString()); |
82 | 83 |
83 walkTree(stylesheet); | 84 walkTree(stylesheet); |
84 | 85 |
85 expect(stylesheet.topLevels.length, 1); | 86 expect(stylesheet.topLevels.length, 1); |
86 | 87 |
87 expect(stylesheet.topLevels[0] is RuleSet, true); | 88 expect(stylesheet.topLevels[0] is RuleSet, true); |
88 var ruleset = stylesheet.topLevels[0]; | 89 var ruleset = stylesheet.topLevels[0] as RuleSet; |
89 expect(ruleset.selectorGroup.selectors.length, 1); | 90 expect(ruleset.selectorGroup.selectors.length, 1); |
90 expect(ruleset.declarationGroup.declarations.length, 0); | 91 expect(ruleset.declarationGroup.declarations.length, 0); |
91 | 92 |
92 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 93 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
93 | 94 |
94 expect(simpleSeqs.length, 1); | 95 expect(simpleSeqs.length, 1); |
95 var simpSelector = simpleSeqs[0].simpleSelector; | 96 var simpSelector = simpleSeqs[0].simpleSelector; |
96 expect(simpSelector is IdSelector, true); | 97 expect(simpSelector is IdSelector, true); |
97 expect(simpleSeqs[0].isCombinatorNone, true); | 98 expect(simpleSeqs[0].isCombinatorNone, true); |
98 expect(simpSelector.name, "elemId"); | 99 expect(simpSelector.name, "elemId"); |
99 } | 100 } |
100 | 101 |
101 void testElement() { | 102 void testElement() { |
102 var errors = []; | 103 var errors = <Message>[]; |
103 var input = "div {}"; | 104 var input = "div {}"; |
104 var stylesheet = parseCss(input, errors: errors); | 105 var stylesheet = parseCss(input, errors: errors); |
105 | 106 |
106 expect(stylesheet != null, true); | 107 expect(stylesheet != null, true); |
107 expect(errors.isEmpty, true, reason: errors.toString()); | 108 expect(errors.isEmpty, true, reason: errors.toString()); |
108 | 109 |
109 walkTree(stylesheet); | 110 walkTree(stylesheet); |
110 | 111 |
111 expect(stylesheet.topLevels.length, 1); | 112 expect(stylesheet.topLevels.length, 1); |
112 | 113 |
113 expect(stylesheet.topLevels[0] is RuleSet, true); | 114 expect(stylesheet.topLevels[0] is RuleSet, true); |
114 var ruleset = stylesheet.topLevels[0]; | 115 var ruleset = stylesheet.topLevels[0] as RuleSet; |
115 expect(ruleset.selectorGroup.selectors.length, 1); | 116 expect(ruleset.selectorGroup.selectors.length, 1); |
116 expect(ruleset.declarationGroup.declarations.length, 0); | 117 expect(ruleset.declarationGroup.declarations.length, 0); |
117 | 118 |
118 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 119 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
119 | 120 |
120 expect(simpleSeqs.length, 1); | 121 expect(simpleSeqs.length, 1); |
121 | 122 |
122 final simpSelector = simpleSeqs[0].simpleSelector; | 123 final simpSelector = simpleSeqs[0].simpleSelector; |
123 expect(simpSelector is ElementSelector, true); | 124 expect(simpSelector is ElementSelector, true); |
124 expect(simpleSeqs[0].isCombinatorNone, true); | 125 expect(simpleSeqs[0].isCombinatorNone, true); |
(...skipping 28 matching lines...) Expand all Loading... |
153 expect(simpleSeqs[1].isCombinatorDescendant, true); | 154 expect(simpleSeqs[1].isCombinatorDescendant, true); |
154 expect(simpSelector1.name, "div"); | 155 expect(simpSelector1.name, "div"); |
155 | 156 |
156 var simpSelector2 = simpleSeqs[2].simpleSelector; | 157 var simpSelector2 = simpleSeqs[2].simpleSelector; |
157 expect(simpSelector2 is ElementSelector, true); | 158 expect(simpSelector2 is ElementSelector, true); |
158 expect(simpleSeqs[2].isCombinatorDescendant, true); | 159 expect(simpleSeqs[2].isCombinatorDescendant, true); |
159 expect(simpSelector2.name, "span"); | 160 expect(simpSelector2.name, "span"); |
160 } | 161 } |
161 | 162 |
162 void testNamespace() { | 163 void testNamespace() { |
163 var errors = []; | 164 var errors = <Message>[]; |
164 var input = "ns1|div {}"; | 165 var input = "ns1|div {}"; |
165 var stylesheet = parseCss(input, errors: errors); | 166 var stylesheet = parseCss(input, errors: errors); |
166 | 167 |
167 expect(stylesheet != null, true); | 168 expect(stylesheet != null, true); |
168 expect(errors.isEmpty, true, reason: errors.toString()); | 169 expect(errors.isEmpty, true, reason: errors.toString()); |
169 | 170 |
170 walkTree(stylesheet); | 171 walkTree(stylesheet); |
171 | 172 |
172 expect(stylesheet.topLevels.length, 1); | 173 expect(stylesheet.topLevels.length, 1); |
173 | 174 |
174 expect(stylesheet.topLevels[0] is RuleSet, true); | 175 expect(stylesheet.topLevels[0] is RuleSet, true); |
175 var ruleset = stylesheet.topLevels[0]; | 176 var ruleset = stylesheet.topLevels[0] as RuleSet; |
176 expect(ruleset.selectorGroup.selectors.length, 1); | 177 expect(ruleset.selectorGroup.selectors.length, 1); |
177 expect(ruleset.declarationGroup.declarations.length, 0); | 178 expect(ruleset.declarationGroup.declarations.length, 0); |
178 | 179 |
179 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 180 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
180 | 181 |
181 expect(simpleSeqs.length, 1); | 182 expect(simpleSeqs.length, 1); |
182 var simpSelector = simpleSeqs[0].simpleSelector; | 183 expect(simpleSeqs[0].simpleSelector is NamespaceSelector, true); |
183 expect(simpSelector is NamespaceSelector, true); | 184 var simpSelector = simpleSeqs[0].simpleSelector as NamespaceSelector; |
184 expect(simpleSeqs[0].isCombinatorNone, true); | 185 expect(simpleSeqs[0].isCombinatorNone, true); |
185 expect(simpSelector.isNamespaceWildcard, false); | 186 expect(simpSelector.isNamespaceWildcard, false); |
186 expect(simpSelector.namespace, "ns1"); | 187 expect(simpSelector.namespace, "ns1"); |
187 var elementSelector = simpSelector.nameAsSimpleSelector; | 188 var elementSelector = simpSelector.nameAsSimpleSelector; |
188 expect(elementSelector is ElementSelector, true); | 189 expect(elementSelector is ElementSelector, true); |
189 expect(elementSelector.isWildcard, false); | 190 expect(elementSelector.isWildcard, false); |
190 expect(elementSelector.name, "div"); | 191 expect(elementSelector.name, "div"); |
191 } | 192 } |
192 | 193 |
193 void testNamespace2() { | 194 void testNamespace2() { |
194 var errors = []; | 195 var errors = <Message>[]; |
195 var input = "ns1|div div ns2|span .foobar {}"; | 196 var input = "ns1|div div ns2|span .foobar {}"; |
196 var stylesheet = parseCss(input, errors: errors); | 197 var stylesheet = parseCss(input, errors: errors); |
197 | 198 |
198 expect(stylesheet != null, true); | 199 expect(stylesheet != null, true); |
199 expect(errors.isEmpty, true, reason: errors.toString()); | 200 expect(errors.isEmpty, true, reason: errors.toString()); |
200 | 201 |
201 walkTree(stylesheet); | 202 walkTree(stylesheet); |
202 | 203 |
203 expect(stylesheet.topLevels.length, 1); | 204 expect(stylesheet.topLevels.length, 1); |
204 | 205 |
205 expect(stylesheet.topLevels[0] is RuleSet, true); | 206 expect(stylesheet.topLevels[0] is RuleSet, true); |
206 var ruleset = stylesheet.topLevels[0]; | 207 var ruleset = stylesheet.topLevels[0] as RuleSet; |
207 expect(ruleset.selectorGroup.selectors.length, 1); | 208 expect(ruleset.selectorGroup.selectors.length, 1); |
208 expect(ruleset.declarationGroup.declarations.length, 0); | 209 expect(ruleset.declarationGroup.declarations.length, 0); |
209 | 210 |
210 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 211 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
211 | 212 |
212 expect(simpleSeqs.length, 4); | 213 expect(simpleSeqs.length, 4); |
213 | 214 |
214 var simpSelector0 = simpleSeqs[0].simpleSelector; | 215 expect(simpleSeqs[0].simpleSelector is NamespaceSelector, true); |
215 expect(simpSelector0 is NamespaceSelector, true); | 216 var simpSelector0 = simpleSeqs[0].simpleSelector as NamespaceSelector; |
216 expect(simpleSeqs[0].isCombinatorNone, true); | 217 expect(simpleSeqs[0].isCombinatorNone, true); |
217 expect(simpSelector0.namespace, "ns1"); | 218 expect(simpSelector0.namespace, "ns1"); |
218 var elementSelector0 = simpSelector0.nameAsSimpleSelector; | 219 var elementSelector0 = simpSelector0.nameAsSimpleSelector; |
219 expect(elementSelector0 is ElementSelector, true); | 220 expect(elementSelector0 is ElementSelector, true); |
220 expect(elementSelector0.isWildcard, false); | 221 expect(elementSelector0.isWildcard, false); |
221 expect(elementSelector0.name, "div"); | 222 expect(elementSelector0.name, "div"); |
222 | 223 |
223 var simpSelector1 = simpleSeqs[1].simpleSelector; | 224 var simpSelector1 = simpleSeqs[1].simpleSelector; |
224 expect(simpSelector1 is ElementSelector, true); | 225 expect(simpSelector1 is ElementSelector, true); |
225 expect(simpleSeqs[1].isCombinatorDescendant, true); | 226 expect(simpleSeqs[1].isCombinatorDescendant, true); |
226 expect(simpSelector1.name, "div"); | 227 expect(simpSelector1.name, "div"); |
227 | 228 |
228 var simpSelector2 = simpleSeqs[2].simpleSelector; | 229 expect(simpleSeqs[2].simpleSelector is NamespaceSelector, true); |
229 expect(simpSelector2 is NamespaceSelector, true); | 230 var simpSelector2 = simpleSeqs[2].simpleSelector as NamespaceSelector; |
230 expect(simpleSeqs[2].isCombinatorDescendant, true); | 231 expect(simpleSeqs[2].isCombinatorDescendant, true); |
231 expect(simpSelector2.namespace, "ns2"); | 232 expect(simpSelector2.namespace, "ns2"); |
232 var elementSelector2 = simpSelector2.nameAsSimpleSelector; | 233 var elementSelector2 = simpSelector2.nameAsSimpleSelector; |
233 expect(elementSelector2 is ElementSelector, true); | 234 expect(elementSelector2 is ElementSelector, true); |
234 expect(elementSelector2.isWildcard, false); | 235 expect(elementSelector2.isWildcard, false); |
235 expect(elementSelector2.name, "span"); | 236 expect(elementSelector2.name, "span"); |
236 | 237 |
237 var simpSelector3 = simpleSeqs[3].simpleSelector; | 238 var simpSelector3 = simpleSeqs[3].simpleSelector; |
238 expect(simpSelector3 is ClassSelector, true); | 239 expect(simpSelector3 is ClassSelector, true); |
239 expect(simpleSeqs[3].isCombinatorDescendant, true); | 240 expect(simpleSeqs[3].isCombinatorDescendant, true); |
240 expect(simpSelector3.name, "foobar"); | 241 expect(simpSelector3.name, "foobar"); |
241 } | 242 } |
242 | 243 |
243 void testSelectorGroups() { | 244 void testSelectorGroups() { |
244 var errors = []; | 245 var errors = <Message>[]; |
245 var input = | 246 var input = |
246 "div, .foobar ,#elemId, .xyzzy .test, ns1|div div #elemId .foobar {}"; | 247 "div, .foobar ,#elemId, .xyzzy .test, ns1|div div #elemId .foobar {}"; |
247 var stylesheet = parseCss(input, errors: errors); | 248 var stylesheet = parseCss(input, errors: errors); |
248 | 249 |
249 expect(stylesheet != null, true); | 250 expect(stylesheet != null, true); |
250 expect(errors.isEmpty, true, reason: errors.toString()); | 251 expect(errors.isEmpty, true, reason: errors.toString()); |
251 | 252 |
252 walkTree(stylesheet); | 253 walkTree(stylesheet); |
253 | 254 |
254 expect(stylesheet.topLevels.length, 1); | 255 expect(stylesheet.topLevels.length, 1); |
255 | 256 |
256 expect(stylesheet.topLevels[0] is RuleSet, true); | 257 expect(stylesheet.topLevels[0] is RuleSet, true); |
257 var ruleset = stylesheet.topLevels[0]; | 258 var ruleset = stylesheet.topLevels[0] as RuleSet; |
258 expect(ruleset.selectorGroup.selectors.length, 5); | 259 expect(ruleset.selectorGroup.selectors.length, 5); |
259 expect(ruleset.declarationGroup.declarations.length, 0); | 260 expect(ruleset.declarationGroup.declarations.length, 0); |
260 | 261 |
261 var groupSelector0 = ruleset.selectorGroup.selectors[0]; | 262 var groupSelector0 = ruleset.selectorGroup.selectors[0]; |
262 expect(groupSelector0.simpleSelectorSequences.length, 1); | 263 expect(groupSelector0.simpleSelectorSequences.length, 1); |
263 var selector0 = groupSelector0.simpleSelectorSequences[0]; | 264 var selector0 = groupSelector0.simpleSelectorSequences[0]; |
264 var simpleSelector0 = selector0.simpleSelector; | 265 var simpleSelector0 = selector0.simpleSelector; |
265 expect(simpleSelector0 is ElementSelector, true); | 266 expect(simpleSelector0 is ElementSelector, true); |
266 expect(selector0.isCombinatorNone, true); | 267 expect(selector0.isCombinatorNone, true); |
267 expect(simpleSelector0.name, "div"); | 268 expect(simpleSelector0.name, "div"); |
(...skipping 26 matching lines...) Expand all Loading... |
294 var selector31 = groupSelector3.simpleSelectorSequences[1]; | 295 var selector31 = groupSelector3.simpleSelectorSequences[1]; |
295 var simpleSelector31 = selector31.simpleSelector; | 296 var simpleSelector31 = selector31.simpleSelector; |
296 expect(simpleSelector31 is ClassSelector, true); | 297 expect(simpleSelector31 is ClassSelector, true); |
297 expect(selector31.isCombinatorDescendant, true); | 298 expect(selector31.isCombinatorDescendant, true); |
298 expect(simpleSelector31.name, "test"); | 299 expect(simpleSelector31.name, "test"); |
299 | 300 |
300 var groupSelector4 = ruleset.selectorGroup.selectors[4]; | 301 var groupSelector4 = ruleset.selectorGroup.selectors[4]; |
301 expect(groupSelector4.simpleSelectorSequences.length, 4); | 302 expect(groupSelector4.simpleSelectorSequences.length, 4); |
302 | 303 |
303 var selector40 = groupSelector4.simpleSelectorSequences[0]; | 304 var selector40 = groupSelector4.simpleSelectorSequences[0]; |
304 var simpleSelector40 = selector40.simpleSelector; | 305 expect(selector40.simpleSelector is NamespaceSelector, true); |
305 expect(simpleSelector40 is NamespaceSelector, true); | 306 var simpleSelector40 = selector40.simpleSelector as NamespaceSelector; |
306 expect(selector40.isCombinatorNone, true); | 307 expect(selector40.isCombinatorNone, true); |
307 expect(simpleSelector40.namespace, "ns1"); | 308 expect(simpleSelector40.namespace, "ns1"); |
308 var elementSelector = simpleSelector40.nameAsSimpleSelector; | 309 var elementSelector = simpleSelector40.nameAsSimpleSelector; |
309 expect(elementSelector is ElementSelector, true); | 310 expect(elementSelector is ElementSelector, true); |
310 expect(elementSelector.isWildcard, false); | 311 expect(elementSelector.isWildcard, false); |
311 expect(elementSelector.name, "div"); | 312 expect(elementSelector.name, "div"); |
312 | 313 |
313 var selector41 = groupSelector4.simpleSelectorSequences[1]; | 314 var selector41 = groupSelector4.simpleSelectorSequences[1]; |
314 var simpleSelector41 = selector41.simpleSelector; | 315 var simpleSelector41 = selector41.simpleSelector; |
315 expect(simpleSelector41 is ElementSelector, true); | 316 expect(simpleSelector41 is ElementSelector, true); |
316 expect(selector41.isCombinatorDescendant, true); | 317 expect(selector41.isCombinatorDescendant, true); |
317 expect(simpleSelector41.name, "div"); | 318 expect(simpleSelector41.name, "div"); |
318 | 319 |
319 var selector42 = groupSelector4.simpleSelectorSequences[2]; | 320 var selector42 = groupSelector4.simpleSelectorSequences[2]; |
320 var simpleSelector42 = selector42.simpleSelector; | 321 var simpleSelector42 = selector42.simpleSelector; |
321 expect(simpleSelector42 is IdSelector, true); | 322 expect(simpleSelector42 is IdSelector, true); |
322 expect(selector42.isCombinatorDescendant, true); | 323 expect(selector42.isCombinatorDescendant, true); |
323 expect(simpleSelector42.name, "elemId"); | 324 expect(simpleSelector42.name, "elemId"); |
324 | 325 |
325 var selector43 = groupSelector4.simpleSelectorSequences[3]; | 326 var selector43 = groupSelector4.simpleSelectorSequences[3]; |
326 var simpleSelector43 = selector43.simpleSelector; | 327 var simpleSelector43 = selector43.simpleSelector; |
327 expect(selector43.isCombinatorDescendant, true); | 328 expect(selector43.isCombinatorDescendant, true); |
328 expect(simpleSelector43.name, "foobar"); | 329 expect(simpleSelector43.name, "foobar"); |
329 } | 330 } |
330 | 331 |
331 void testCombinator() { | 332 void testCombinator() { |
332 var errors = []; | 333 var errors = <Message>[]; |
333 var input = ".foobar > .bar + .no-story ~ myNs|div #elemId {}"; | 334 var input = ".foobar > .bar + .no-story ~ myNs|div #elemId {}"; |
334 var stylesheet = parseCss(input, errors: errors); | 335 var stylesheet = parseCss(input, errors: errors); |
335 | 336 |
336 expect(stylesheet != null, true); | 337 expect(stylesheet != null, true); |
337 expect(errors.isEmpty, true, reason: errors.toString()); | 338 expect(errors.isEmpty, true, reason: errors.toString()); |
338 | 339 |
339 walkTree(stylesheet); | 340 walkTree(stylesheet); |
340 | 341 |
341 expect(stylesheet.topLevels.length, 1); | 342 expect(stylesheet.topLevels.length, 1); |
342 | 343 |
343 expect(stylesheet.topLevels[0] is RuleSet, true); | 344 expect(stylesheet.topLevels[0] is RuleSet, true); |
344 var ruleset = stylesheet.topLevels[0]; | 345 var ruleset = stylesheet.topLevels[0] as RuleSet; |
345 expect(ruleset.selectorGroup.selectors.length, 1); | 346 expect(ruleset.selectorGroup.selectors.length, 1); |
346 expect(ruleset.declarationGroup.declarations.length, 0); | 347 expect(ruleset.declarationGroup.declarations.length, 0); |
347 | 348 |
348 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 349 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
349 | 350 |
350 expect(simpleSeqs.length, 5); | 351 expect(simpleSeqs.length, 5); |
351 | 352 |
352 var selector0 = simpleSeqs[0]; | 353 var selector0 = simpleSeqs[0]; |
353 var simpleSelector0 = selector0.simpleSelector; | 354 var simpleSelector0 = selector0.simpleSelector; |
354 expect(simpleSelector0 is ClassSelector, true); | 355 expect(simpleSelector0 is ClassSelector, true); |
355 expect(selector0.isCombinatorNone, true); | 356 expect(selector0.isCombinatorNone, true); |
356 expect(simpleSelector0.name, "foobar"); | 357 expect(simpleSelector0.name, "foobar"); |
357 | 358 |
358 var selector1 = simpleSeqs[1]; | 359 var selector1 = simpleSeqs[1]; |
359 var simpleSelector1 = selector1.simpleSelector; | 360 var simpleSelector1 = selector1.simpleSelector; |
360 expect(simpleSelector1 is ClassSelector, true); | 361 expect(simpleSelector1 is ClassSelector, true); |
361 expect(selector1.isCombinatorGreater, true); | 362 expect(selector1.isCombinatorGreater, true); |
362 expect(simpleSelector1.name, "bar"); | 363 expect(simpleSelector1.name, "bar"); |
363 | 364 |
364 var selector2 = simpleSeqs[2]; | 365 var selector2 = simpleSeqs[2]; |
365 var simpleSelector2 = selector2.simpleSelector; | 366 var simpleSelector2 = selector2.simpleSelector; |
366 expect(simpleSelector2 is ClassSelector, true); | 367 expect(simpleSelector2 is ClassSelector, true); |
367 expect(selector2.isCombinatorPlus, true); | 368 expect(selector2.isCombinatorPlus, true); |
368 expect(simpleSelector2.name, "no-story"); | 369 expect(simpleSelector2.name, "no-story"); |
369 | 370 |
370 var selector3 = simpleSeqs[3]; | 371 var selector3 = simpleSeqs[3]; |
371 var simpleSelector3 = selector3.simpleSelector; | 372 expect(selector3.simpleSelector is NamespaceSelector, true); |
372 expect(simpleSelector3 is NamespaceSelector, true); | 373 var simpleSelector3 = selector3.simpleSelector as NamespaceSelector; |
373 expect(selector3.isCombinatorTilde, true); | 374 expect(selector3.isCombinatorTilde, true); |
374 expect(simpleSelector3.namespace, "myNs"); | 375 expect(simpleSelector3.namespace, "myNs"); |
375 var elementSelector = simpleSelector3.nameAsSimpleSelector; | 376 var elementSelector = simpleSelector3.nameAsSimpleSelector; |
376 expect(elementSelector is ElementSelector, true); | 377 expect(elementSelector is ElementSelector, true); |
377 expect(elementSelector.isWildcard, false); | 378 expect(elementSelector.isWildcard, false); |
378 expect(elementSelector.name, "div"); | 379 expect(elementSelector.name, "div"); |
379 | 380 |
380 var selector4 = simpleSeqs[4]; | 381 var selector4 = simpleSeqs[4]; |
381 var simpleSelector4 = selector4.simpleSelector; | 382 var simpleSelector4 = selector4.simpleSelector; |
382 expect(simpleSelector4 is IdSelector, true); | 383 expect(simpleSelector4 is IdSelector, true); |
383 expect(selector4.isCombinatorDescendant, true); | 384 expect(selector4.isCombinatorDescendant, true); |
384 expect(simpleSelector4.name, "elemId"); | 385 expect(simpleSelector4.name, "elemId"); |
385 } | 386 } |
386 | 387 |
387 void testWildcard() { | 388 void testWildcard() { |
388 var errors = []; | 389 var errors = <Message>[]; |
389 var input = "* {}"; | 390 var input = "* {}"; |
390 var stylesheet = parseCss(input, errors: errors); | 391 var stylesheet = parseCss(input, errors: errors); |
391 | 392 |
392 expect(stylesheet != null, true); | 393 expect(stylesheet != null, true); |
393 expect(errors.isEmpty, true, reason: errors.toString()); | 394 expect(errors.isEmpty, true, reason: errors.toString()); |
394 | 395 |
395 walkTree(stylesheet); | 396 walkTree(stylesheet); |
396 | 397 |
397 expect(stylesheet.topLevels.length, 1); | 398 expect(stylesheet.topLevels.length, 1); |
398 | 399 |
399 expect(stylesheet.topLevels[0] is RuleSet, true); | 400 expect(stylesheet.topLevels[0] is RuleSet, true); |
400 var ruleset = stylesheet.topLevels[0]; | 401 var ruleset = stylesheet.topLevels[0] as RuleSet; |
401 expect(ruleset.selectorGroup.selectors.length, 1); | 402 expect(ruleset.selectorGroup.selectors.length, 1); |
402 expect(ruleset.declarationGroup.declarations.length, 0); | 403 expect(ruleset.declarationGroup.declarations.length, 0); |
403 | 404 |
404 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 405 var simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
405 | 406 |
406 expect(simpleSeqs.length, 1); | 407 expect(simpleSeqs.length, 1); |
407 var simpSelector = simpleSeqs[0].simpleSelector; | 408 var simpSelector = simpleSeqs[0].simpleSelector; |
408 expect(simpSelector is ElementSelector, true); | 409 expect(simpSelector is ElementSelector, true); |
409 expect(simpleSeqs[0].isCombinatorNone, true); | 410 expect(simpleSeqs[0].isCombinatorNone, true); |
410 expect(simpSelector.isWildcard, true); | 411 expect(simpSelector.isWildcard, true); |
(...skipping 11 matching lines...) Expand all Loading... |
422 | 423 |
423 expect(stylesheet.topLevels[0] is RuleSet, true); | 424 expect(stylesheet.topLevels[0] is RuleSet, true); |
424 ruleset = stylesheet.topLevels[0]; | 425 ruleset = stylesheet.topLevels[0]; |
425 expect(ruleset.selectorGroup.selectors.length, 1); | 426 expect(ruleset.selectorGroup.selectors.length, 1); |
426 expect(ruleset.declarationGroup.declarations.length, 0); | 427 expect(ruleset.declarationGroup.declarations.length, 0); |
427 | 428 |
428 simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 429 simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
429 | 430 |
430 expect(simpleSeqs.length, 2); | 431 expect(simpleSeqs.length, 2); |
431 | 432 |
432 var selector0 = simpleSeqs[0]; | 433 { |
433 var simpleSelector0 = selector0.simpleSelector; | 434 var selector0 = simpleSeqs[0]; |
434 expect(simpleSelector0 is ElementSelector, true); | 435 var simpleSelector0 = selector0.simpleSelector; |
435 expect(selector0.isCombinatorNone, true); | 436 expect(simpleSelector0 is ElementSelector, true); |
436 expect(simpleSelector0.isWildcard, true); | 437 expect(selector0.isCombinatorNone, true); |
437 expect(simpleSelector0.name, "*"); | 438 expect(simpleSelector0.isWildcard, true); |
| 439 expect(simpleSelector0.name, "*"); |
| 440 } |
438 | 441 |
439 var selector1 = simpleSeqs[1]; | 442 var selector1 = simpleSeqs[1]; |
440 var simpleSelector1 = selector1.simpleSelector; | 443 var simpleSelector1 = selector1.simpleSelector; |
441 expect(simpleSelector1 is ClassSelector, true); | 444 expect(simpleSelector1 is ClassSelector, true); |
442 expect(selector1.isCombinatorNone, true); | 445 expect(selector1.isCombinatorNone, true); |
443 expect(simpleSelector1.name, "foobar"); | 446 expect(simpleSelector1.name, "foobar"); |
444 | 447 |
445 input = "myNs|*.foobar {}"; | 448 input = "myNs|*.foobar {}"; |
446 stylesheet = parseCss(input, errors: errors..clear()); | 449 stylesheet = parseCss(input, errors: errors..clear()); |
447 | 450 |
448 expect(stylesheet != null, true); | 451 expect(stylesheet != null, true); |
449 expect(errors.isEmpty, true, reason: errors.toString()); | 452 expect(errors.isEmpty, true, reason: errors.toString()); |
450 | 453 |
451 walkTree(stylesheet); | 454 walkTree(stylesheet); |
452 | 455 |
453 expect(stylesheet.topLevels.length, 1); | 456 expect(stylesheet.topLevels.length, 1); |
454 | 457 |
455 expect(stylesheet.topLevels[0] is RuleSet, true); | 458 expect(stylesheet.topLevels[0] is RuleSet, true); |
456 ruleset = stylesheet.topLevels[0]; | 459 ruleset = stylesheet.topLevels[0]; |
457 expect(ruleset.selectorGroup.selectors.length, 1); | 460 expect(ruleset.selectorGroup.selectors.length, 1); |
458 expect(ruleset.declarationGroup.declarations.length, 0); | 461 expect(ruleset.declarationGroup.declarations.length, 0); |
459 | 462 |
460 simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 463 simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
461 | 464 |
462 expect(simpleSeqs.length, 2); | 465 expect(simpleSeqs.length, 2); |
463 | 466 |
464 selector0 = simpleSeqs[0]; | 467 { |
465 simpleSelector0 = selector0.simpleSelector; | 468 var selector0 = simpleSeqs[0]; |
466 expect(simpleSelector0 is NamespaceSelector, true); | 469 expect(selector0.simpleSelector is NamespaceSelector, true); |
467 expect(selector0.isCombinatorNone, true); | 470 var simpleSelector0 = selector0.simpleSelector as NamespaceSelector; |
468 expect(simpleSelector0.isNamespaceWildcard, false); | 471 expect(selector0.isCombinatorNone, true); |
469 var elementSelector = simpleSelector0.nameAsSimpleSelector; | 472 expect(simpleSelector0.isNamespaceWildcard, false); |
470 expect("myNs", simpleSelector0.namespace); | 473 var elementSelector = simpleSelector0.nameAsSimpleSelector; |
471 expect(elementSelector.isWildcard, true); | 474 expect("myNs", simpleSelector0.namespace); |
472 expect("*", elementSelector.name); | 475 expect(elementSelector.isWildcard, true); |
| 476 expect("*", elementSelector.name); |
| 477 } |
473 | 478 |
474 selector1 = simpleSeqs[1]; | 479 selector1 = simpleSeqs[1]; |
475 simpleSelector1 = selector1.simpleSelector; | 480 simpleSelector1 = selector1.simpleSelector; |
476 expect(simpleSelector1 is ClassSelector, true); | 481 expect(simpleSelector1 is ClassSelector, true); |
477 expect(selector1.isCombinatorNone, true); | 482 expect(selector1.isCombinatorNone, true); |
478 expect("foobar", simpleSelector1.name); | 483 expect("foobar", simpleSelector1.name); |
479 | 484 |
480 input = "*|*.foobar {}"; | 485 input = "*|*.foobar {}"; |
481 stylesheet = parseCss(input, errors: errors..clear()); | 486 stylesheet = parseCss(input, errors: errors..clear()); |
482 | 487 |
483 expect(stylesheet != null, true); | 488 expect(stylesheet != null, true); |
484 expect(errors.isEmpty, true, reason: errors.toString()); | 489 expect(errors.isEmpty, true, reason: errors.toString()); |
485 | 490 |
486 walkTree(stylesheet); | 491 walkTree(stylesheet); |
487 | 492 |
488 expect(stylesheet.topLevels[0] is RuleSet, true); | 493 expect(stylesheet.topLevels[0] is RuleSet, true); |
489 ruleset = stylesheet.topLevels[0]; | 494 ruleset = stylesheet.topLevels[0]; |
490 expect(ruleset.selectorGroup.selectors.length, 1); | 495 expect(ruleset.selectorGroup.selectors.length, 1); |
491 expect(ruleset.declarationGroup.declarations.length, 0); | 496 expect(ruleset.declarationGroup.declarations.length, 0); |
492 | 497 |
493 simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; | 498 simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences; |
494 | 499 |
495 expect(simpleSeqs.length, 2); | 500 expect(simpleSeqs.length, 2); |
496 | 501 |
497 selector0 = simpleSeqs[0]; | 502 { |
498 simpleSelector0 = selector0.simpleSelector; | 503 var selector0 = simpleSeqs[0]; |
499 expect(simpleSelector0 is NamespaceSelector, true); | 504 expect(selector0.simpleSelector is NamespaceSelector, true); |
500 expect(selector0.isCombinatorNone, true); | 505 var simpleSelector0 = selector0.simpleSelector as NamespaceSelector; |
501 expect(simpleSelector0.isNamespaceWildcard, true); | 506 expect(selector0.isCombinatorNone, true); |
502 expect("*", simpleSelector0.namespace); | 507 expect(simpleSelector0.isNamespaceWildcard, true); |
503 elementSelector = simpleSelector0.nameAsSimpleSelector; | 508 expect("*", simpleSelector0.namespace); |
504 expect(elementSelector.isWildcard, true); | 509 var elementSelector = simpleSelector0.nameAsSimpleSelector; |
505 expect("*", elementSelector.name); | 510 expect(elementSelector.isWildcard, true); |
| 511 expect("*", elementSelector.name); |
| 512 } |
506 | 513 |
507 selector1 = simpleSeqs[1]; | 514 selector1 = simpleSeqs[1]; |
508 simpleSelector1 = selector1.simpleSelector; | 515 simpleSelector1 = selector1.simpleSelector; |
509 expect(simpleSelector1 is ClassSelector, true); | 516 expect(simpleSelector1 is ClassSelector, true); |
510 expect(selector1.isCombinatorNone, true); | 517 expect(selector1.isCombinatorNone, true); |
511 expect("foobar", simpleSelector1.name); | 518 expect("foobar", simpleSelector1.name); |
512 } | 519 } |
513 | 520 |
514 /** Test List<int> as input to parser. */ | 521 /** Test List<int> as input to parser. */ |
515 void testArrayOfChars() { | 522 void testArrayOfChars() { |
516 var errors = []; | 523 var errors = <Message>[]; |
517 var input = '<![CDATA[.foo { ' | 524 var input = '<![CDATA[.foo { ' |
518 'color: red; left: 20px; top: 20px; width: 100px; height:200px' | 525 'color: red; left: 20px; top: 20px; width: 100px; height:200px' |
519 '}' | 526 '}' |
520 '#div {' | 527 '#div {' |
521 'color : #00F578; border-color: #878787;' | 528 'color : #00F578; border-color: #878787;' |
522 '}]]>'; | 529 '}]]>'; |
523 | 530 |
524 var stylesheet = parse(UTF8.encode(input), errors: errors); | 531 var stylesheet = parse(UTF8.encode(input), errors: errors); |
525 | 532 |
526 expect(stylesheet != null, true); | 533 expect(stylesheet != null, true); |
527 expect(errors.isEmpty, true, reason: errors.toString()); | 534 expect(errors.isEmpty, true, reason: errors.toString()); |
528 | 535 |
529 expect(prettyPrint(stylesheet), r''' | 536 expect(prettyPrint(stylesheet), r''' |
530 .foo { | 537 .foo { |
531 color: #f00; | 538 color: #f00; |
532 left: 20px; | 539 left: 20px; |
533 top: 20px; | 540 top: 20px; |
534 width: 100px; | 541 width: 100px; |
535 height: 200px; | 542 height: 200px; |
536 } | 543 } |
537 #div { | 544 #div { |
538 color: #00F578; | 545 color: #00F578; |
539 border-color: #878787; | 546 border-color: #878787; |
540 }'''); | 547 }'''); |
541 } | 548 } |
542 | 549 |
543 void testPseudo() { | 550 void testPseudo() { |
544 var errors = []; | 551 var errors = <Message>[]; |
545 | 552 |
546 final input = r''' | 553 final input = r''' |
547 html:lang(fr-ca) { quotes: '" ' ' "' } | 554 html:lang(fr-ca) { quotes: '" ' ' "' } |
548 zoom: { } | 555 zoom: { } |
549 | 556 |
550 a:link { color: red } | 557 a:link { color: red } |
551 :link { color: blue } | 558 :link { color: blue } |
552 | 559 |
553 a:focus { background: yellow } | 560 a:focus { background: yellow } |
554 a:focus:hover { background: white } | 561 a:focus:hover { background: white } |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
636 | 643 |
637 void testAttribute() { | 644 void testAttribute() { |
638 // TODO(terry): Implement | 645 // TODO(terry): Implement |
639 } | 646 } |
640 | 647 |
641 void testNegation() { | 648 void testNegation() { |
642 // TODO(terry): Implement | 649 // TODO(terry): Implement |
643 } | 650 } |
644 | 651 |
645 void testHost() { | 652 void testHost() { |
646 var errors = []; | 653 var errors = <Message>[]; |
647 var input = '@host { ' | 654 var input = '@host { ' |
648 ':scope {' | 655 ':scope {' |
649 'white-space: nowrap;' | 656 'white-space: nowrap;' |
650 'overflow-style: marquee-line;' | 657 'overflow-style: marquee-line;' |
651 'overflow-x: marquee;' | 658 'overflow-x: marquee;' |
652 '}' | 659 '}' |
653 '* { color: red; }' | 660 '* { color: red; }' |
654 '*:hover { font-weight: bold; }' | 661 '*:hover { font-weight: bold; }' |
655 ':nth-child(odd) { color: blue; }' | 662 ':nth-child(odd) { color: blue; }' |
656 '}'; | 663 '}'; |
(...skipping 14 matching lines...) Expand all Loading... |
671 *:hover { | 678 *:hover { |
672 font-weight: bold; | 679 font-weight: bold; |
673 } | 680 } |
674 :nth-child(odd) { | 681 :nth-child(odd) { |
675 color: #00f; | 682 color: #00f; |
676 } | 683 } |
677 }'''); | 684 }'''); |
678 } | 685 } |
679 | 686 |
680 void testStringEscape() { | 687 void testStringEscape() { |
681 var errors = []; | 688 var errors = <Message>[]; |
682 var input = r'''a { foo: '{"text" : "a\\\""}' }'''; | 689 var input = r'''a { foo: '{"text" : "a\\\""}' }'''; |
683 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); | 690 var stylesheet = parseCss(input, errors: errors, opts: simpleOptions); |
684 expect(stylesheet != null, true); | 691 expect(stylesheet != null, true); |
685 expect(errors.isEmpty, true, reason: errors.toString()); | 692 expect(errors.isEmpty, true, reason: errors.toString()); |
686 | 693 |
687 expect(prettyPrint(stylesheet), r''' | 694 expect(prettyPrint(stylesheet), r''' |
688 a { | 695 a { |
689 foo: '{"text" : "a\\\""}'; | 696 foo: '{"text" : "a\\\""}'; |
690 }'''); | 697 }'''); |
691 } | 698 } |
692 | 699 |
693 // TODO(terry): Move to emitter_test.dart when real emitter exist. | 700 // TODO(terry): Move to emitter_test.dart when real emitter exist. |
694 void testEmitter() { | 701 void testEmitter() { |
695 var errors = []; | 702 var errors = <Message>[]; |
696 var input = '.foo { ' | 703 var input = '.foo { ' |
697 'color: red; left: 20px; top: 20px; width: 100px; height:200px' | 704 'color: red; left: 20px; top: 20px; width: 100px; height:200px' |
698 '}' | 705 '}' |
699 '#div {' | 706 '#div {' |
700 'color : #00F578; border-color: #878787;' | 707 'color : #00F578; border-color: #878787;' |
701 '}'; | 708 '}'; |
702 var stylesheet = parseCss(input, errors: errors); | 709 var stylesheet = parseCss(input, errors: errors); |
703 | 710 |
704 expect(stylesheet != null, true); | 711 expect(stylesheet != null, true); |
705 expect(errors.isEmpty, true, reason: errors.toString()); | 712 expect(errors.isEmpty, true, reason: errors.toString()); |
(...skipping 25 matching lines...) Expand all Loading... |
731 test('Combinator', testCombinator); | 738 test('Combinator', testCombinator); |
732 test('Wildcards', testWildcard); | 739 test('Wildcards', testWildcard); |
733 test('Pseudo', testPseudo); | 740 test('Pseudo', testPseudo); |
734 test('Attributes', testAttribute); | 741 test('Attributes', testAttribute); |
735 test('Negation', testNegation); | 742 test('Negation', testNegation); |
736 test('@host', testHost); | 743 test('@host', testHost); |
737 test('stringEscape', testStringEscape); | 744 test('stringEscape', testStringEscape); |
738 test('Parse List<int> as input', testArrayOfChars); | 745 test('Parse List<int> as input', testArrayOfChars); |
739 test('Simple Emitter', testEmitter); | 746 test('Simple Emitter', testEmitter); |
740 } | 747 } |
OLD | NEW |