OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 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. |
| 4 |
| 5 #import("../../../css/css.dart"); |
| 6 |
| 7 class SelectorLiteralTest { |
| 8 |
| 9 static testMain() { |
| 10 testClass(); |
| 11 testId(); |
| 12 testElement(); |
| 13 testNamespace(); |
| 14 testSelectorGroups(); |
| 15 testCombinator(); |
| 16 testWildcard(); |
| 17 testPseudo(); |
| 18 testAttribute(); |
| 19 testNegation(); |
| 20 } |
| 21 |
| 22 static void testClass() { |
| 23 Parser parser0 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 24 ".foobar")); |
| 25 |
| 26 List<SelectorGroup> exprTree0 = parser0.expression(); |
| 27 Expect.isNotNull(exprTree0); |
| 28 Expect.equals(exprTree0.length, 1); |
| 29 for (selectorGroup in exprTree0) { |
| 30 Expect.equals(selectorGroup.selectors.length, 1); |
| 31 for (selector in selectorGroup.selectors) { |
| 32 Expect.isTrue(selector is ClassSelector); |
| 33 Expect.isTrue(selector.isCombinatorNone()); |
| 34 Expect.equals(selector.name, "foobar"); |
| 35 } |
| 36 } |
| 37 |
| 38 Parser parser1 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 39 ".foobar .bar .no-story")); |
| 40 |
| 41 List<SelectorGroup> exprTree1 = parser1.expression(); |
| 42 Expect.isNotNull(exprTree1); |
| 43 Expect.equals(exprTree1.length, 1); |
| 44 for (selectorGroup in exprTree1) { |
| 45 var idx = 0; |
| 46 for (selector in selectorGroup.selectors) { |
| 47 if (idx == 0) { |
| 48 Expect.isTrue(selector is ClassSelector); |
| 49 Expect.isTrue(selector.isCombinatorNone()); |
| 50 Expect.equals(selector.name, "foobar"); |
| 51 } else if (idx == 1) { |
| 52 Expect.isTrue(selector is ClassSelector); |
| 53 Expect.isTrue(selector.isCombinatorNone()); |
| 54 Expect.equals(selector.name, "bar"); |
| 55 } else if (idx == 2) { |
| 56 Expect.isTrue(selector is ClassSelector); |
| 57 Expect.isTrue(selector.isCombinatorNone()); |
| 58 Expect.equals(selector.name, "no-story"); |
| 59 } else { |
| 60 Expect.fail("unexpected expression"); |
| 61 } |
| 62 |
| 63 idx++; |
| 64 } |
| 65 } |
| 66 } |
| 67 |
| 68 static void testId() { |
| 69 Parser parser0 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 70 "#elemId")); |
| 71 |
| 72 List<SelectorGroup> exprTree = parser0.expression(); |
| 73 Expect.isNotNull(exprTree); |
| 74 Expect.equals(exprTree.length, 1); |
| 75 Expect.isNotNull(exprTree); |
| 76 for (selectorGroup in exprTree) { |
| 77 Expect.equals(selectorGroup.selectors.length, 1); |
| 78 for (selector in selectorGroup.selectors) { |
| 79 Expect.isTrue(selector is IdSelector); |
| 80 Expect.isTrue(selector.isCombinatorNone()); |
| 81 Expect.equals(selector.name, "elemId"); |
| 82 } |
| 83 } |
| 84 } |
| 85 |
| 86 static void testElement() { |
| 87 Parser parser0 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 88 "div")); |
| 89 List<SelectorGroup> exprTree0 = parser0.expression(); |
| 90 Expect.isNotNull(exprTree0); |
| 91 Expect.equals(exprTree0.length, 1); |
| 92 for (selectorGroup in exprTree0) { |
| 93 Expect.equals(selectorGroup.selectors.length, 1); |
| 94 for (selector in selectorGroup.selectors) { |
| 95 Expect.isTrue(selector is ElementSelector); |
| 96 Expect.isTrue(selector.isCombinatorNone()); |
| 97 Expect.equals(selector.name, "div"); |
| 98 } |
| 99 } |
| 100 |
| 101 Parser parser1 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 102 "div div span")); |
| 103 List<SelectorGroup> exprTree1 = parser1.expression(); |
| 104 Expect.isNotNull(exprTree1); |
| 105 Expect.equals(exprTree1.length, 1); |
| 106 for (selectorGroup in exprTree1) { |
| 107 var idx = 0; |
| 108 for (selector in selectorGroup.selectors) { |
| 109 if (idx == 0) { |
| 110 Expect.isTrue(selector is ElementSelector); |
| 111 Expect.isTrue(selector.isCombinatorNone()); |
| 112 Expect.equals(selector.name, "div"); |
| 113 } else if (idx == 1) { |
| 114 Expect.isTrue(selector is ElementSelector); |
| 115 Expect.isTrue(selector.isCombinatorNone()); |
| 116 Expect.equals(selector.name, "div"); |
| 117 } else if (idx == 2) { |
| 118 Expect.isTrue(selector is ElementSelector); |
| 119 Expect.isTrue(selector.isCombinatorNone()); |
| 120 Expect.equals(selector.name, "span"); |
| 121 } else { |
| 122 Expect.fail("unexpected expression"); |
| 123 } |
| 124 |
| 125 idx++; |
| 126 } |
| 127 } |
| 128 } |
| 129 |
| 130 static void testNamespace() { |
| 131 Parser parser0 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 132 "ns1|div")); |
| 133 List<SelectorGroup> exprTree0 = parser0.expression(); |
| 134 Expect.isNotNull(exprTree0); |
| 135 Expect.equals(exprTree0.length, 1); |
| 136 for (selectorGroup in exprTree0) { |
| 137 Expect.equals(selectorGroup.selectors.length, 1); |
| 138 for (selector in selectorGroup.selectors) { |
| 139 Expect.isTrue(selector is NamespaceSelector); |
| 140 Expect.isTrue(selector.isCombinatorNone()); |
| 141 Expect.isFalse(selector.isNamespaceWildcard()); |
| 142 Expect.equals(selector.namespace, "ns1"); |
| 143 ElementSelector elementSelector = selector.nameAsElementSelector; |
| 144 Expect.isTrue(elementSelector is ElementSelector); |
| 145 Expect.isFalse(elementSelector.isWildcard()); |
| 146 Expect.equals(elementSelector.name, "div"); |
| 147 } |
| 148 } |
| 149 |
| 150 Parser parser1 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 151 "ns1|div div ns2|span .foobar")); |
| 152 List<SelectorGroup> exprTree1 = parser1.expression(); |
| 153 Expect.isNotNull(exprTree1); |
| 154 Expect.equals(exprTree1.length, 1); |
| 155 for (selectorGroup in exprTree1) { |
| 156 var idx = 0; |
| 157 for (selector in selectorGroup.selectors) { |
| 158 if (idx == 0) { |
| 159 Expect.isTrue(selector is NamespaceSelector); |
| 160 Expect.isTrue(selector.isCombinatorNone()); |
| 161 Expect.equals(selector.namespace, "ns1"); |
| 162 ElementSelector elementSelector = selector.nameAsElementSelector; |
| 163 Expect.isTrue(elementSelector is ElementSelector); |
| 164 Expect.isFalse(elementSelector.isWildcard()); |
| 165 Expect.equals(elementSelector.name, "div"); |
| 166 } else if (idx == 1) { |
| 167 Expect.isTrue(selector is ElementSelector); |
| 168 Expect.isTrue(selector.isCombinatorNone()); |
| 169 Expect.equals(selector.name, "div"); |
| 170 } else if (idx == 2) { |
| 171 Expect.isTrue(selector is NamespaceSelector); |
| 172 Expect.isTrue(selector.isCombinatorNone()); |
| 173 Expect.equals(selector.namespace, "ns2"); |
| 174 ElementSelector elementSelector = selector.nameAsElementSelector; |
| 175 Expect.isTrue(elementSelector is ElementSelector); |
| 176 Expect.isFalse(elementSelector.isWildcard()); |
| 177 Expect.equals(elementSelector.name, "span"); |
| 178 } else if (idx == 3) { |
| 179 Expect.isTrue(selector is ClassSelector); |
| 180 Expect.isTrue(selector.isCombinatorNone()); |
| 181 Expect.equals(selector.name, "foobar"); |
| 182 } else { |
| 183 Expect.fail("unexpected expression"); |
| 184 } |
| 185 |
| 186 idx++; |
| 187 } |
| 188 } |
| 189 } |
| 190 |
| 191 static void testSelectorGroups() { |
| 192 Parser parser0 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 193 "div, .foobar ,#elemId, .xyzzy .test, ns1|div div #elemId .foobar")); |
| 194 List<SelectorGroup> exprTree0 = parser0.expression(); |
| 195 Expect.isNotNull(exprTree0); |
| 196 Expect.equals(exprTree0.length, 5); |
| 197 var groupIdx = 0; |
| 198 for (selectorGroup in exprTree0) { |
| 199 var idx = 0; |
| 200 for (selector in selectorGroup.selectors) { |
| 201 switch (groupIdx) { |
| 202 case 0: // First selector group. |
| 203 Expect.equals(selectorGroup.selectors.length, 1); |
| 204 Expect.isTrue(selector is ElementSelector); |
| 205 Expect.isTrue(selector.isCombinatorNone()); |
| 206 Expect.equals(selector.name, "div"); |
| 207 break; |
| 208 case 1: // Second selector group. |
| 209 Expect.equals(selectorGroup.selectors.length, 1); |
| 210 Expect.isTrue(selector is ClassSelector); |
| 211 Expect.isTrue(selector.isCombinatorNone()); |
| 212 Expect.equals(selector.name, "foobar"); |
| 213 break; |
| 214 case 2: // Third selector group. |
| 215 Expect.equals(selectorGroup.selectors.length, 1); |
| 216 Expect.isTrue(selector is IdSelector); |
| 217 Expect.isTrue(selector.isCombinatorNone()); |
| 218 Expect.equals(selector.name, "elemId"); |
| 219 break; |
| 220 case 3: // Fourth selector group. |
| 221 Expect.equals(selectorGroup.selectors.length, 2); |
| 222 if (idx == 0) { |
| 223 Expect.isTrue(selector is ClassSelector); |
| 224 Expect.isTrue(selector.isCombinatorNone()); |
| 225 Expect.equals(selector.name, "xyzzy"); |
| 226 } else if (idx == 1) { |
| 227 Expect.isTrue(selector is ClassSelector); |
| 228 Expect.isTrue(selector.isCombinatorNone()); |
| 229 Expect.equals(selector.name, "test"); |
| 230 } else { |
| 231 Expect.fail("unexpected expression"); |
| 232 } |
| 233 break; |
| 234 case 4: // Fifth selector group. |
| 235 Expect.equals(selectorGroup.selectors.length, 4); |
| 236 if (idx == 0) { |
| 237 Expect.isTrue(selector is NamespaceSelector); |
| 238 Expect.isTrue(selector.isCombinatorNone()); |
| 239 Expect.equals(selector.namespace, "ns1"); |
| 240 ElementSelector elementSelector = selector.nameAsElementSelector; |
| 241 Expect.isTrue(elementSelector is ElementSelector); |
| 242 Expect.isFalse(elementSelector.isWildcard()); |
| 243 Expect.equals(elementSelector.name, "div"); |
| 244 } else if (idx == 1) { |
| 245 Expect.isTrue(selector is ElementSelector); |
| 246 Expect.isTrue(selector.isCombinatorNone()); |
| 247 Expect.equals(selector.name, "div"); |
| 248 } else if (idx == 2) { |
| 249 Expect.isTrue(selector is IdSelector); |
| 250 Expect.isTrue(selector.isCombinatorNone()); |
| 251 Expect.equals(selector.name, "elemId"); |
| 252 } else if (idx == 3) { |
| 253 Expect.isTrue(selector is ClassSelector); |
| 254 Expect.isTrue(selector.isCombinatorNone()); |
| 255 Expect.equals(selector.name, "foobar"); |
| 256 } else { |
| 257 Expect.fail("unexpected expression"); |
| 258 } |
| 259 break; |
| 260 } |
| 261 idx++; |
| 262 } |
| 263 groupIdx++; |
| 264 } |
| 265 } |
| 266 |
| 267 static void testCombinator() { |
| 268 Parser parser = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 269 ".foobar > .bar + .no-story ~ myNs|div #elemId")); |
| 270 |
| 271 List<SelectorGroup> exprTree = parser.expression(); |
| 272 Expect.isNotNull(exprTree); |
| 273 Expect.equals(exprTree.length, 1); |
| 274 for (selectorGroup in exprTree) { |
| 275 var idx = 0; |
| 276 Expect.equals(selectorGroup.selectors.length, 5); |
| 277 for (selector in selectorGroup.selectors) { |
| 278 if (idx == 0) { |
| 279 Expect.isTrue(selector is ClassSelector); |
| 280 Expect.isTrue(selector.isCombinatorNone()); |
| 281 Expect.equals(selector.name, "foobar"); |
| 282 } else if (idx == 1) { |
| 283 Expect.isTrue(selector is ClassSelector); |
| 284 Expect.isTrue(selector.isCombinatorGreater()); |
| 285 Expect.equals(selector.name, "bar"); |
| 286 } else if (idx == 2) { |
| 287 Expect.isTrue(selector is ClassSelector); |
| 288 Expect.isTrue(selector.isCombinatorPlus()); |
| 289 Expect.equals(selector.name, "no-story"); |
| 290 } else if (idx == 3) { |
| 291 Expect.isTrue(selector is NamespaceSelector); |
| 292 Expect.isTrue(selector.isCombinatorTilde()); |
| 293 Expect.equals(selector.namespace, "myNs"); |
| 294 ElementSelector elementSelector = selector.nameAsElementSelector; |
| 295 Expect.isTrue(elementSelector is ElementSelector); |
| 296 Expect.isFalse(elementSelector.isWildcard()); |
| 297 Expect.equals(elementSelector.name, "div"); |
| 298 } else if (idx == 4) { |
| 299 Expect.isTrue(selector is IdSelector); |
| 300 Expect.isTrue(selector.isCombinatorNone()); |
| 301 Expect.equals(selector.name, "elemId"); |
| 302 } else { |
| 303 Expect.fail("unexpected expression"); |
| 304 } |
| 305 |
| 306 idx++; |
| 307 } |
| 308 } |
| 309 } |
| 310 |
| 311 static void testWildcard() { |
| 312 Parser parser0 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, "*")); |
| 313 |
| 314 List<SelectorGroup> exprTree0 = parser0.expression(true); |
| 315 Expect.isNotNull(exprTree0); |
| 316 Expect.equals(exprTree0.length, 1); |
| 317 for (selectorGroup in exprTree0) { |
| 318 Expect.equals(selectorGroup.selectors.length, 1); |
| 319 for (selector in selectorGroup.selectors) { |
| 320 Expect.isTrue(selector is ElementSelector); |
| 321 Expect.isTrue(selector.isCombinatorNone()); |
| 322 Expect.isTrue(selector.isWildcard()); |
| 323 Expect.equals(selector.name, "*"); |
| 324 } |
| 325 } |
| 326 |
| 327 Parser parser1 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 328 "*.foobar")); |
| 329 |
| 330 List<SelectorGroup> exprTree1 = parser1.expression(); |
| 331 Expect.isNotNull(exprTree1); |
| 332 Expect.equals(exprTree1.length, 1); |
| 333 for (selectorGroup in exprTree1) { |
| 334 var idx = 0; |
| 335 for (selector in selectorGroup.selectors) { |
| 336 Expect.equals(selectorGroup.selectors.length, 2); |
| 337 if (idx == 0) { |
| 338 Expect.isTrue(selector is ElementSelector); |
| 339 Expect.isTrue(selector.isCombinatorNone()); |
| 340 Expect.isTrue(selector.isWildcard()); |
| 341 Expect.equals(selector.name, "*"); |
| 342 } else if (idx == 1) { |
| 343 Expect.isTrue(selector is ClassSelector); |
| 344 Expect.isTrue(selector.isCombinatorNone()); |
| 345 Expect.equals(selector.name, "foobar"); |
| 346 } else { |
| 347 Expect.fail("unexpected expression"); |
| 348 } |
| 349 |
| 350 idx++; |
| 351 } |
| 352 } |
| 353 |
| 354 Parser parser2 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 355 "myNs|*.foobar")); |
| 356 |
| 357 List<SelectorGroup> exprTree2 = parser2.expression(); |
| 358 Expect.isNotNull(exprTree2); |
| 359 Expect.equals(exprTree2.length, 1); |
| 360 for (selectorGroup in exprTree2) { |
| 361 var idx = 0; |
| 362 for (selector in selectorGroup.selectors) { |
| 363 Expect.equals(selectorGroup.selectors.length, 2); |
| 364 if (idx == 0) { |
| 365 Expect.isTrue(selector is NamespaceSelector); |
| 366 Expect.isTrue(selector.isCombinatorNone()); |
| 367 Expect.isFalse(selector.isNamespaceWildcard()); |
| 368 Expect.isTrue(selector.isWildcardElement()); |
| 369 Expect.equals(selector.namespace, "myNs"); |
| 370 ElementSelector elementSelector = selector.nameAsElementSelector; |
| 371 Expect.isTrue(elementSelector.isWildcard()); |
| 372 Expect.equals(elementSelector.name, "*"); |
| 373 } else if (idx == 1) { |
| 374 Expect.isTrue(selector is ClassSelector); |
| 375 Expect.isTrue(selector.isCombinatorNone()); |
| 376 Expect.equals(selector.name, "foobar"); |
| 377 } else { |
| 378 Expect.fail("unexpected expression"); |
| 379 } |
| 380 |
| 381 idx++; |
| 382 } |
| 383 } |
| 384 |
| 385 Parser parser3 = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE, |
| 386 "*|*.foobar")); |
| 387 |
| 388 List<SelectorGroup> exprTree3 = parser3.expression(); |
| 389 Expect.isNotNull(exprTree3); |
| 390 Expect.equals(exprTree3.length, 1); |
| 391 for (selectorGroup in exprTree3) { |
| 392 var idx = 0; |
| 393 for (selector in selectorGroup.selectors) { |
| 394 Expect.equals(selectorGroup.selectors.length, 2); |
| 395 if (idx == 0) { |
| 396 Expect.isTrue(selector is NamespaceSelector); |
| 397 Expect.isTrue(selector.isCombinatorNone()); |
| 398 Expect.isTrue(selector.isNamespaceWildcard()); |
| 399 Expect.equals(selector.namespace, "*"); |
| 400 Expect.isTrue(selector.isWildcardElement()); |
| 401 ElementSelector elementSelector = selector.nameAsElementSelector; |
| 402 Expect.isTrue(elementSelector.isWildcard()); |
| 403 Expect.equals(elementSelector.name, "*"); |
| 404 } else if (idx == 1) { |
| 405 Expect.isTrue(selector is ClassSelector); |
| 406 Expect.isTrue(selector.isCombinatorNone()); |
| 407 Expect.equals(selector.name, "foobar"); |
| 408 } else { |
| 409 Expect.fail("unexpected expression"); |
| 410 } |
| 411 |
| 412 idx++; |
| 413 } |
| 414 } |
| 415 } |
| 416 |
| 417 static void testPseudo() { |
| 418 // TODO(terry): Implement |
| 419 } |
| 420 |
| 421 static void testAttribute() { |
| 422 // TODO(terry): Implement |
| 423 } |
| 424 |
| 425 static void testNegation() { |
| 426 // TODO(terry): Implement |
| 427 } |
| 428 |
| 429 } |
| 430 |
| 431 |
| 432 main() { |
| 433 SelectorLiteralTest.testMain(); |
| 434 } |
OLD | NEW |