frappe/env/lib/python3.12/site-packages/cssutils/tests/test_errorhandler.py

153 lines
4.5 KiB
Python
Raw Permalink Normal View History

"""Tests for parsing which does not raise Exceptions normally"""
import logging
import io
import sys
import xml.dom
import socket
import pytest
import cssutils
@pytest.fixture(autouse=True)
def save_log(monkeypatch):
"""
Replace default log and ignore its output.
"""
monkeypatch.setattr(cssutils.log, 'raiseExceptions', False)
monkeypatch.setattr(
cssutils.log, '_log', logging.getLogger('IGNORED-CSSUTILS-TEST')
)
class TestErrorHandler:
def _setHandler(self):
"sets new handler and returns StringIO instance to getvalue"
s = io.StringIO()
h = logging.StreamHandler(s)
h.setFormatter(logging.Formatter('%(levelname)s %(message)s'))
# remove if present already
cssutils.log.removeHandler(h)
cssutils.log.addHandler(h)
return s
def test_calls(self):
"cssutils.log.*"
s = self._setHandler()
cssutils.log.setLevel(logging.DEBUG)
cssutils.log.debug('msg', neverraise=True)
assert s.getvalue() == 'DEBUG msg\n'
s = self._setHandler()
cssutils.log.setLevel(logging.INFO)
cssutils.log.info('msg', neverraise=True)
assert s.getvalue() == 'INFO msg\n'
s = self._setHandler()
cssutils.log.setLevel(logging.WARNING)
cssutils.log.warn('msg', neverraise=True)
assert s.getvalue() == 'WARNING msg\n'
s = self._setHandler()
cssutils.log.setLevel(logging.ERROR)
cssutils.log.error('msg', neverraise=True)
assert s.getvalue() == 'ERROR msg\n'
s = self._setHandler()
cssutils.log.setLevel(logging.FATAL)
cssutils.log.fatal('msg', neverraise=True)
assert s.getvalue() == 'CRITICAL msg\n'
s = self._setHandler()
cssutils.log.setLevel(logging.CRITICAL)
cssutils.log.critical('msg', neverraise=True)
assert s.getvalue() == 'CRITICAL msg\n'
s = self._setHandler()
cssutils.log.setLevel(logging.CRITICAL)
cssutils.log.error('msg', neverraise=True)
assert s.getvalue() == ''
def test_linecol(self):
"cssutils.log line col"
o = cssutils.log.raiseExceptions
cssutils.log.raiseExceptions = True
s = cssutils.css.CSSStyleSheet()
try:
s.cssText = '@import x;'
except xml.dom.DOMException as e:
assert str(e) == 'CSSImportRule: Unexpected ident. [1:9: x]'
assert e.line == 1
assert e.col == 9
if sys.platform.startswith('java'):
assert e.msg == 'CSSImportRule: Unexpected ident. [1:9: x]'
else:
assert e.args == ('CSSImportRule: Unexpected ident. [1:9: x]',)
cssutils.log.raiseExceptions = o
def test_handlers(self):
"cssutils.log"
s = self._setHandler()
cssutils.log.setLevel(logging.FATAL)
assert cssutils.log.getEffectiveLevel() == logging.FATAL
cssutils.parseString('a { color: 1 }')
assert s.getvalue() == ''
cssutils.log.setLevel(logging.DEBUG)
cssutils.parseString('a { color: 1 }')
# TODO: Fix?
# self.assertEqual(
# s.getvalue(),
# u'ERROR Property: Invalid value for "CSS Color Module '
# 'Level 3/CSS Level 2.1" property: 1 [1:5: color]\n')
assert (
s.getvalue() == 'ERROR Property: Invalid value for "CSS Level 2.1" '
'property: 1 [1:5: color]\n'
)
s = self._setHandler()
try:
socket.getaddrinfo('example.com', 80)
except OSError:
# skip the test as the name can't resolve
return
cssutils.log.setLevel(logging.ERROR)
cssutils.parseUrl('http://example.com')
assert s.getvalue()[:38] == 'ERROR Expected "text/css" mime type'
def test_parsevalidation(self):
style = 'color: 1'
t = 'a { %s }' % style
cssutils.log.setLevel(logging.DEBUG)
# sheet
s = self._setHandler()
cssutils.parseString(t)
assert len(s.getvalue()) != 0
s = self._setHandler()
cssutils.parseString(t, validate=False)
assert s.getvalue() == ''
# style
s = self._setHandler()
cssutils.parseStyle(style)
assert len(s.getvalue()) != 0
s = self._setHandler()
cssutils.parseStyle(style, validate=True)
assert len(s.getvalue()) != 0
s = self._setHandler()
cssutils.parseStyle(style, validate=False)
assert s.getvalue() == ''