Package cssutils :: Package tests :: Module test_property |
[hide private]
[frames] | no frames]

# Source Code for Module cssutils.tests.test_property

      1  """Testcases for cssutils.css.property._Property."""
      2  __author__ = '$LastChangedBy: cthedot $'
      3  __date__ = '$LastChangedDate: 2007-10-27 22:27:23 +0200 (Sa, 27 Okt 2007) $'
      4  __version__ = '$LastChangedRevision: 589 $'
      5
      6  import xml.dom
      7  import basetest
      8  import cssutils
      9
     10 -class PropertyTestCase(basetest.BaseTestCase):
     11
     12 -    def setUp(self):
     13          self.r = cssutils.css.property.Property('top', '1px')
     14
     15 -    def test_init(self):
     16          "Property.__init__()"
     17          p = cssutils.css.property.Property('top', '1px')
     18          self.assertEqual('top: 1px', p.cssText)
     19          self.assertEqual('top', p.name)
     20          self.assertEqual('1px', p.value)
     21          self.assertEqual('1px', p.cssValue.cssText)
     22          self.assertEqual(u'', p.priority)
     23          self.assertEqual(True, p.valid)
     24          self.assertEqual(True, p.wellformed)
     25
     26          self.assertEqual([u'top'], p.seqs[0])
     27          self.assertEqual(type(cssutils.css.CSSPrimitiveValue(cssText="2px")), type(p.seqs[1]))
     28          self.assertEqual([], p.seqs[2])
     29
     30          self.assertEqual(True, p.valid)
     31
     32          # Prop of MediaQuery
     33          p = cssutils.css.property.Property('top', _mediaQuery=True)
     34          self.assertEqual('top', p.cssText)
     35          self.assertEqual('top', p.name)
     36          self.assertEqual('', p.value)
     37          self.assertEqual('', p.cssValue.cssText)
     38          self.assertEqual(u'', p.priority)
     39          self.assertEqual(True, p.valid)
     40          p.cssValue.cssText = '1px'
     41          self.assertEqual('top: 1px', p.cssText)
     42          p.cssValue = ''
     43          self.assertEqual('top', p.cssText)
     44
     45 -    def test_cssText(self):
     46          "Property.cssText"
     47          p = cssutils.css.property.Property()
     48
     49          tests = {
     50              u'a: 1': None,
     51              u'a: 1px 2px': None,
     52              u'a: 1 !important': None,
     53              u'a: 1 !IMPORTANT': None,
     54              u'a: 1 !impor\\tant': None,
     55              # TODO: important with unicode escapes!
     56              u'font: normal 1em/1.5 serif': None,
     57              u'font: normal 1em/serif': None
     58              }
     59          self.do_equal_r(tests)
     60
     61          tests = {
     62              u'': (xml.dom.SyntaxErr,
     63                     u'''Property: No property name found: u''.'''),
     64              u':': (xml.dom.SyntaxErr,
     65                     u'''Property: No property name found: u':'. [1:1: :]'''),
     66              u'a': (xml.dom.SyntaxErr,
     67                     u'''Property: No ":" after name found: u'a' [1:1: a]'''),
     68              u'a !': (xml.dom.SyntaxErr,
     69                     u'''Property: No ":" after name found: u'a !' [1:3: !]'''),
     70              u'a:': (xml.dom.SyntaxErr,
     71                     u'''Property: No property value found: u'a:'. [1:2: :]'''),
     72              u'a: ': (xml.dom.SyntaxErr,
     73                     u'''CSSValue: Unknown syntax or no value: u' '.'''),
     74              u'a: 1!': (xml.dom.SyntaxErr,
     75                     u'''Property: Invalid priority: u'!'.'''),
     76              u'a: 1!importantX': (xml.dom.SyntaxErr,
     77                     u'''Property: Unexpected ident. [1:6: importantX]'''),
     78              u'a:!important': (xml.dom.SyntaxErr,
     79                     u'''CSSValue: Unknown syntax or no value: "".'''),
     80              }
     81          for test in tests:
     82              ecp, msg = tests[test]
     83              self.assertRaisesMsg(ecp, msg, p._setCssText, test)
     84
     85
     86 -    def test_name(self):
     87          "Property.name"
     88          p = cssutils.css.property.Property('top', '1px')
     89          p.name = 'left'
     90          self.assertEqual('left', p.name)
     91
     92          tests = {
     93              u'top': None,
     94              u' top': u'top',
     95              u'top ': u'top',
     96              u' top ': u'top',
     97              u'/*x*/ top ': u'top',
     98              u' top /*x*/': u'top',
     99              u'/*x*/top/*x*/': u'top',
    100              u'\\x': None,
    101              u'a\\010': None,
    102              u'a\\01': None
    103              }
    104          self.do_equal_r(tests, att='name')
    105
    106          tests = {
    107              u'': xml.dom.SyntaxErr,
    108              u' ': xml.dom.SyntaxErr,
    109              u'"\n': xml.dom.SyntaxErr,
    110              u'/*x*/': xml.dom.SyntaxErr,
    111              u':': xml.dom.SyntaxErr,
    112              u';': xml.dom.SyntaxErr,
    113              u'top:': xml.dom.SyntaxErr,
    114              u'top;': xml.dom.SyntaxErr,
    115              }
    116          self.do_raise_r(tests, att='_setName')
    117
    118 -    def test_validate(self):
    119          "Property.valid"
    120          p = cssutils.css.property.Property('left', '1px', '')
    121
    122          self.assertEqual(p.valid, True)
    123          self.assertEqual(p.cssValue.valid, True)
    124
    125          p.name = 'color'
    126          self.assertEqual(p.valid, False)
    127          self.assertEqual(p.cssValue.valid, False)
    128
    129          p.name = 'top'
    130          self.assertEqual(p.valid, True)
    131          self.assertEqual(p.cssValue.valid, True)
    132
    133          p.value = 'red'
    134          self.assertEqual(p.valid, False)
    135          self.assertEqual(p.cssValue.valid,False)
    136
    137 -    def test_cssValue(self):
    138          "Property.cssValue"
    139          pass
    140          #TODO
    141
    142 -    def test_priority(self):
    143          "Property.priority"
    144          p = cssutils.css.property.Property('top', '1px', '!important')
    145
    146          p.priority = ''
    147          self.assertEqual('', p.priority)
    148
    149          p.priority = '!important'
    150          self.assertEqual('!important', p.priority)
    151
    152          p.priority = None
    153          self.assertEqual('', p.priority)
    154
    155          p.priority = '!   important'
    156          self.assertEqual('!important', p.priority)
    157
    158          p.priority = '!/*1*/important'
    159          self.assertEqual('! /*1*/ important', p.priority)
    160
    161          tests = {
    162              u' ': xml.dom.SyntaxErr,
    163              u'"\n': xml.dom.SyntaxErr,
    164              u'important': xml.dom.SyntaxErr,
    165              u';': xml.dom.SyntaxErr,
    166              u'!important !important': xml.dom.SyntaxErr
    167              }
    168          self.do_raise_r(tests, att='_setPriority')
    169
    170 -    def test_value(self):
    171          "Property.value"
    172          p = cssutils.css.property.Property('top', u'1px')
    173          self.assertEqual('1px', p.value)
    174          p.value = '2px'
    175          self.assertEqual('2px', p.value)
    176
    177          tests = {
    178              u'1px': None,
    179              u' 2px': u'2px',
    180              u'3px ': u'3px',
    181              u' 4px ': u'4px',
    182              u'5px 1px': u'5px 1px',
    183              }
    184          self.do_equal_r(tests, att='value')
    185
    186          tests = {
    187              # no value
    188              None: xml.dom.SyntaxErr,
    189              u'': xml.dom.SyntaxErr,
    190              u' ': xml.dom.SyntaxErr,
    191              u'"\n': xml.dom.SyntaxErr,
    192              u'/*x*/': xml.dom.SyntaxErr,
    193              # not allowed:
    194              u':': xml.dom.SyntaxErr,
    195              u';': xml.dom.SyntaxErr,
    196              u'!important': xml.dom.SyntaxErr,
    197              }
    198          self.do_raise_r(tests, att='_setValue')
    199
    200 -    def test_reprANDstr(self):
    201          "Property.__repr__(), .__str__()"
    202          name="color"
    203          value="red"
    204          priority="!important"
    205
    206          s = cssutils.css.property.Property(name=name, value=value, priority=priority)
    207
    208          self.assert_(name in str(s))
    209          self.assert_(value in str(s))
    210          self.assert_(priority in str(s))
    211
    212          s2 = eval(repr(s))
    213          self.assert_(isinstance(s2, s.__class__))
    214          self.assert_(name == s2.name)
    215          self.assert_(value == s2.value)
    216          self.assert_(priority == s2.priority)
    217
    218
    219  if __name__ == '__main__':
    220      import unittest
    221      unittest.main()
    222