58a016634c
This doesn't include adding partofs; that will have to be done later. Review URL: https://codereview.chromium.org//11358145 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@14693 260f80e4-7a28-3924-810f-c04153c831b5
525 lines
18 KiB
Dart
525 lines
18 KiB
Dart
// 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.
|
|
|
|
library expression_tests;
|
|
import '../../css/css.dart';
|
|
|
|
main() {
|
|
initCssWorld();
|
|
|
|
testClass();
|
|
testId();
|
|
testElement();
|
|
testNamespace();
|
|
testSelectorGroups();
|
|
testCombinator();
|
|
testWildcard();
|
|
testPseudo();
|
|
testAttribute();
|
|
testNegation();
|
|
}
|
|
|
|
void testClass() {
|
|
Parser parser = new Parser(new SourceFile(
|
|
SourceFile.IN_MEMORY_FILE, ".foobar {}"));
|
|
|
|
Stylesheet stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
RuleSet ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
List<SimpleSelectorSequence> simpleSeqs =
|
|
ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
Expect.equals(simpleSeqs.length, 1);
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "foobar");
|
|
}
|
|
|
|
parser = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE,
|
|
".foobar .bar .no-story {}"));
|
|
|
|
stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
var idx = 0;
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
if (idx == 0) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "foobar");
|
|
} else if (idx == 1) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "bar");
|
|
} else if (idx == 2) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "no-story");
|
|
} else {
|
|
Expect.fail("unexpected expression");
|
|
}
|
|
|
|
idx++;
|
|
}
|
|
|
|
Expect.equals(simpleSeqs.length, idx);
|
|
}
|
|
|
|
void testId() {
|
|
Parser parser = new Parser(new SourceFile(
|
|
SourceFile.IN_MEMORY_FILE, "#elemId {}"));
|
|
|
|
Stylesheet stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
RuleSet ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
List<SimpleSelectorSequence> simpleSeqs =
|
|
ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
Expect.isTrue(simpSelector is IdSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "elemId");
|
|
}
|
|
}
|
|
|
|
void testElement() {
|
|
Parser parser = new Parser(new SourceFile(
|
|
SourceFile.IN_MEMORY_FILE, "div {}"));
|
|
Stylesheet stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
RuleSet ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
List<SimpleSelectorSequence> simpleSeqs =
|
|
ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
Expect.isTrue(simpSelector is ElementSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "div");
|
|
}
|
|
|
|
parser = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE,
|
|
"div div span {}"));
|
|
stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
var idx = 0;
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
if (idx == 0) {
|
|
Expect.isTrue(simpSelector is ElementSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "div");
|
|
} else if (idx == 1) {
|
|
Expect.isTrue(simpSelector is ElementSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "div");
|
|
} else if (idx == 2) {
|
|
Expect.isTrue(simpSelector is ElementSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "span");
|
|
} else {
|
|
Expect.fail("unexpected expression");
|
|
}
|
|
|
|
idx++;
|
|
}
|
|
Expect.equals(simpleSeqs.length, idx);
|
|
}
|
|
|
|
void testNamespace() {
|
|
Parser parser = new Parser(new SourceFile(
|
|
SourceFile.IN_MEMORY_FILE, "ns1|div {}"));
|
|
Stylesheet stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
RuleSet ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
List<SimpleSelectorSequence> simpleSeqs =
|
|
ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
Expect.isTrue(simpSelector is NamespaceSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.isFalse(simpSelector.isNamespaceWildcard());
|
|
Expect.equals(simpSelector.namespace, "ns1");
|
|
ElementSelector elementSelector = simpSelector.nameAsSimpleSelector;
|
|
Expect.isTrue(elementSelector is ElementSelector);
|
|
Expect.isFalse(elementSelector.isWildcard());
|
|
Expect.equals(elementSelector.name, "div");
|
|
}
|
|
|
|
parser = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE,
|
|
"ns1|div div ns2|span .foobar {}"));
|
|
stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
var idx = 0;
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
if (idx == 0) {
|
|
Expect.isTrue(simpSelector is NamespaceSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.namespace, "ns1");
|
|
ElementSelector elementSelector = simpSelector.nameAsSimpleSelector;
|
|
Expect.isTrue(elementSelector is ElementSelector);
|
|
Expect.isFalse(elementSelector.isWildcard());
|
|
Expect.equals(elementSelector.name, "div");
|
|
} else if (idx == 1) {
|
|
Expect.isTrue(simpSelector is ElementSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "div");
|
|
} else if (idx == 2) {
|
|
Expect.isTrue(simpSelector is NamespaceSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.namespace, "ns2");
|
|
ElementSelector elementSelector = simpSelector.nameAsSimpleSelector;
|
|
Expect.isTrue(elementSelector is ElementSelector);
|
|
Expect.isFalse(elementSelector.isWildcard());
|
|
Expect.equals(elementSelector.name, "span");
|
|
} else if (idx == 3) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "foobar");
|
|
} else {
|
|
Expect.fail("unexpected expression");
|
|
}
|
|
|
|
idx++;
|
|
}
|
|
|
|
Expect.equals(simpleSeqs.length, idx);
|
|
}
|
|
|
|
void testSelectorGroups() {
|
|
Parser parser = new Parser(new SourceFile(
|
|
SourceFile.IN_MEMORY_FILE,
|
|
"div, .foobar ,#elemId, .xyzzy .test, ns1|div div #elemId .foobar {}"));
|
|
Stylesheet stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
RuleSet ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 5);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
var groupIdx = 0;
|
|
for (final selectorGroup in ruleset.selectorGroup.selectors) {
|
|
var idx = 0;
|
|
for (final selector in selectorGroup.simpleSelectorSequences) {
|
|
final simpSelector = selector.simpleSelector;
|
|
switch (groupIdx) {
|
|
case 0: // First selector group.
|
|
Expect.isTrue(simpSelector is ElementSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "div");
|
|
break;
|
|
case 1: // Second selector group.
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "foobar");
|
|
break;
|
|
case 2: // Third selector group.
|
|
Expect.isTrue(simpSelector is IdSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "elemId");
|
|
break;
|
|
case 3: // Fourth selector group.
|
|
Expect.equals(selectorGroup.simpleSelectorSequences.length, 2);
|
|
if (idx == 0) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "xyzzy");
|
|
} else if (idx == 1) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "test");
|
|
} else {
|
|
Expect.fail("unexpected expression");
|
|
}
|
|
break;
|
|
case 4: // Fifth selector group.
|
|
Expect.equals(selectorGroup.simpleSelectorSequences.length, 4);
|
|
if (idx == 0) {
|
|
Expect.isTrue(simpSelector is NamespaceSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.namespace, "ns1");
|
|
ElementSelector elementSelector = simpSelector.nameAsSimpleSelector;
|
|
Expect.isTrue(elementSelector is ElementSelector);
|
|
Expect.isFalse(elementSelector.isWildcard());
|
|
Expect.equals(elementSelector.name, "div");
|
|
} else if (idx == 1) {
|
|
Expect.isTrue(simpSelector is ElementSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "div");
|
|
} else if (idx == 2) {
|
|
Expect.isTrue(simpSelector is IdSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "elemId");
|
|
} else if (idx == 3) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "foobar");
|
|
} else {
|
|
Expect.fail("unexpected expression");
|
|
}
|
|
break;
|
|
}
|
|
idx++;
|
|
}
|
|
groupIdx++;
|
|
}
|
|
}
|
|
|
|
void testCombinator() {
|
|
Parser parser = new Parser(new SourceFile(
|
|
SourceFile.IN_MEMORY_FILE,
|
|
".foobar > .bar + .no-story ~ myNs|div #elemId {}"));
|
|
|
|
Stylesheet stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
RuleSet ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
List<SimpleSelectorSequence> simpleSeqs =
|
|
ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
Expect.equals(simpleSeqs.length, 5);
|
|
var idx = 0;
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
if (idx == 0) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "foobar");
|
|
} else if (idx == 1) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorGreater());
|
|
Expect.equals(simpSelector.name, "bar");
|
|
} else if (idx == 2) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorPlus());
|
|
Expect.equals(simpSelector.name, "no-story");
|
|
} else if (idx == 3) {
|
|
Expect.isTrue(simpSelector is NamespaceSelector);
|
|
Expect.isTrue(selector.isCombinatorTilde());
|
|
Expect.equals(simpSelector.namespace, "myNs");
|
|
ElementSelector elementSelector = simpSelector.nameAsSimpleSelector;
|
|
Expect.isTrue(elementSelector is ElementSelector);
|
|
Expect.isFalse(elementSelector.isWildcard());
|
|
Expect.equals(elementSelector.name, "div");
|
|
} else if (idx == 4) {
|
|
Expect.isTrue(simpSelector is IdSelector);
|
|
Expect.isTrue(selector.isCombinatorDescendant());
|
|
Expect.equals(simpSelector.name, "elemId");
|
|
} else {
|
|
Expect.fail("unexpected expression");
|
|
}
|
|
|
|
idx++;
|
|
}
|
|
}
|
|
|
|
void testWildcard() {
|
|
Parser parser = new Parser(new SourceFile(
|
|
SourceFile.IN_MEMORY_FILE, "* {}"));
|
|
|
|
Stylesheet stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
RuleSet ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
List<SimpleSelectorSequence> simpleSeqs =
|
|
ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
Expect.isTrue(simpSelector is ElementSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.isTrue(simpSelector.isWildcard());
|
|
Expect.equals(simpSelector.name, "*");
|
|
}
|
|
|
|
parser = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE,
|
|
"*.foobar {}"));
|
|
|
|
stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
Expect.equals(simpleSeqs.length, 2);
|
|
var idx = 0;
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
if (idx == 0) {
|
|
Expect.isTrue(simpSelector is ElementSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.isTrue(simpSelector.isWildcard());
|
|
Expect.equals(simpSelector.name, "*");
|
|
} else if (idx == 1) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals(simpSelector.name, "foobar");
|
|
} else {
|
|
Expect.fail("unexpected expression");
|
|
}
|
|
|
|
idx++;
|
|
}
|
|
|
|
parser = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE,
|
|
"myNs|*.foobar {}"));
|
|
|
|
stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
Expect.equals(stylesheet.topLevels.length, 1);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
Expect.equals(simpleSeqs.length, 2);
|
|
idx = 0;
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
if (idx == 0) {
|
|
Expect.isTrue(simpSelector is NamespaceSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.isFalse(simpSelector.isNamespaceWildcard());
|
|
ElementSelector elementSelector = simpSelector.nameAsSimpleSelector;
|
|
Expect.equals("myNs", simpSelector.namespace);
|
|
Expect.isTrue(elementSelector.isWildcard());
|
|
Expect.equals("*", elementSelector.name);
|
|
} else if (idx == 1) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals("foobar", simpSelector.name);
|
|
} else {
|
|
Expect.fail("unexpected expression");
|
|
}
|
|
|
|
idx++;
|
|
}
|
|
|
|
parser = new Parser(new SourceFile(SourceFile.IN_MEMORY_FILE,
|
|
"*|*.foobar {}"));
|
|
|
|
stylesheet = parser.parse();
|
|
Expect.isNotNull(stylesheet);
|
|
|
|
Expect.isTrue(stylesheet.topLevels[0] is RuleSet);
|
|
ruleset = stylesheet.topLevels[0];
|
|
Expect.equals(ruleset.selectorGroup.selectors.length, 1);
|
|
Expect.equals(ruleset.declarationGroup.declarations.length, 0);
|
|
|
|
simpleSeqs = ruleset.selectorGroup.selectors[0].simpleSelectorSequences;
|
|
|
|
Expect.equals(simpleSeqs.length, 2);
|
|
idx = 0;
|
|
for (final selector in simpleSeqs) {
|
|
final simpSelector = selector.simpleSelector;
|
|
if (idx == 0) {
|
|
Expect.isTrue(simpSelector is NamespaceSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.isTrue(simpSelector.isNamespaceWildcard());
|
|
Expect.equals("*", simpSelector.namespace);
|
|
ElementSelector elementSelector = simpSelector.nameAsSimpleSelector;
|
|
Expect.isTrue(elementSelector.isWildcard());
|
|
Expect.equals("*", elementSelector.name);
|
|
} else if (idx == 1) {
|
|
Expect.isTrue(simpSelector is ClassSelector);
|
|
Expect.isTrue(selector.isCombinatorNone());
|
|
Expect.equals("foobar", simpSelector.name);
|
|
} else {
|
|
Expect.fail("unexpected expression");
|
|
}
|
|
|
|
idx++;
|
|
}
|
|
|
|
}
|
|
|
|
void testPseudo() {
|
|
// TODO(terry): Implement
|
|
}
|
|
|
|
void testAttribute() {
|
|
// TODO(terry): Implement
|
|
}
|
|
|
|
void testNegation() {
|
|
// TODO(terry): Implement
|
|
}
|