def test_unnested_combine_ancestor_selector(self): src = u'a &' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) with self.assertRaises(errors.CSSSyntaxError) as cm: parser.selector() self.assertEqual("The '&' selector is only allowed within nested ruleset scopes.", cm.exception.msg)
def test_class_selector(self): src = u'.myclass' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) sel = parser.selector() expected = \ Selector( children=[ SimpleSelectorSequence( head=None, tail=[ClassSelector(name=u'myclass')] ), ] ) self.assertEqual(dump(expected), dump(sel))
def test_type_selector(self): src = u'div' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) sel = parser.selector() expected = \ Selector( children=[ SimpleSelectorSequence( head=TypeSelector(name=u'div'), tail=[] ), ] ) self.assertEqual(dump(expected), dump(sel))
def test_negation_selector(self): src = u'a:not( #myid )' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) sel = parser.selector() expected = \ Selector( children=[ SimpleSelectorSequence( head=TypeSelector(name=u'a'), tail=[ NegationSelector( arg=IdSelector(name=u'myid') ), ] ) ] ) self.assertEqual(dump(expected), dump(sel))
def test_pseudo_element_selector2(self): src = u'a::foo' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) sel = parser.selector() expected = \ Selector( children=[ SimpleSelectorSequence( head=TypeSelector(name=u'a'), tail=[ PseudoElementSelector( node=Ident(name=u'foo') ), ] ) ] ) self.assertEqual(dump(expected), dump(sel))
def test_child_combinator(self): src = u'a > b' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) sel = parser.selector() expected = \ Selector( children=[ SimpleSelectorSequence( head=TypeSelector(name=u'a'), tail=[] ), ChildCombinator(), SimpleSelectorSequence( head=TypeSelector(name=u'b'), tail=[] ), ] ) self.assertEqual(dump(expected), dump(sel))
def test_whitespace_combinator2(self): src = u'a.myclass b#myid' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) sel = parser.selector() expected = \ Selector( children=[ SimpleSelectorSequence( head=TypeSelector(name=u'a'), tail=[ClassSelector(name=u'myclass')] ), DescendantCombinator(), SimpleSelectorSequence( head=TypeSelector(name=u'b'), tail=[IdSelector(name=u'myid')] ), ] ) self.assertEqual(dump(expected), dump(sel))
def test_bad_class_selector(self): src = u'."this is a string" ' parser = Parser(src) self.assertTrue(parser.match(tokens.START)) with self.assertRaises(errors.CSSSyntaxError): parser.selector()