Esempio n. 1
0
TEST(RuleSetTest, findBestRuleSetAndAdd_HostContextAndClass) {
  CSSTestHelper helper;

  helper.addCSSRules(".foo:host-context(*) { }");
  RuleSet& ruleSet = helper.ruleSet();
  const HeapVector<RuleData>* rules = ruleSet.shadowHostRules();
  ASSERT_EQ(0u, rules->size());
}
Esempio n. 2
0
TEST(RuleSetTest, findBestRuleSetAndAdd_HostWithId) {
  CSSTestHelper helper;

  helper.addCSSRules(":host(#x) { }");
  RuleSet& ruleSet = helper.ruleSet();
  const HeapVector<RuleData>* rules = ruleSet.shadowHostRules();
  ASSERT_EQ(1u, rules->size());
}
Esempio n. 3
0
TEST(RuleSetTest, findBestRuleSetAndAdd_IdThenClass) {
  CSSTestHelper helper;

  helper.addCSSRules("#id.class { }");
  RuleSet& ruleSet = helper.ruleSet();
  AtomicString str("id");
  const TerminatedArray<RuleData>* rules = ruleSet.idRules(str);
  ASSERT_EQ(1u, rules->size());
  ASSERT_EQ(str, rules->at(0).selector().value());
}
Esempio n. 4
0
TEST(RuleSetTest, findBestRuleSetAndAdd_NthChild) {
  CSSTestHelper helper;

  helper.addCSSRules("div:nth-child(2) { }");
  RuleSet& ruleSet = helper.ruleSet();
  AtomicString str("div");
  const TerminatedArray<RuleData>* rules = ruleSet.tagRules(str);
  ASSERT_EQ(1u, rules->size());
  ASSERT_EQ(str, rules->at(0).selector().tagQName().localName());
}
Esempio n. 5
0
TEST(RuleSetTest, findBestRuleSetAndAdd_CustomPseudoElements)
{
    CSSTestHelper helper;

    helper.addCSSRules("summary::-webkit-details-marker { }");
    RuleSet& ruleSet = helper.ruleSet();
    AtomicString str("-webkit-details-marker");
    const TerminatedArray<RuleData>* rules = ruleSet.shadowPseudoElementRules(str);
    ASSERT_EQ(1u, rules->size());
    ASSERT_EQ(str, rules->at(0).selector().value());
}
Esempio n. 6
0
TEST(RuleSetTest, findBestRuleSetAndAdd_AttrThenId) {
  CSSTestHelper helper;

  helper.addCSSRules("[attr]#id { }");
  RuleSet& ruleSet = helper.ruleSet();
  AtomicString str("id");
  const TerminatedArray<RuleData>* rules = ruleSet.idRules(str);
  ASSERT_EQ(1u, rules->size());
  AtomicString attrStr("attr");
  ASSERT_EQ(attrStr, rules->at(0).selector().attribute().localName());
}
Esempio n. 7
0
TEST(RuleSetTest, findBestRuleSetAndAdd_DivWithContent) {
  CSSTestHelper helper;

  helper.addCSSRules("div::content { }");
  RuleSet& ruleSet = helper.ruleSet();
  AtomicString str("div");
  const TerminatedArray<RuleData>* rules = ruleSet.tagRules(str);
  ASSERT_EQ(1u, rules->size());
  AtomicString valueStr("content");
  ASSERT_EQ(valueStr, rules->at(0).selector().tagHistory()->value());
}
Esempio n. 8
0
TEST(RuleSetTest, findBestRuleSetAndAdd_ClassThenId) {
  CSSTestHelper helper;

  helper.addCSSRules(".class#id { }");
  RuleSet& ruleSet = helper.ruleSet();
  AtomicString str("id");
  // id is prefered over class even if class preceeds it in the selector.
  const TerminatedArray<RuleData>* rules = ruleSet.idRules(str);
  ASSERT_EQ(1u, rules->size());
  AtomicString classStr("class");
  ASSERT_EQ(classStr, rules->at(0).selector().value());
}
Esempio n. 9
0
TEST(RuleSetTest, findBestRuleSetAndAdd_HostAndHostContextNotInRightmost) {
  CSSTestHelper helper;

  helper.addCSSRules(":host-context(#x) .y, :host(.a) > #b  { }");
  RuleSet& ruleSet = helper.ruleSet();
  const HeapVector<RuleData>* shadowRules = ruleSet.shadowHostRules();
  const TerminatedArray<RuleData>* idRules = ruleSet.idRules("b");
  const TerminatedArray<RuleData>* classRules = ruleSet.classRules("y");
  ASSERT_EQ(0u, shadowRules->size());
  ASSERT_EQ(1u, idRules->size());
  ASSERT_EQ(1u, classRules->size());
}
Esempio n. 10
0
TEST(CSSSelector, Representations)
{
    CSSTestHelper helper;

    const char* cssRules =
    "summary::-webkit-details-marker { }"
    "* {}"
    "div {}"
    "#id {}"
    ".class {}"
    "[attr] {}"
    "div:hover {}"
    "div:nth-child(2){}"
    ".class#id { }"
    "#id.class { }"
    "[attr]#id { }"
    "div[attr]#id { }"
    "div::content { }"
    "div::first-line { }"
    ".a.b.c { }"
    "div:not(.a) { }" // without class a
    "div:not(:visited) { }" // without the visited pseudo class

    "[attr=\"value\"] { }" // Exact equality
    "[attr~=\"value\"] { }" // One of a space-separated list
    "[attr^=\"value\"] { }" // Begins with
    "[attr$=\"value\"] { }" // Ends with
    "[attr*=\"value\"] { }" // Substring equal to
    "[attr|=\"value\"] { }" // One of a hyphen-separated list

    ".a .b { }" // .b is a descendant of .a
    ".a > .b { }" // .b is a direct descendant of .a
    ".a ~ .b { }" // .a precedes .b in sibling order
    ".a + .b { }" // .a element immediately precedes .b in sibling order
    ".a, .b { }" // matches .a or .b

    ".a.b .c {}";

    helper.addCSSRules(cssRules);
    EXPECT_EQ(30u, helper.ruleSet().ruleCount()); // .a, .b counts as two rules.
#ifndef NDEBUG
    helper.ruleSet().show();
#endif
}