lxml.tests.test_css

Package lxml :: Package tests :: Module test_css |
[hide private]
[frames] | no frames]

# Source Code for Module lxml.tests.test_css

     1  import unittest
     2
     3  import lxml.html
     4
     5  from lxml.tests.common_imports import doctest, HelperTestCase, skipif
     6
     7  try:
     8      import cssselect
     9  except ImportError:
    10      cssselect = None
    11
    12
    13  HTML = '''
    14  <div>
    15    <a href="foo">link</a>
    16    <a>anchor</a>
    17  </div>
    18  '''
    19
    20
    21 -class CSSTestCase(HelperTestCase):
    22
    23      pytestmark = skipif('cssselect is None')
    24
    25 -    def test_cssselect(self):
    26          div, = lxml.html.fromstring(HTML).xpath('//div')
    27
    28          def count(selector, expected_count, **kwargs):
    29              result = div.cssselect(selector, **kwargs)
    30              self.assertEqual(len(result), expected_count)
    31
    32          count('div', 1)
    33          count('a', 2)
    34          count('em', 0)
    35          # Element names are case-insensitive in HTML
    36          count('DIV', 1)
    37          # ... but not in XHTML or XML
    38          count('DIV', 0, translator='xhtml')
    39          count('DIV', 0, translator='xml')
    40
    41          # :contains() is case-insensitive in lxml
    42          count(':contains("link")', 2)  # div, a
    43          count(':contains("LInk")', 2)
    44          # Whatever the document language
    45          count(':contains("LInk")', 2, translator='xhtml')
    46          count(':contains("LInk")', 2, translator='xml')
    47          # ... but not in upstream cssselect
    48          import cssselect
    49          count(':contains("link")', 2, translator=cssselect.HTMLTranslator())
    50          count(':contains("LInk")', 0, translator=cssselect.HTMLTranslator())
    51
    52
    53 -def test_suite():
    54      suite = unittest.TestSuite()
    55      try:
    56          import cssselect
    57      except ImportError:
    58          # no 'cssselect' installed
    59          print("Skipping tests in lxml.cssselect - external cssselect package is not installed")
    60          return suite
    61
    62      import lxml.cssselect
    63      suite.addTests(doctest.DocTestSuite(lxml.cssselect))
    64      suite.addTests([unittest.makeSuite(CSSTestCase)])
    65      return suite
    66