diff options
author | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2014-12-05 17:09:34 +0100 |
---|---|---|
committer | Benjamin Paassen <bpaassen@techfak.uni-bielefeld.de> | 2014-12-05 17:09:34 +0100 |
commit | 5d500ea305db7185314cc2b500257529e9e9696a (patch) | |
tree | 1322c9fe1246c3b7566085f3188fa2c739140d30 /test | |
parent | 2dd08daa56c05d6c720a30fd9ec14a2471f81c5f (diff) |
Successfully (hopefully) implemented CSS Parsing and the respective test.
Diffstat (limited to 'test')
-rw-r--r-- | test/plugins/css/CSSParserTest.cpp | 112 |
1 files changed, 109 insertions, 3 deletions
diff --git a/test/plugins/css/CSSParserTest.cpp b/test/plugins/css/CSSParserTest.cpp index 8880fc5..8873673 100644 --- a/test/plugins/css/CSSParserTest.cpp +++ b/test/plugins/css/CSSParserTest.cpp @@ -59,6 +59,7 @@ TEST(CSSParser, testParseSelectors) } ASSERT_EQ(2, A->getEdges().size()); ASSERT_FALSE(A->isAccepting()); + ASSERT_EQ(0, A->getRuleSet()->getRules().size()); { // assert A > B std::vector<Rooted<SelectorNode>> Achildren = @@ -72,6 +73,7 @@ TEST(CSSParser, testParseSelectors) } ASSERT_EQ(0, B->getEdges().size()); ASSERT_TRUE(B->isAccepting()); + ASSERT_EQ(0, B->getRuleSet()->getRules().size()); // assert A B:r Achildren = A->getChildren(SelectionOperator::DESCENDANT, "B"); ASSERT_EQ(1, Achildren.size()); @@ -83,6 +85,7 @@ TEST(CSSParser, testParseSelectors) } ASSERT_EQ(0, Br->getEdges().size()); ASSERT_TRUE(Br->isAccepting()); + ASSERT_EQ(0, Br->getRuleSet()->getRules().size()); } // assert C#a children = root->getChildren("C"); @@ -95,6 +98,7 @@ TEST(CSSParser, testParseSelectors) } ASSERT_EQ(1, C->getEdges().size()); ASSERT_FALSE(C->isAccepting()); + ASSERT_EQ(0, C->getRuleSet()->getRules().size()); { // assert C#a A[bla=\"blub\"] std::vector<Rooted<SelectorNode>> Cchildren = @@ -108,6 +112,7 @@ TEST(CSSParser, testParseSelectors) } ASSERT_EQ(0, A->getEdges().size()); ASSERT_TRUE(A->isAccepting()); + ASSERT_EQ(0, A->getRuleSet()->getRules().size()); } // assert A::g(4,2,3) children = root->getChildren("A"); @@ -120,10 +125,12 @@ TEST(CSSParser, testParseSelectors) } ASSERT_EQ(0, Ag->getEdges().size()); ASSERT_TRUE(Ag->isAccepting()); + ASSERT_EQ(0, Ag->getRuleSet()->getRules().size()); } TEST(CSSParser, testParseCSS) { + // create the CSS input std::stringstream input; input << "A, B A {\n"; @@ -140,18 +147,117 @@ TEST(CSSParser, testParseCSS) input << "A {\n"; input << "\t ident1 : \"val4\";\n"; input << "}\n"; - - + // initialize an empty parser context. StandaloneParserContext ctx; // parse the input. CSSParser instance; Rooted<SelectorNode> root = instance.parse(input, ctx).cast<SelectorNode>(); + + // we expect three children of the root node overall. + ASSERT_EQ(3, root->getEdges().size()); + // get all "A" children, which should be two. + std::vector<Rooted<SelectorNode>> children = root->getChildren("A"); + ASSERT_EQ(2, children.size()); + // assert A + /* + * A { + * ident1 : "val1"; + * ident2 : "val2"; + * } + * + * and + * + * A { + * ident1 : "val4"; + * } + * + * should be merged. + */ + Rooted<SelectorNode> A = children[0]; + ASSERT_EQ("A", A->getName()); + { + PseudoSelector select{"true", false}; + ASSERT_EQ(select, A->getPseudoSelector()); + } + ASSERT_EQ(0, A->getEdges().size()); + ASSERT_TRUE(A->isAccepting()); + { + Rooted<RuleSet> ruleSet = A->getRuleSet(); + ASSERT_EQ(2, ruleSet->getRules().size()); + variant::Variant v = ruleSet->getRules()["ident1"]; + ASSERT_EQ(variant::Variant::Type::STRING, v.getType()); + ASSERT_EQ("val4", v.asString()); + v = ruleSet->getRules()["ident2"]; + ASSERT_EQ(variant::Variant::Type::STRING, v.getType()); + ASSERT_EQ("val2", v.asString()); + } + /* + * For this part of the SelectorTree we only have + * + * A:select(a,b) { + * ident3 : val3; + * } + */ + Rooted<SelectorNode> Aselect = children[1]; + ASSERT_EQ("A", Aselect->getName()); + { + PseudoSelector select{"select",{"a","b"}, false}; + ASSERT_EQ(select, Aselect->getPseudoSelector()); + } + ASSERT_EQ(0, Aselect->getEdges().size()); + ASSERT_TRUE(Aselect->isAccepting()); + { + Rooted<RuleSet> ruleSet = Aselect->getRuleSet(); + ASSERT_EQ(1, ruleSet->getRules().size()); + variant::Variant v = ruleSet->getRules()["ident3"]; + ASSERT_EQ(variant::Variant::Type::STRING, v.getType()); + ASSERT_EQ("val3", v.asString()); + } + /* + * The remaining part of the SelectorTree is + * + * B A { + * ident1 : val1; + * ident2 : val2; + * } + */ + children = root->getChildren("B"); + ASSERT_EQ(1, children.size()); + Rooted<SelectorNode> B = children[0]; + ASSERT_EQ("B", B->getName()); + { + PseudoSelector select{"true", false}; + ASSERT_EQ(select, B->getPseudoSelector()); + } + ASSERT_EQ(1, B->getEdges().size()); + ASSERT_FALSE(B->isAccepting()); + ASSERT_EQ(0, B->getRuleSet()->getRules().size()); + + children = B->getChildren("A"); + ASSERT_EQ(1, children.size()); + Rooted<SelectorNode> BA = children[0]; + ASSERT_EQ("A", BA->getName()); + { + PseudoSelector select{"true", false}; + ASSERT_EQ(select, BA->getPseudoSelector()); + } + ASSERT_EQ(0, BA->getEdges().size()); + ASSERT_TRUE(BA->isAccepting()); + { + Rooted<RuleSet> ruleSet = BA->getRuleSet(); + ASSERT_EQ(2, ruleSet->getRules().size()); + variant::Variant v = ruleSet->getRules()["ident1"]; + ASSERT_EQ(variant::Variant::Type::STRING, v.getType()); + ASSERT_EQ("val1", v.asString()); + v = ruleSet->getRules()["ident2"]; + ASSERT_EQ(variant::Variant::Type::STRING, v.getType()); + ASSERT_EQ("val2", v.asString()); + } } - } } } |