Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_recompile(self):
"""If you feed through the same object, it should pass through unless you change flags."""
p1 = sv.compile('p[id]')
p2 = sv.compile(p1)
self.assertTrue(p1 is p2)
with pytest.raises(ValueError):
sv.compile(p1, flags=0x10)
with pytest.raises(ValueError):
sv.compile(p1, namespaces={"": ""})
def test_quirks_warn(self):
"""Test that quirks mode raises a warning."""
sv.purge()
with warnings.catch_warnings(record=True) as w:
# Cause all warnings to always be triggered.
warnings.simplefilter("always")
# Trigger a warning.
sv.compile('> p', flags=sv._QUIRKS)
# Verify some things
self.assertTrue(len(w) == 1)
self.assertTrue(issubclass(w[-1].category, sv_util.QuirksWarning))
with warnings.catch_warnings(record=True) as w:
# Cause all warnings to always be triggered.
warnings.simplefilter("always")
# Trigger a warning.
sv.compile('[data={}]', flags=sv._QUIRKS)
# Verify some things
self.assertTrue(len(w) == 1)
self.assertTrue(issubclass(w[-1].category, sv_util.QuirksWarning))
def test_syntax_error_with_multiple_lines(self):
"""Test that multiline selector errors have the right position."""
with self.assertRaises(sv.SelectorSyntaxError) as cm:
sv.compile(
'input\n'
'.field[type=42]')
e = cm.exception
self.assertEqual(e.context, ' input\n--> .field[type=42]\n ^')
self.assertEqual(e.line, 2)
self.assertEqual(e.col, 7)
def test_recompile(self):
"""If you feed through the same object, it should pass through unless you change parameters."""
p1 = sv.compile('p[id]')
p2 = sv.compile(p1)
self.assertTrue(p1 is p2)
with pytest.raises(ValueError):
sv.compile(p1, flags=sv.DEBUG)
with pytest.raises(ValueError):
sv.compile(p1, namespaces={"": ""})
with pytest.raises(ValueError):
sv.compile(p1, custom={":--header": 'h1, h2, h3, h4, h5, h6'})
def test_cache(self):
"""Test cache."""
sv.purge()
self.assertEqual(sv.cp._cached_css_compile.cache_info().currsize, 0)
for x in range(1000):
value = '[value="{}"]'.format(sv_util.ustr(random.randint(1, 10000)))
p = sv.compile(value)
self.assertTrue(p.pattern == value)
self.assertTrue(sv.cp._cached_css_compile.cache_info().currsize > 0)
self.assertTrue(sv.cp._cached_css_compile.cache_info().currsize == 500)
sv.purge()
self.assertEqual(sv.cp._cached_css_compile.cache_info().currsize, 0)
def test_invalid_mode(self):
"""Test invalid mode."""
with self.assertRaises(ValueError):
sv.compile('p', None, 0)
def test_invalid_incomplete_has(self):
"""Test invalid `:has()`."""
with self.assertRaises(SyntaxError):
sv.compile(':has(>)')
with self.assertRaises(SyntaxError):
sv.compile(':has()')
def test_invalid_tag(self):
"""
Test invalid tag.
Tag must come first.
"""
with self.assertRaises(SyntaxError):
sv.compile(':is(div)p')
def compile_pattern(self, selectors, namespaces=None, custom=None, flags=0):
"""Compile pattern."""
print('PATTERN: ', selectors)
flags |= sv.DEBUG
return sv.compile(selectors, namespaces=namespaces, custom=custom, flags=flags)
sv.purge()
with warnings.catch_warnings(record=True) as w:
# Cause all warnings to always be triggered.
warnings.simplefilter("always")
# Trigger a warning.
sv.compile('> p', flags=sv._QUIRKS)
# Verify some things
self.assertTrue(len(w) == 1)
self.assertTrue(issubclass(w[-1].category, sv_util.QuirksWarning))
with warnings.catch_warnings(record=True) as w:
# Cause all warnings to always be triggered.
warnings.simplefilter("always")
# Trigger a warning.
sv.compile('[data={}]', flags=sv._QUIRKS)
# Verify some things
self.assertTrue(len(w) == 1)
self.assertTrue(issubclass(w[-1].category, sv_util.QuirksWarning))