%PDF- %PDF-
| Direktori : /lib/python3/dist-packages/cssutils/tests/ |
| Current File : //lib/python3/dist-packages/cssutils/tests/test_properties.py |
"""Testcases for cssutils.css.property._Property."""
__version__ = '$Id: test_property.py 1529 2008-11-30 15:12:01Z cthedot $'
import copy
import xml.dom
from . import basetest
import cssutils
from cssutils.css.property import Property
debug = False
class PropertiesTestCase(basetest.BaseTestCase):
def setUp(self):
"init test values"
V = {
'0': ('0', '-0'),#, '+0'),
'NUMBER': ('0', '-0', '100.1', '-100.1'),#, '+0', '+100.1'),
'PERCENTAGE': ('0%', '-0%', '100.1%', '-100.1%'),#, '+0%', '+100.1%'),
'EM': '1.2em',
'EX': '1.2ex',
'PX': '1.2px',
'CM': '1.2cm',
'MM': '1.2mm',
'IN': '1.2in',
'PT': '1.2pt',
'PC': '1.2pc',
'ANGLES': ('1deg', '1rad', '1grad'),
'TIMES': ('1s', '1ms'),
'FREQUENCIES': ('1hz', '1khz'),
'DIMENSION': ('1dimension', '1_dimension', '1dimension2'),
'STRING': ('"string"', "'STRING'"),
'URI': ('url(x)', 'URL("x")', "url(')')"),
'IDENT': ('ident', 'IDENT', '_IDENT', '_2', 'i-2'),
#'AUTO': 'auto', # explicit in list as an IDENT too
#'INHERIT': 'inherit', # explicit in list as an IDENT too
'ATTR': ('attr(x)'),
'RECT': ('rect(1,2,3,4)'),
#?
'CLIP': ('rect(1,2,3,4)'),
'FUNCTION': (),
'HEX3': '#123',
'HEX6': '#123abc',
'RGB': 'rgb(1,2,3)',
'RGB100': 'rgb(1%,2%,100%)',
'RGBA': 'rgba(1,2,3, 1)',
'RGBA100': 'rgba(1%,2%,100%, 0)',
'HSL': 'hsl(1,2%,3%)',
'HSLA': 'hsla(1,2%,3%, 1.0)'
}
def expanded(*keys):
r = []
for k in keys:
if isinstance(V[k], str):
r.append(V[k])
else:
r.extend(list(V[k]))
return r
# before adding combined
self.V = V
self.ALL = list(self._valuesofkeys(list(V.keys())))
# combined values, only keys of V may be used!
self.V['LENGTHS'] = expanded('0', 'EM', 'EX', 'PX', 'CM', 'MM', 'IN', 'PT', 'PC')
self.V['COLORS'] = expanded('HEX3', 'HEX6', 'RGB', 'RGB100')
self.V['COLORS3'] = expanded('RGBA', 'RGBA100', 'HSL', 'HSLA')
def _allvalues(self):
"Return list of **all** possible values as simple list"
return copy.copy(self.ALL)
def _valuesofkeys(self, keys):
"Generate all distinct values in given keys of self.V"
done = []
for key in keys:
if isinstance(key, list):
# not a key but a list of values, return directly
for v in key:
yield v
else:
v = self.V[key]
if isinstance(v, str):
# single value
if v not in done:
done.append(v)
yield v
else:
# a list of values
for value in v:
if value not in done:
done.append(value)
yield value
def _check(self, name, keys):
"""
Check each value in values if for property name p.name==exp.
"""
notvalid = self._allvalues()
for value in self._valuesofkeys(keys):
if name == debug:
print('+True?', Property(name, value).valid, value)
self.assertEqual(True, Property(name, value).valid)
if value in notvalid:
notvalid.remove(value)
for value in notvalid:
if name == debug:
print('-False?', Property(name, value).valid, value)
self.assertEqual(False, Property(name, value).valid)
def test_properties(self):
"properties"
tests = {
# propname: key or [list of values]
'color': ('COLORS', 'COLORS3', ['inherit', 'red']),
'fit': (['fill', 'hidden', 'meet', 'slice'],),
'fit-position': ('LENGTHS', 'PERCENTAGE',
['auto',
'top left',
'0% 50%',
'1cm 5em',
'bottom']),
'font-family': ('STRING', 'IDENT', ['a, b',
'"a", "b"',
'a, "b"',
'"a", b',
r'a\{b',
r'a\ b',
'a b'
'a b, c d , e'
]),
#'src': ('STRING',),
'font-weight': (['normal', 'bold', 'bolder', 'lighter', 'inherit',
'100', '200', '300', '400', '500', '600', '700',
'800', '900'],),
'font-stretch': (['normal', 'wider', 'narrower', 'ultra-condensed',
'extra-condensed', 'condensed', 'semi-condensed',
'semi-expanded', 'expanded', 'extra-expanded',
'ultra-expanded', 'inherit'],),
'font-style': (['normal', 'italic', 'oblique', 'inherit'],),
'font-variant': (['normal', 'small-caps', 'inherit'],),
'font-size': ('LENGTHS', 'PERCENTAGE', ['xx-small', 'x-small',
'small', 'medium', 'large',
'x-large', 'xx-large',
'larger', 'smaller',
'1em', '1%', 'inherit']),
'font-size-adjust': ('NUMBER', ['none', 'inherit']),
# 'font': (['italic small-caps bold 1px/3 a, "b", serif',
# 'caption', 'icon', 'menu', 'message-box', 'small-caption',
# 'status-bar', 'inherit'],),
'image-orientation': ('0', 'ANGLES', ['auto']),
'left': ('LENGTHS', 'PERCENTAGE', ['inherit', 'auto']),
'opacity': ('NUMBER', ['inherit']),
'orphans': ('0', ['1', '99999', 'inherit']),
'page': ('IDENT',),
'page-break-inside': (['auto', 'inherit', 'avoid'],),
'size': ('LENGTHS', ['auto',
'1em 1em',
'a4 portrait',
'b4 landscape',
'A5 PORTRAIT']),
'widows': ('0', ['1', '99999', 'inherit'])
}
for name, keys in list(tests.items()):
# keep track of valid keys
self._check(name, keys)
def test_validate(self):
"Property.validate() and Property.valid"
tests = {
# (default L2, no default, no profile, L2, Color L3)
'red': (True, True, True, True, True),
'rgba(1,2,3,1)': (False, True, True, False, True),
'1': (False, False, False, False, False)
}
for v, rs in list(tests.items()):
p = Property('color', v)
# TODO: Fix
# cssutils.profile.defaultProfiles = \
# cssutils.profile.CSS_LEVEL_2
# self.assertEqual(rs[0], p.valid)
cssutils.profile.defaultProfiles = None
self.assertEqual(rs[1], p.valid)
self.assertEqual(rs[2], p.validate())
# self.assertEqual(rs[3], p.validate(
# profiles=cssutils.profile.CSS_LEVEL_2))
# self.assertEqual(rs[4], p.validate(
# cssutils.profile.CSS3_COLOR))
if __name__ == '__main__':
debug = 'font-family'
import logging
import unittest
cssutils.log.setLevel(logging.FATAL)
#debug = True
unittest.main()