%PDF- %PDF-
Direktori : /usr/lib/python3/dist-packages/cssutils/tests/ |
Current File : //usr/lib/python3/dist-packages/cssutils/tests/test_cssvalue.py |
"""Testcases for cssutils.css.CSSValue and CSSPrimitiveValue.""" # ## from decimal import Decimal # maybe for later tests? #import xml.dom #import basetest #import cssutils #import types # #class CSSValueTestCase(basetest.BaseTestCase): # # def setUp(self): # self.r = cssutils.css.CSSValue() # needed for tests # # def test_init(self): # "CSSValue.__init__()" # v = cssutils.css.CSSValue() # self.assertTrue(u'' == v.cssText) # self.assertTrue(None is v.cssValueType) # self.assertTrue(None == v.cssValueTypeString) # # def test_escapes(self): # "CSSValue Escapes" # v = cssutils.css.CSSValue() # v.cssText = u'1px' # self.assertTrue(v.CSS_PRIMITIVE_VALUE == v.cssValueType) # self.assertTrue(v.CSS_PX == v.primitiveType) # self.assertTrue(u'1px' == v.cssText) # # v.cssText = u'1PX' # self.assertTrue(v.CSS_PRIMITIVE_VALUE == v.cssValueType) # self.assertTrue(v.CSS_PX == v.primitiveType) # self.assertTrue(u'1px' == v.cssText) # # v.cssText = u'1p\\x' # self.assertTrue(v.CSS_PRIMITIVE_VALUE == v.cssValueType) # self.assertTrue(v.CSS_PX == v.primitiveType) # self.assertTrue(u'1px' == v.cssText) # # def test_cssText(self): # "CSSValue.cssText" # v = cssutils.css.CSSValue() # v.cssText = u'1px' # self.assertTrue(v.CSS_PRIMITIVE_VALUE == v.cssValueType) # self.assertTrue(v.CSS_PX == v.primitiveType) # self.assertTrue(u'1px' == v.cssText) # # v = cssutils.css.CSSValue() # v.cssText = u'1px' # self.assertTrue(v.CSS_PRIMITIVE_VALUE == v.cssValueType) # self.assertTrue(v.CSS_PX == v.primitiveType) # self.assertTrue(u'1px' == v.cssText) # # v = cssutils.css.CSSValue() # v.cssText = u'a ,b, c ,"d or d", "e, " ' # self.assertEqual(v.CSS_PRIMITIVE_VALUE, v.cssValueType) # self.assertEqual(v.CSS_STRING, v.primitiveType) # self.assertEqual(u'a, b, c, "d or d", "e, "', v.cssText) # # v.cssText = u' 1 px ' # self.assertTrue(v.CSS_VALUE_LIST == v.cssValueType) # self.assertTrue('1 px' == v.cssText) # # v.cssText = u' normal 1px a, b, "c" end ' # self.assertTrue(v.CSS_VALUE_LIST == v.cssValueType) # self.assertEqual('normal 1px a, b, "c" end', v.cssText) # # for i, x in enumerate(v): # self.assertEqual(x.CSS_PRIMITIVE_VALUE, x.cssValueType) # if x == 0: # self.assertEqual(x.CSS_IDENT, x.primitiveType) # self.assertEqual(u'normal', x.cssText) # elif x == 1: # self.assertEqual(x.CSS_PX, x.primitiveType) # self.assertEqual(u'1px', x.cssText) # if x == 2: # self.assertEqual(x.CSS_STRING, x.primitiveType) # self.assertEqual(u'a, b, "c"', x.cssText) # if x == 3: # self.assertEqual(x.CSS_IDENT, x.primitiveType) # self.assertEqual(u'end', x.cssText) # # # v = cssutils.css.CSSValue() # v.cssText = u' 1 px ' # self.assertTrue(v.CSS_VALUE_LIST == v.cssValueType) # self.assertTrue(u'1 px' == v.cssText) # # v.cssText = u'expression(document.body.clientWidth > 972 ? "1014px": "100%" )' # self.assertTrue(v.CSS_PRIMITIVE_VALUE == v.cssValueType) # self.assertTrue(v.CSS_UNKNOWN == v.primitiveType) # self.assertEqual(u'expression(document.body.clientWidth > 972?"1014px": "100%")', # v.cssText) # # def test_cssText2(self): # "CSSValue.cssText 2" # tests = { # # mix # u'a()1,-1,+1,1%,-1%,1px,-1px,"a",a,url(a),#aabb44': # u'a() 1, -1, 1, 1%, -1%, 1px, -1px, "a", a, url(a), #ab4', # # # S or COMMENT # u'red': u'red', # u'red ': u'red', # u' red ': u'red', # u'/**/red': u'/**/ red', # u'red/**/': u'red /**/', # u'/**/red/**/': u'/**/ red /**/', # u'/**/ red': u'/**/ red', # u'red /**/': u'red /**/', # u'/**/ red /**/': u'/**/ red /**/', # u'red-': u'red-', # # # num / dimension # u'.0': u'0', # u'0': u'0', # u'0.0': u'0', # u'00': u'0', # u'0%': u'0%', # u'0px': u'0', # u'-.0': u'0', # u'-0': u'0', # u'-0.0': u'0', # u'-00': u'0', # u'-0%': u'0%', # u'-0px': u'0', # u'+.0': u'0', # u'+0': u'0', # u'+0.0': u'0', # u'+00': u'0', # u'+0%': u'0%', # u'+0px': u'0', # u'1': u'1', # u'1.0': u'1', # u'1px': u'1px', # u'1%': u'1%', # u'1px1': u'1px1', # u'+1': u'1', # u'-1': u'-1', # u'+1.0': u'1', # u'-1.0': u'-1', # # # string, escaped nl is removed during tokenizing # u'"x"': u'"x"', # u"'x'": u'"x"', # #ur''' "1\'2" ''': u'''"1'2"''', #??? # #ur"'x\"'": ur'"x\""', #??? # ur'''"x\ #y"''': u'''"xy"''', # # # hash and rgb/a # u'#112234': u'#112234', # u'#112233': u'#123', # u'rgb(1,2,3)': u'rgb(1, 2, 3)', # u'rgb( 1 , 2 , 3 )': u'rgb(1, 2, 3)', # u'rgb(-1,+2,0)': u'rgb(-1, 2, 0)', # u'rgba(1,2,3,4)': u'rgba(1, 2, 3, 4)', # u'rgba( 1 , 2 , 3 , 4 )': u'rgba(1, 2, 3, 4)', # u'rgba(-1,+2,0, 0)': u'rgba(-1, 2, 0, 0)', # # # FUNCTION # u'f(1,2)': u'f(1, 2)', # u'f( 1 , 2 )': u'f(1, 2)', # u'f(-1,+2)': u'f(-1, 2)', # u'f( -1 , +2 )': u'f(-1, 2)', # u'fun( -1 , +2 )': u'fun(-1, 2)', # u'local( x )': u'local(x)', # u'test(1px, #111, y, 1, 1%, "1", y(), var(x))': # u'test(1px, #111, y, 1, 1%, "1", y(), var(x))', # u'test(-1px, #111, y, -1, -1%, "1", -y())': # u'test(-1px, #111, y, -1, -1%, "1", -y())', # u'url(y) format( "x" , "y" )': u'url(y) format("x", "y")', # u'f(1 2,3 4)': u'f(1 2, 3 4)', # # # IE expression # ur'Expression()': u'Expression()', # ur'expression(-1 < +2)': u'expression(-1< + 2)', # ur'expression(document.width == "1")': u'expression(document.width=="1")', # u'alpha(opacity=80)': u'alpha(opacity=80)', # u'alpha( opacity = 80 , x=2 )': u'alpha(opacity=80, x=2)', # # # unicode-range # 'u+f': 'u+f', # 'U+ABCdef': 'u+abcdef', # # # url # 'url(a)': 'url(a)', # 'uRl(a)': 'url(a)', # 'u\\rl(a)': 'url(a)', # 'url("a")': 'url(a)', # 'url( "a" )': 'url(a)', # 'url(a)': 'url(a)', # 'url(";")': 'url(";")', # 'url(",")': 'url(",")', # 'url(")")': 'url(")")', # '''url("'")''': '''url("'")''', # '''url('"')''': '''url("\\"")''', # '''url("'")''': '''url("'")''', # # # operator # '1': '1', # '1 2': '1 2', # '1 2': '1 2', # '1,2': '1, 2', # '1, 2': '1, 2', # '1 ,2': '1, 2', # '1 , 2': '1, 2', # '1/2': '1/2', # '1/ 2': '1/2', # '1 /2': '1/2', # '1 / 2': '1/2', # # comment # '1/**/2': '1 /**/ 2', # '1 /**/2': '1 /**/ 2', # '1/**/ 2': '1 /**/ 2', # '1 /**/ 2': '1 /**/ 2', # '1 /*a*/ /*b*/ 2': '1 /*a*/ /*b*/ 2', # # , before # '1,/**/2': '1, /**/ 2', # '1 ,/**/2': '1, /**/ 2', # '1, /**/2': '1, /**/ 2', # '1 , /**/2': '1, /**/ 2', # # , after # '1/**/,2': '1 /**/, 2', # '1/**/ ,2': '1 /**/, 2', # '1/**/, 2': '1 /**/, 2', # '1/**/ , 2': '1 /**/, 2', # # all # '1/*a*/ ,/*b*/ 2': '1 /*a*/, /*b*/ 2', # '1 /*a*/, /*b*/2': '1 /*a*/, /*b*/ 2', # '1 /*a*/ , /*b*/ 2': '1 /*a*/, /*b*/ 2', # # # list # 'a b1,b2 b2,b3,b4': 'a b1, b2 b2, b3, b4', # 'a b1 , b2 b2 , b3 , b4': 'a b1, b2 b2, b3, b4', # 'u+1 , u+2-5': 'u+1, u+2-5', # u'local( x ), url(y) format( "x" , "y" )': # u'local(x), url(y) format("x", "y")', # # FUNCTION # u'attr( href )': u'attr(href)', # # PrinceXML extende FUNC syntax with nested FUNC # u'target-counter(attr(href),page)': u'target-counter(attr(href), page)' # } # # self.do_equal_r(tests) # # tests = { # u'a+': xml.dom.SyntaxErr, # u'-': xml.dom.SyntaxErr, # u'+': xml.dom.SyntaxErr, # u'-%': xml.dom.SyntaxErr, # u'+a': xml.dom.SyntaxErr, # u'--1px': xml.dom.SyntaxErr, # u'++1px': xml.dom.SyntaxErr, # u'#': xml.dom.SyntaxErr, # u'#00': xml.dom.SyntaxErr, # u'#0000': xml.dom.SyntaxErr, # u'#00000': xml.dom.SyntaxErr, # u'#0000000': xml.dom.SyntaxErr, # u'-#0': xml.dom.SyntaxErr, # # operator # u',': xml.dom.SyntaxErr, # u'1,,2': xml.dom.SyntaxErr, # u'1,/**/,2': xml.dom.SyntaxErr, # u'1 , /**/ , 2': xml.dom.SyntaxErr, # u'1,': xml.dom.SyntaxErr, # u'1, ': xml.dom.SyntaxErr, # u'1 ,': xml.dom.SyntaxErr, # u'1 , ': xml.dom.SyntaxErr, # u'1 , ': xml.dom.SyntaxErr, # u'1//2': xml.dom.SyntaxErr, # # URL # u'url(x))': xml.dom.SyntaxErr, # # string # u'"': xml.dom.SyntaxErr, # u"'": xml.dom.SyntaxErr, # # function # u'f(-)': xml.dom.SyntaxErr, # u'f(x))': xml.dom.SyntaxErr # } # self.do_raise_r(tests) # # def test_incomplete(self): # "CSSValue (incomplete)" # tests = { # u'url("a': u'url(a)', # u'url(a': u'url(a)' # } # for v, exp in tests.items(): # s = cssutils.parseString('a { background: %s' % v) # v = s.cssRules[0].style.background # self.assertEqual(v, exp) # # def test_cssValueType(self): # "CSSValue.cssValueType .cssValueTypeString" # tests = [ # ([u'inherit', u'INhe\\rit'], 'CSS_INHERIT', cssutils.css.CSSValue), # (['1', '1%', '1em', '1ex', '1px', '1cm', '1mm', '1in', '1pt', '1pc', # '1deg', '1rad', '1grad', '1ms', '1s', '1hz', '1khz', '1other', # '"string"', "'string'", 'url(x)', 'red', # 'attr(a)', 'counter(x)', 'rect(1px, 2px, 3px, 4px)', # 'rgb(0, 0, 0)', '#000', '#123456', 'rgba(0, 0, 0, 0)', # 'hsl(0, 0, 0)', 'hsla(0, 0, 0, 0)', # ], # 'CSS_PRIMITIVE_VALUE', cssutils.css.CSSPrimitiveValue), # ([u'1px 1px', 'red blue green x'], 'CSS_VALUE_LIST', cssutils.css.CSSValueList), # # what is a custom value? # #([], 'CSS_CUSTOM', cssutils.css.CSSValue) # ] # for values, name, cls in tests: # for value in values: # v = cssutils.css.CSSValue(cssText=value) # if value == "'string'": # # will be changed to " always # value = '"string"' # self.assertEqual(value, v.cssText) # self.assertEqual(name, v.cssValueTypeString) # self.assertEqual(getattr(v, name), v.cssValueType) # self.assertEqual(cls, type(v)) # # def test_readonly(self): # "(CSSValue._readonly)" # v = cssutils.css.CSSValue(cssText='inherit') # self.assertTrue(False is v._readonly) # # v = cssutils.css.CSSValue(cssText='inherit', readonly=True) # self.assertTrue(True is v._readonly) # self.assertTrue(u'inherit', v.cssText) # self.assertRaises(xml.dom.NoModificationAllowedErr, v._setCssText, u'x') # self.assertTrue(u'inherit', v.cssText) # # def test_reprANDstr(self): # "CSSValue.__repr__(), .__str__()" # cssText='inherit' # # s = cssutils.css.CSSValue(cssText=cssText) # # self.assertTrue(cssText in str(s)) # # s2 = eval(repr(s)) # self.assertTrue(isinstance(s2, s.__class__)) # self.assertTrue(cssText == s2.cssText) # # #class CSSPrimitiveValueTestCase(basetest.BaseTestCase): # # def test_init(self): # "CSSPrimitiveValue.__init__()" # v = cssutils.css.CSSPrimitiveValue(u'1') # self.assertTrue(u'1' == v.cssText) # # self.assertTrue(v.CSS_PRIMITIVE_VALUE == v.cssValueType) # self.assertTrue("CSS_PRIMITIVE_VALUE" == v.cssValueTypeString) # # self.assertTrue(v.CSS_NUMBER == v.primitiveType) # self.assertTrue("CSS_NUMBER" == v.primitiveTypeString) # # # DUMMY to be able to test empty constructor call # #self.assertRaises(xml.dom.SyntaxErr, v.__init__, None) # # self.assertRaises(xml.dom.InvalidAccessErr, v.getCounterValue) # self.assertRaises(xml.dom.InvalidAccessErr, v.getRGBColorValue) # self.assertRaises(xml.dom.InvalidAccessErr, v.getRectValue) # self.assertRaises(xml.dom.InvalidAccessErr, v.getStringValue) # # def test_CSS_UNKNOWN(self): # "CSSPrimitiveValue.CSS_UNKNOWN" # v = cssutils.css.CSSPrimitiveValue(u'expression(false)') # self.assertTrue(v.CSS_UNKNOWN == v.primitiveType) # self.assertTrue('CSS_UNKNOWN' == v.primitiveTypeString) # # def test_CSS_NUMBER_AND_OTHER_DIMENSIONS(self): # "CSSPrimitiveValue.CSS_NUMBER .. CSS_DIMENSION" # defs = [ # ('', 'CSS_NUMBER'), # ('%', 'CSS_PERCENTAGE'), # ('em', 'CSS_EMS'), # ('ex', 'CSS_EXS'), # ('px', 'CSS_PX'), # ('cm', 'CSS_CM'), # ('mm', 'CSS_MM'), # ('in', 'CSS_IN'), # ('pt', 'CSS_PT'), # ('pc', 'CSS_PC'), # ('deg', 'CSS_DEG'), # ('rad', 'CSS_RAD'), # ('grad', 'CSS_GRAD'), # ('ms', 'CSS_MS'), # ('s', 'CSS_S'), # ('hz', 'CSS_HZ'), # ('khz', 'CSS_KHZ'), # ('other_dimension', 'CSS_DIMENSION') # ] # for dim, name in defs: # for n in (0, 1, 1.1, -1, -1.1, -0): # v = cssutils.css.CSSPrimitiveValue('%i%s' % (n, dim)) # self.assertEqual(name, v.primitiveTypeString) # self.assertEqual(getattr(v, name), v.primitiveType) # # def test_CSS_STRING_AND_OTHER(self): # "CSSPrimitiveValue.CSS_STRING .. CSS_RGBCOLOR" # defs = [ # (('""', "''", '"some thing"', "' A\\ND '", # # comma separated lists are STRINGS FOR NOW! # 'a, b', # '"a", "b"', # ), 'CSS_STRING'), # (('url(a)', 'url("a b")', "url(' ')"), 'CSS_URI'), # (('some', 'or_anth-er'), 'CSS_IDENT'), # (('attr(a)', 'attr(b)'), 'CSS_ATTR'), # (('counter(1)', 'counter(2)'), 'CSS_COUNTER'), # (('rect(1,2,3,4)',), 'CSS_RECT'), # (('rgb(1,2,3)', 'rgb(10%, 20%, 30%)', '#123', '#123456'), # 'CSS_RGBCOLOR'), # (('rgba(1,2,3,4)','rgba(10%, 20%, 30%, 40%)', ), # 'CSS_RGBACOLOR'), # (('U+0', 'u+ffffff', 'u+000000-f', # 'u+0-f, U+ee-ff'), 'CSS_UNICODE_RANGE') # ] # # for examples, name in defs: # for x in examples: # v = cssutils.css.CSSPrimitiveValue(x) # self.assertEqual(getattr(v, name), v.primitiveType) # self.assertEqual(name, v.primitiveTypeString) # # def test_getFloat(self): # "CSSPrimitiveValue.getFloatValue()" # # NOT TESTED are float values as it seems difficult to # # compare these. Maybe use decimal.Decimal? # # v = cssutils.css.CSSPrimitiveValue(u'1px') # tests = { # '0': (v.CSS_NUMBER, 0), # '-1.1': (v.CSS_NUMBER, -1.1), # '1%': (v.CSS_PERCENTAGE, 1), # '-1%': (v.CSS_PERCENTAGE, -1), # '1em': (v.CSS_EMS, 1), # '-1.1em': (v.CSS_EMS, -1.1), # '1ex': (v.CSS_EXS, 1), # '1px': (v.CSS_PX, 1), # # '1cm': (v.CSS_CM, 1), # '1cm': (v.CSS_MM, 10), # '254cm': (v.CSS_IN, 100), # '1mm': (v.CSS_MM, 1), # '10mm': (v.CSS_CM, 1), # '254mm': (v.CSS_IN, 10), # '1in': (v.CSS_IN, 1), # '100in': (v.CSS_CM, 254), # ROUNDED!!! # '10in': (v.CSS_MM, 254), # ROUNDED!!! # # '1pt': (v.CSS_PT, 1), # '1pc': (v.CSS_PC, 1), # # '1deg': (v.CSS_DEG, 1), # '1rad': (v.CSS_RAD, 1), # '1grad': (v.CSS_GRAD, 1), # # '1ms': (v.CSS_MS, 1), # '1000ms': (v.CSS_S, 1), # '1s': (v.CSS_S, 1), # '1s': (v.CSS_MS, 1000), # # '1hz': (v.CSS_HZ, 1), # '1000hz': (v.CSS_KHZ, 1), # '1khz': (v.CSS_KHZ, 1), # '1khz': (v.CSS_HZ, 1000), # # '1DIMENSION': (v.CSS_DIMENSION, 1), # } # for cssText in tests: # v.cssText = cssText # unitType, exp = tests[cssText] # val = v.getFloatValue(unitType) # if unitType in (v.CSS_IN, v.CSS_CM): # val = round(val) # self.assertEqual(val , exp) # # def test_setFloat(self): # "CSSPrimitiveValue.setFloatValue()" # V = cssutils.css.CSSPrimitiveValue # # tests = { # # unitType, value # (V.CSS_NUMBER, 1): [ # # unitType, setvalue, # # getvalue or expected exception, msg or cssText # (V.CSS_NUMBER, 0, 0, '0'), # (V.CSS_NUMBER, 0.1, 0.1, '0.1'), # (V.CSS_NUMBER, -0, 0, '0'), # (V.CSS_NUMBER, 2, 2, '2'), # (V.CSS_NUMBER, 2.0, 2, '2'), # (V.CSS_NUMBER, 2.1, 2.1, '2.1'), # (V.CSS_NUMBER, -2.1, -2.1, '-2.1'), # # setting with string does work # (V.CSS_NUMBER, '1', 1, '1'), # (V.CSS_NUMBER, '1.1', 1.1, '1.1'), # (V.CSS_PX, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_DEG, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_RAD, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_GRAD, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_S, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_MS, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_KHZ, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_HZ, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_DIMENSION, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_MM, 2, xml.dom.InvalidAccessErr, None), # # (V.CSS_NUMBER, 'x', xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: floatValue 'x' is not a float"), # (V.CSS_NUMBER, '1x', xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: floatValue '1x' is not a float"), # # (V.CSS_STRING, 'x', xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: unitType 'CSS_STRING' is not a float type"), # (V.CSS_URI, 'x', xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: unitType 'CSS_URI' is not a float type"), # (V.CSS_ATTR, 'x', xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: unitType 'CSS_ATTR' is not a float type"), # (V.CSS_IDENT, 'x', xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: unitType 'CSS_IDENT' is not a float type"), # (V.CSS_RGBCOLOR, 'x', xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: unitType 'CSS_RGBCOLOR' is not a float type"), # (V.CSS_RGBACOLOR, 'x', xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: unitType 'CSS_RGBACOLOR' is not a float type"), # (V.CSS_RECT, 'x', xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: unitType 'CSS_RECT' is not a float type"), # (V.CSS_COUNTER, 'x', xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: unitType 'CSS_COUNTER' is not a float type"), # (V.CSS_EMS, 1, xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_NUMBER' to 'CSS_EMS'"), # (V.CSS_EXS, 1, xml.dom.InvalidAccessErr, # "CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_NUMBER' to 'CSS_EXS'") # ], # (V.CSS_MM, '1mm'): [ # (V.CSS_MM, 2, 2, '2mm'), # (V.CSS_MM, 0, 0, '0mm'), # (V.CSS_MM, 0.1, 0.1, '0.1mm'), # (V.CSS_MM, -0, -0, '0mm'), # (V.CSS_MM, 3.0, 3, '3mm'), # (V.CSS_MM, 3.1, 3.1, '3.1mm'), # (V.CSS_MM, -3.1, -3.1, '-3.1mm'), # (V.CSS_CM, 1, 10, '10mm'), # (V.CSS_IN, 10, 254, '254mm'), # (V.CSS_PT, 1, 1828.8, '1828.8mm'), # (V.CSS_PX, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_NUMBER, 2, xml.dom.InvalidAccessErr, None) # ], # (V.CSS_PT, '1pt'): [ # (V.CSS_PT, 2, 2, '2pt'), # (V.CSS_PC, 12, 1, '1pt'), # (V.CSS_NUMBER, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_DEG, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_PX, 1, xml.dom.InvalidAccessErr, None) # ], # (V.CSS_KHZ, '1khz'): [ # (V.CSS_HZ, 2000, 2, '2khz'), # (V.CSS_NUMBER, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_DEG, 1, xml.dom.InvalidAccessErr, None), # (V.CSS_PX, 1, xml.dom.InvalidAccessErr, None) # ] # } # for test in tests: # initialType, initialValue = test # pv = cssutils.css.CSSPrimitiveValue(initialValue) # for setType, setValue, exp, cssText in tests[test]: # if type(exp) == types.TypeType or\ # type(exp) == types.ClassType: # 2.4 compatibility # if cssText: # self.assertRaisesMsg( # exp, cssText, pv.setFloatValue, setType, setValue) # else: # self.assertRaises( # exp, pv.setFloatValue, setType, setValue) # else: # pv.setFloatValue(setType, setValue) # self.assertEqual(pv._value[0], cssText) # if cssText == '0mm': # cssText = '0' # self.assertEqual(pv.cssText, cssText) # self.assertEqual(pv.getFloatValue(initialType), exp) # # def test_getString(self): # "CSSPrimitiveValue.getStringValue()" # v = cssutils.css.CSSPrimitiveValue(u'1px') # self.assertTrue(v.primitiveType == v.CSS_PX) # self.assertRaises(xml.dom.InvalidAccessErr, # v.getStringValue) # # pv = cssutils.css.CSSPrimitiveValue # tests = { # pv.CSS_STRING: ("'red'", 'red'), # pv.CSS_STRING: ('"red"', 'red'), # pv.CSS_URI: ('url(http://example.com)', None), # pv.CSS_URI: ("url('http://example.com')", # u"http://example.com"), # pv.CSS_URI: ('url("http://example.com")', # u'http://example.com'), # pv.CSS_URI: ('url("http://example.com?)")', # u'http://example.com?)'), # pv.CSS_IDENT: ('red', None), # pv.CSS_ATTR: ('attr(att-name)', # u'att-name'), # the name of the attrr # } # for t in tests: # val, exp = tests[t] # if not exp: # exp = val # # v = cssutils.css.CSSPrimitiveValue(val) # self.assertEqual(v.primitiveType, t) # self.assertEqual(v.getStringValue(), exp) # # def test_setString(self): # "CSSPrimitiveValue.setStringValue()" # # CSS_STRING # v = cssutils.css.CSSPrimitiveValue(u'"a"') # self.assertTrue(v.CSS_STRING == v.primitiveType) # v.setStringValue(v.CSS_STRING, 'b') # self.assertTrue(('b', 'STRING') == v._value) # self.assertEqual('b', v.getStringValue()) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_STRING' to 'CSS_URI'", # v.setStringValue, *(v.CSS_URI, 'x')) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_STRING' to 'CSS_IDENT'", # v.setStringValue, *(v.CSS_IDENT, 'x')) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_STRING' to 'CSS_ATTR'", # v.setStringValue, *(v.CSS_ATTR, 'x')) # # # CSS_IDENT # v = cssutils.css.CSSPrimitiveValue('new') # v.setStringValue(v.CSS_IDENT, 'ident') # self.assertTrue(v.CSS_IDENT == v.primitiveType) # self.assertTrue(('ident', 'IDENT') == v._value) # self.assertTrue('ident' == v.getStringValue()) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_IDENT' to 'CSS_URI'", # v.setStringValue, *(v.CSS_URI, 'x')) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_IDENT' to 'CSS_STRING'", # v.setStringValue, *(v.CSS_STRING, '"x"')) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_IDENT' to 'CSS_ATTR'", # v.setStringValue, *(v.CSS_ATTR, 'x')) # # # CSS_URI # v = cssutils.css.CSSPrimitiveValue('url(old)') # v.setStringValue(v.CSS_URI, '(') # self.assertEqual((u'(', 'URI'), v._value) # self.assertEqual(u'(', v.getStringValue()) # # v.setStringValue(v.CSS_URI, ')') # self.assertEqual((u')', 'URI'), v._value) # self.assertEqual(u')', v.getStringValue()) # # v.setStringValue(v.CSS_URI, '"') # self.assertEqual(ur'"', v.getStringValue()) # self.assertEqual((ur'"', 'URI'), v._value) # # v.setStringValue(v.CSS_URI, "''") # self.assertEqual(ur"''", v.getStringValue()) # self.assertEqual((ur"''", 'URI'), v._value) # # v.setStringValue(v.CSS_URI, ',') # self.assertEqual(ur',', v.getStringValue()) # self.assertEqual((ur',', 'URI'), v._value) # # v.setStringValue(v.CSS_URI, ' ') # self.assertEqual((u' ', 'URI'), v._value) # self.assertEqual(u' ', v.getStringValue()) # # v.setStringValue(v.CSS_URI, 'a)') # self.assertEqual((u'a)', 'URI'), v._value) # self.assertEqual(u'a)', v.getStringValue()) # # v.setStringValue(v.CSS_URI, 'a') # self.assertTrue(v.CSS_URI == v.primitiveType) # self.assertEqual((u'a', 'URI'), v._value) # self.assertEqual(u'a', v.getStringValue()) # # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_URI' to 'CSS_IDENT'", # v.setStringValue, *(v.CSS_IDENT, 'x')) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_URI' to 'CSS_STRING'", # v.setStringValue, *(v.CSS_STRING, '"x"')) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_URI' to 'CSS_ATTR'", # v.setStringValue, *(v.CSS_ATTR, 'x')) # # # CSS_ATTR # v = cssutils.css.CSSPrimitiveValue('attr(old)') # v.setStringValue(v.CSS_ATTR, 'a') # self.assertTrue(v.CSS_ATTR == v.primitiveType) # self.assertTrue('a' == v.getStringValue()) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_ATTR' to 'CSS_IDENT'", # v.setStringValue, *(v.CSS_IDENT, 'x')) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_ATTR' to 'CSS_STRING'", # v.setStringValue, *(v.CSS_STRING, '"x"')) # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: Cannot coerce primitiveType 'CSS_ATTR' to 'CSS_URI'", # v.setStringValue, *(v.CSS_URI, 'x')) # # # TypeError as 'x' is no valid type # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: stringType 'x' (UNKNOWN TYPE) is not a string type", # v.setStringValue, *('x', 'brown')) # # IndexError as 111 is no valid type # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: stringType 111 (UNKNOWN TYPE) is not a string type", # v.setStringValue, *(111, 'brown')) # # CSS_PX is no string type # self.assertRaisesMsg(xml.dom.InvalidAccessErr, # u"CSSPrimitiveValue: stringType CSS_PX is not a string type", # v.setStringValue, *(v.CSS_PX, 'brown')) # # def test_typeRGBColor(self): # "RGBColor" # v = cssutils.css.CSSPrimitiveValue('RGB(1, 5, 10)') # self.assertEqual(v.CSS_RGBCOLOR, v.primitiveType) # self.assertEqual(u'rgb(1, 5, 10)', v.cssText) # # v = cssutils.css.CSSPrimitiveValue('rgb(1, 5, 10)') # self.assertEqual(v.CSS_RGBCOLOR, v.primitiveType) # self.assertEqual(u'rgb(1, 5, 10)', v.cssText) # # v = cssutils.css.CSSPrimitiveValue('rgb(1%, 5%, 10%)') # self.assertEqual(v.CSS_RGBCOLOR, v.primitiveType) # self.assertEqual(u'rgb(1%, 5%, 10%)', v.cssText) # # v = cssutils.css.CSSPrimitiveValue(' rgb( 1 ,5, 10 )') # self.assertEqual(v.CSS_RGBCOLOR, v.primitiveType) # v = cssutils.css.CSSPrimitiveValue('rgb(1,5,10)') # self.assertEqual(v.CSS_RGBCOLOR, v.primitiveType) # v = cssutils.css.CSSPrimitiveValue('rgb(1%, .5%, 10.1%)') # self.assertEqual(v.CSS_RGBCOLOR, v.primitiveType) # # def test_reprANDstr(self): # "CSSPrimitiveValue.__repr__(), .__str__()" # v='111' # # s = cssutils.css.CSSPrimitiveValue(v) # # self.assertTrue(v in str(s)) # self.assertTrue('CSS_NUMBER' in str(s)) # # s2 = eval(repr(s)) # self.assertTrue(isinstance(s2, s.__class__)) # self.assertTrue(v == s2.cssText) # # #class CSSValueListTestCase(basetest.BaseTestCase): # # def test_init(self): # "CSSValueList.__init__()" # v = cssutils.css.CSSValue(cssText=u'red blue') # self.assertTrue(v.CSS_VALUE_LIST == v.cssValueType) # self.assertEqual('red blue', v.cssText) # # self.assertTrue(2 == v.length) # # item = v.item(0) # item.setStringValue(item.CSS_IDENT, 'green') # self.assertEqual('green blue', v.cssText) # # def test_numbers(self): # "CSSValueList.cssText" # tests = { # u'0 0px -0px +0px': (u'0 0 0 0', 4), # u'1 2 3 4': (None, 4), # u'-1 -2 -3 -4': (None, 4), # u'-1 2': (None, 2), # u'-1px red "x"': (None, 3), # u'a, b c': (None, 2), # u'1px1 2% 3': (u'1px1 2% 3', 3), # u'f(+1pX, -2, 5%) 1': (u'f(1px, -2, 5%) 1', 2), # u'0 f()0': (u'0 f() 0', 3), # u'f()0': (u'f() 0', 2), # u'f()1%': (u'f() 1%', 2), # u'f()1px': (u'f() 1px', 2), # u'f()"str"': (u'f() "str"', 2), # u'f()ident': (u'f() ident', 2), # u'f()#123': (u'f() #123', 2), # u'f()url()': (u'f() url()', 2), # u'f()f()': (u'f() f()', 2), # u'url(x.gif)0 0': (u'url(x.gif) 0 0', 3), # u'url(x.gif)no-repeat': (u'url(x.gif) no-repeat', 2) # } # for test in tests: # exp, num = tests[test] # if not exp: # exp = test # v = cssutils.css.CSSValue(cssText=test) # self.assertTrue(v.CSS_VALUE_LIST == v.cssValueType) # self.assertEqual(num, v.length) # self.assertEqual(exp, v.cssText) # # def test_reprANDstr(self): # "CSSValueList.__repr__(), .__str__()" # v='1px 2px' # # s = cssutils.css.CSSValue(v) # self.assertTrue(isinstance(s, cssutils.css.CSSValueList)) # # self.assertTrue('length=2' in str(s)) # self.assertTrue(v in str(s)) # # # not "eval()"able! # #s2 = eval(repr(s)) # # #if __name__ == '__main__': # import unittest # unittest.main()