Index: utils/tests/css/src/ExpressionTest.dart |
diff --git a/utils/tests/css/src/ExpressionTest.dart b/utils/tests/css/src/ExpressionTest.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..885bd2cd4c0ba0bfd2ea6d2ebc5b9e445f3b8d8a |
--- /dev/null |
+++ b/utils/tests/css/src/ExpressionTest.dart |
@@ -0,0 +1,440 @@ |
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+#import('../../../../frog/lang.dart', prefix:'lang'); |
+#import("../../../css/css.dart"); |
+ |
+class SelectorLiteralTest { |
+ |
+ static testMain() { |
+ initCssWorld(); |
+ |
+ testClass(); |
+ testId(); |
+ testElement(); |
+ testNamespace(); |
+ testSelectorGroups(); |
+ testCombinator(); |
+ testWildcard(); |
+ testPseudo(); |
+ testAttribute(); |
+ testNegation(); |
+ } |
+ |
+ static void testClass() { |
+ Parser parser0 = new Parser(new lang.SourceFile( |
jimhug
2011/11/10 17:58:56
Am I missing something, or could you split this in
terry
2011/11/16 14:00:22
I don't expect this to be how it's used but I've h
|
+ lang.SourceFile.IN_MEMORY_FILE, ".foobar")); |
+ |
+ List<SelectorGroup> exprTree0 = parser0.expression(); |
+ Expect.isNotNull(exprTree0); |
+ Expect.equals(exprTree0.length, 1); |
+ for (selectorGroup in exprTree0) { |
+ Expect.equals(selectorGroup.selectors.length, 1); |
+ for (selector in selectorGroup.selectors) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "foobar"); |
+ } |
+ } |
+ |
+ Parser parser1 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, ".foobar .bar .no-story")); |
+ |
+ List<SelectorGroup> exprTree1 = parser1.expression(); |
+ Expect.isNotNull(exprTree1); |
+ Expect.equals(exprTree1.length, 1); |
+ for (selectorGroup in exprTree1) { |
+ var idx = 0; |
+ for (selector in selectorGroup.selectors) { |
+ if (idx == 0) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "foobar"); |
+ } else if (idx == 1) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "bar"); |
+ } else if (idx == 2) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "no-story"); |
+ } else { |
+ Expect.fail("unexpected expression"); |
+ } |
+ |
+ idx++; |
+ } |
+ } |
+ } |
+ |
+ static void testId() { |
+ Parser parser0 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, "#elemId")); |
+ |
+ List<SelectorGroup> exprTree = parser0.expression(); |
+ Expect.isNotNull(exprTree); |
+ Expect.equals(exprTree.length, 1); |
+ Expect.isNotNull(exprTree); |
+ for (selectorGroup in exprTree) { |
+ Expect.equals(selectorGroup.selectors.length, 1); |
+ for (selector in selectorGroup.selectors) { |
+ Expect.isTrue(selector is IdSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "elemId"); |
+ } |
+ } |
+ } |
+ |
+ static void testElement() { |
+ Parser parser0 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, "div")); |
+ List<SelectorGroup> exprTree0 = parser0.expression(); |
+ Expect.isNotNull(exprTree0); |
+ Expect.equals(exprTree0.length, 1); |
+ for (selectorGroup in exprTree0) { |
+ Expect.equals(selectorGroup.selectors.length, 1); |
+ for (selector in selectorGroup.selectors) { |
+ Expect.isTrue(selector is ElementSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "div"); |
+ } |
+ } |
+ |
+ Parser parser1 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, "div div span")); |
+ List<SelectorGroup> exprTree1 = parser1.expression(); |
+ Expect.isNotNull(exprTree1); |
+ Expect.equals(exprTree1.length, 1); |
+ for (selectorGroup in exprTree1) { |
+ var idx = 0; |
+ for (selector in selectorGroup.selectors) { |
+ if (idx == 0) { |
+ Expect.isTrue(selector is ElementSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "div"); |
+ } else if (idx == 1) { |
+ Expect.isTrue(selector is ElementSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "div"); |
+ } else if (idx == 2) { |
+ Expect.isTrue(selector is ElementSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "span"); |
+ } else { |
+ Expect.fail("unexpected expression"); |
+ } |
+ |
+ idx++; |
+ } |
+ } |
+ } |
+ |
+ static void testNamespace() { |
+ Parser parser0 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, "ns1|div")); |
+ List<SelectorGroup> exprTree0 = parser0.expression(); |
+ Expect.isNotNull(exprTree0); |
+ Expect.equals(exprTree0.length, 1); |
+ for (selectorGroup in exprTree0) { |
+ Expect.equals(selectorGroup.selectors.length, 1); |
+ for (selector in selectorGroup.selectors) { |
+ Expect.isTrue(selector is NamespaceSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.isFalse(selector.isNamespaceWildcard()); |
+ Expect.equals(selector.namespace, "ns1"); |
+ ElementSelector elementSelector = selector.nameAsElementSelector; |
+ Expect.isTrue(elementSelector is ElementSelector); |
+ Expect.isFalse(elementSelector.isWildcard()); |
+ Expect.equals(elementSelector.name, "div"); |
+ } |
+ } |
+ |
+ Parser parser1 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, "ns1|div div ns2|span .foobar")); |
+ List<SelectorGroup> exprTree1 = parser1.expression(); |
+ Expect.isNotNull(exprTree1); |
+ Expect.equals(exprTree1.length, 1); |
+ for (selectorGroup in exprTree1) { |
+ var idx = 0; |
+ for (selector in selectorGroup.selectors) { |
+ if (idx == 0) { |
+ Expect.isTrue(selector is NamespaceSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.namespace, "ns1"); |
+ ElementSelector elementSelector = selector.nameAsElementSelector; |
+ Expect.isTrue(elementSelector is ElementSelector); |
+ Expect.isFalse(elementSelector.isWildcard()); |
+ Expect.equals(elementSelector.name, "div"); |
+ } else if (idx == 1) { |
+ Expect.isTrue(selector is ElementSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "div"); |
+ } else if (idx == 2) { |
+ Expect.isTrue(selector is NamespaceSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.namespace, "ns2"); |
+ ElementSelector elementSelector = selector.nameAsElementSelector; |
+ Expect.isTrue(elementSelector is ElementSelector); |
+ Expect.isFalse(elementSelector.isWildcard()); |
+ Expect.equals(elementSelector.name, "span"); |
+ } else if (idx == 3) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "foobar"); |
+ } else { |
+ Expect.fail("unexpected expression"); |
+ } |
+ |
+ idx++; |
+ } |
+ } |
+ } |
+ |
+ static void testSelectorGroups() { |
+ Parser parser0 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, |
+ "div, .foobar ,#elemId, .xyzzy .test, ns1|div div #elemId .foobar")); |
+ List<SelectorGroup> exprTree0 = parser0.expression(); |
+ Expect.isNotNull(exprTree0); |
+ Expect.equals(exprTree0.length, 5); |
+ var groupIdx = 0; |
+ for (selectorGroup in exprTree0) { |
+ var idx = 0; |
+ for (selector in selectorGroup.selectors) { |
+ switch (groupIdx) { |
+ case 0: // First selector group. |
+ Expect.equals(selectorGroup.selectors.length, 1); |
+ Expect.isTrue(selector is ElementSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "div"); |
+ break; |
+ case 1: // Second selector group. |
+ Expect.equals(selectorGroup.selectors.length, 1); |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "foobar"); |
+ break; |
+ case 2: // Third selector group. |
+ Expect.equals(selectorGroup.selectors.length, 1); |
+ Expect.isTrue(selector is IdSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "elemId"); |
+ break; |
+ case 3: // Fourth selector group. |
+ Expect.equals(selectorGroup.selectors.length, 2); |
+ if (idx == 0) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "xyzzy"); |
+ } else if (idx == 1) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "test"); |
+ } else { |
+ Expect.fail("unexpected expression"); |
+ } |
+ break; |
+ case 4: // Fifth selector group. |
+ Expect.equals(selectorGroup.selectors.length, 4); |
+ if (idx == 0) { |
+ Expect.isTrue(selector is NamespaceSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.namespace, "ns1"); |
+ ElementSelector elementSelector = selector.nameAsElementSelector; |
+ Expect.isTrue(elementSelector is ElementSelector); |
+ Expect.isFalse(elementSelector.isWildcard()); |
+ Expect.equals(elementSelector.name, "div"); |
+ } else if (idx == 1) { |
+ Expect.isTrue(selector is ElementSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "div"); |
+ } else if (idx == 2) { |
+ Expect.isTrue(selector is IdSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "elemId"); |
+ } else if (idx == 3) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "foobar"); |
+ } else { |
+ Expect.fail("unexpected expression"); |
+ } |
+ break; |
+ } |
+ idx++; |
+ } |
+ groupIdx++; |
+ } |
+ } |
+ |
+ static void testCombinator() { |
+ Parser parser = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, |
+ ".foobar > .bar + .no-story ~ myNs|div #elemId")); |
+ |
+ List<SelectorGroup> exprTree = parser.expression(); |
+ Expect.isNotNull(exprTree); |
+ Expect.equals(exprTree.length, 1); |
+ for (selectorGroup in exprTree) { |
+ var idx = 0; |
+ Expect.equals(selectorGroup.selectors.length, 5); |
+ for (selector in selectorGroup.selectors) { |
+ if (idx == 0) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "foobar"); |
+ } else if (idx == 1) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorGreater()); |
+ Expect.equals(selector.name, "bar"); |
+ } else if (idx == 2) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorPlus()); |
+ Expect.equals(selector.name, "no-story"); |
+ } else if (idx == 3) { |
+ Expect.isTrue(selector is NamespaceSelector); |
+ Expect.isTrue(selector.isCombinatorTilde()); |
+ Expect.equals(selector.namespace, "myNs"); |
+ ElementSelector elementSelector = selector.nameAsElementSelector; |
+ Expect.isTrue(elementSelector is ElementSelector); |
+ Expect.isFalse(elementSelector.isWildcard()); |
+ Expect.equals(elementSelector.name, "div"); |
+ } else if (idx == 4) { |
+ Expect.isTrue(selector is IdSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "elemId"); |
+ } else { |
+ Expect.fail("unexpected expression"); |
+ } |
+ |
+ idx++; |
+ } |
+ } |
+ } |
+ |
+ static void testWildcard() { |
+ Parser parser0 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, "*")); |
+ |
+ List<SelectorGroup> exprTree0 = parser0.expression(); |
+ Expect.isNotNull(exprTree0); |
+ Expect.equals(exprTree0.length, 1); |
+ for (selectorGroup in exprTree0) { |
+ Expect.equals(selectorGroup.selectors.length, 1); |
+ for (selector in selectorGroup.selectors) { |
+ Expect.isTrue(selector is ElementSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.isTrue(selector.isWildcard()); |
+ Expect.equals(selector.name, "*"); |
+ } |
+ } |
+ |
+ Parser parser1 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, "*.foobar")); |
+ |
+ List<SelectorGroup> exprTree1 = parser1.expression(); |
+ Expect.isNotNull(exprTree1); |
+ Expect.equals(exprTree1.length, 1); |
+ for (selectorGroup in exprTree1) { |
+ var idx = 0; |
+ for (selector in selectorGroup.selectors) { |
+ Expect.equals(selectorGroup.selectors.length, 2); |
+ if (idx == 0) { |
+ Expect.isTrue(selector is ElementSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.isTrue(selector.isWildcard()); |
+ Expect.equals(selector.name, "*"); |
+ } else if (idx == 1) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "foobar"); |
+ } else { |
+ Expect.fail("unexpected expression"); |
+ } |
+ |
+ idx++; |
+ } |
+ } |
+ |
+ Parser parser2 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, "myNs|*.foobar")); |
+ |
+ List<SelectorGroup> exprTree2 = parser2.expression(); |
+ Expect.isNotNull(exprTree2); |
+ Expect.equals(exprTree2.length, 1); |
+ for (selectorGroup in exprTree2) { |
+ var idx = 0; |
+ for (selector in selectorGroup.selectors) { |
+ Expect.equals(selectorGroup.selectors.length, 2); |
+ if (idx == 0) { |
+ Expect.isTrue(selector is NamespaceSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.isFalse(selector.isNamespaceWildcard()); |
+ Expect.isTrue(selector.isWildcardElement()); |
+ Expect.equals(selector.namespace, "myNs"); |
+ ElementSelector elementSelector = selector.nameAsElementSelector; |
+ Expect.isTrue(elementSelector.isWildcard()); |
+ Expect.equals(elementSelector.name, "*"); |
+ } else if (idx == 1) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "foobar"); |
+ } else { |
+ Expect.fail("unexpected expression"); |
+ } |
+ |
+ idx++; |
+ } |
+ } |
+ |
+ Parser parser3 = new Parser(new lang.SourceFile( |
+ lang.SourceFile.IN_MEMORY_FILE, "*|*.foobar")); |
+ |
+ List<SelectorGroup> exprTree3 = parser3.expression(); |
+ Expect.isNotNull(exprTree3); |
+ Expect.equals(exprTree3.length, 1); |
+ for (selectorGroup in exprTree3) { |
+ var idx = 0; |
+ for (selector in selectorGroup.selectors) { |
+ Expect.equals(selectorGroup.selectors.length, 2); |
+ if (idx == 0) { |
+ Expect.isTrue(selector is NamespaceSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.isTrue(selector.isNamespaceWildcard()); |
+ Expect.equals(selector.namespace, "*"); |
+ Expect.isTrue(selector.isWildcardElement()); |
+ ElementSelector elementSelector = selector.nameAsElementSelector; |
+ Expect.isTrue(elementSelector.isWildcard()); |
+ Expect.equals(elementSelector.name, "*"); |
+ } else if (idx == 1) { |
+ Expect.isTrue(selector is ClassSelector); |
+ Expect.isTrue(selector.isCombinatorNone()); |
+ Expect.equals(selector.name, "foobar"); |
+ } else { |
+ Expect.fail("unexpected expression"); |
+ } |
+ |
+ idx++; |
+ } |
+ } |
+ } |
+ |
+ static void testPseudo() { |
+ // TODO(terry): Implement |
+ } |
+ |
+ static void testAttribute() { |
+ // TODO(terry): Implement |
+ } |
+ |
+ static void testNegation() { |
+ // TODO(terry): Implement |
+ } |
+ |
+} |
+ |
+ |
+main() { |
+ SelectorLiteralTest.testMain(); |
+} |