Blame src/lxml/tests/test_css.py

Packit Service b74dd5
import unittest
Packit Service b74dd5
Packit Service b74dd5
import lxml.html
Packit Service b74dd5
Packit Service b74dd5
from lxml.tests.common_imports import doctest, HelperTestCase, skipif
Packit Service b74dd5
Packit Service b74dd5
try:
Packit Service b74dd5
    import cssselect
Packit Service b74dd5
except ImportError:
Packit Service b74dd5
    cssselect = None
Packit Service b74dd5
Packit Service b74dd5
Packit Service b74dd5
HTML = '''
Packit Service b74dd5
Packit Service b74dd5
  link
Packit Service b74dd5
  anchor
Packit Service b74dd5
Packit Service b74dd5
'''
Packit Service b74dd5
Packit Service b74dd5
Packit Service b74dd5
class CSSTestCase(HelperTestCase):
Packit Service b74dd5
Packit Service b74dd5
    pytestmark = skipif('cssselect is None')
Packit Service b74dd5
Packit Service b74dd5
    def test_cssselect(self):
Packit Service b74dd5
        div, = lxml.html.fromstring(HTML).xpath('//div')
Packit Service b74dd5
Packit Service b74dd5
        def count(selector, expected_count, **kwargs):
Packit Service b74dd5
            result = div.cssselect(selector, **kwargs)
Packit Service b74dd5
            self.assertEqual(len(result), expected_count)
Packit Service b74dd5
Packit Service b74dd5
        count('div', 1)
Packit Service b74dd5
        count('a', 2)
Packit Service b74dd5
        count('em', 0)
Packit Service b74dd5
        # Element names are case-insensitive in HTML
Packit Service b74dd5
        count('DIV', 1)
Packit Service b74dd5
        # ... but not in XHTML or XML
Packit Service b74dd5
        count('DIV', 0, translator='xhtml')
Packit Service b74dd5
        count('DIV', 0, translator='xml')
Packit Service b74dd5
Packit Service b74dd5
        # :contains() is case-insensitive in lxml
Packit Service b74dd5
        count(':contains("link")', 2)  # div, a
Packit Service b74dd5
        count(':contains("LInk")', 2)
Packit Service b74dd5
        # Whatever the document language
Packit Service b74dd5
        count(':contains("LInk")', 2, translator='xhtml')
Packit Service b74dd5
        count(':contains("LInk")', 2, translator='xml')
Packit Service b74dd5
        # ... but not in upstream cssselect
Packit Service b74dd5
        import cssselect
Packit Service b74dd5
        count(':contains("link")', 2, translator=cssselect.HTMLTranslator())
Packit Service b74dd5
        count(':contains("LInk")', 0, translator=cssselect.HTMLTranslator())
Packit Service b74dd5
Packit Service b74dd5
Packit Service b74dd5
def test_suite():
Packit Service b74dd5
    suite = unittest.TestSuite()
Packit Service b74dd5
    try:
Packit Service b74dd5
        import cssselect
Packit Service b74dd5
    except ImportError:
Packit Service b74dd5
        # no 'cssselect' installed
Packit Service b74dd5
        print("Skipping tests in lxml.cssselect - external cssselect package is not installed")
Packit Service b74dd5
        return suite
Packit Service b74dd5
Packit Service b74dd5
    import lxml.cssselect
Packit Service b74dd5
    suite.addTests(doctest.DocTestSuite(lxml.cssselect))
Packit Service b74dd5
    suite.addTests([unittest.makeSuite(CSSTestCase)])
Packit Service b74dd5
    return suite