Package lxml :: Package tests :: Module test_pyclasslookup
[hide private]
[frames] | no frames]

Source Code for Module lxml.tests.test_pyclasslookup

  1  # -*- coding: utf-8 -*- 
  2   
  3  """ 
  4  Tests specific to the Python based class lookup. 
  5  """ 
  6   
  7   
  8  import unittest, operator 
  9   
 10  from common_imports import etree, StringIO, HelperTestCase, fileInTestDir 
 11  from common_imports import SillyFileLike, canonicalize, doctest 
 12   
 13  from lxml.pyclasslookup import PythonElementClassLookup 
 14   
 15  xml_str = '''\ 
 16  <obj:root xmlns:obj="objectified" xmlns:other="otherNS"> 
 17    <obj:c1 a1="A1" a2="A2" other:a3="A3"> 
 18      <obj:c2>0</obj:c2> 
 19      <obj:c2>1</obj:c2> 
 20      <obj:c2>2</obj:c2> 
 21      <other:c2>3</other:c2> 
 22      <c2>3</c2> 
 23    </obj:c1> 
 24  </obj:root>''' 
 25   
 26   
27 -class PyClassLookupTestCase(HelperTestCase):
28 """Test cases for the lxml.pyclasslookup class lookup mechanism. 29 """ 30 etree = etree 31 parser = etree.XMLParser() 32 Element = parser.makeelement 33
34 - def tearDown(self):
36
37 - def _setClassLookup(self, lookup_function):
38 class Lookup(PythonElementClassLookup): 39 def lookup(self, *args): 40 return lookup_function(*args)
41 self.parser.setElementClassLookup( Lookup() ) 42
43 - def _buildElementClass(self):
44 class LocalElement(etree.ElementBase): 45 pass
46 return LocalElement 47
48 - def XML(self, xml):
49 return self.etree.XML(xml, self.parser)
50 51 # --- Test cases 52
53 - def test_lookup(self):
54 el_class = self._buildElementClass() 55 el_class.i = 1 56 def lookup(*args): 57 if el_class.i == 1: 58 el_class.i = 2 59 return el_class
60 self._setClassLookup(lookup) 61 root = self.XML(xml_str) 62 self.assertEquals(2, el_class.i) 63
64 - def test_lookup_keep_ref_assertion(self):
65 el_class = self._buildElementClass() 66 el_class.EL = None 67 def lookup(doc, el): 68 if el_class.EL is None: 69 el_class.EL = el 70 return el_class
71 self._setClassLookup(lookup) 72 root = self.XML(xml_str) 73 self.assertNotEquals(None, el_class.EL) 74 self.assertRaises(AssertionError, el_class.EL.getchildren) 75
76 - def test_lookup_tag(self):
77 el_class = self._buildElementClass() 78 el_class.TAG = None 79 def lookup(doc, el): 80 if el_class.TAG is None: 81 el_class.TAG = el.tag 82 return el_class
83 self._setClassLookup(lookup) 84 root = self.XML(xml_str) 85 self.assertNotEquals(None, root.TAG) 86 self.assertEquals(root.tag, root.TAG) 87
88 - def test_lookup_text(self):
89 el_class = self._buildElementClass() 90 el_class.TEXT = None 91 def lookup(doc, el): 92 if el_class.TEXT is None: 93 el_class.TEXT = el.text 94 return el_class
95 self._setClassLookup(lookup) 96 root = self.XML(xml_str) 97 self.assertNotEquals(None, root.TEXT) 98 self.assertEquals(root.text, root.TEXT) 99
100 - def test_lookup_tail(self):
101 el_class = self._buildElementClass() 102 el_class.TAIL = None 103 def lookup(doc, el): 104 if el_class.TAIL is None: 105 el_class.TAIL = el.tail 106 return el_class
107 self._setClassLookup(lookup) 108 root = self.XML(xml_str) 109 self.assertEquals(root.tail, root.TAIL) 110
111 - def test_lookup_attrib(self):
112 el_class = self._buildElementClass() 113 el_class.ATTRIB = None 114 def lookup(doc, el): 115 if el_class.ATTRIB is None: 116 el_class.ATTRIB = el[0].attrib 117 return el_class
118 self._setClassLookup(lookup) 119 root = self.XML(xml_str) 120 items1 = root[0].attrib.items() 121 items1.sort() 122 items2 = root.ATTRIB.items() 123 items2.sort() 124 self.assertEquals(items1, items2) 125
126 - def test_lookup_prefix(self):
127 el_class = self._buildElementClass() 128 el_class.PREFIX = None 129 def lookup(doc, el): 130 if el_class.PREFIX is None: 131 el_class.PREFIX = el.prefix 132 return el_class
133 self._setClassLookup(lookup) 134 root = self.XML(xml_str) 135 self.assertEquals(root.prefix, root.PREFIX) 136
137 - def test_lookup_sourceline(self):
138 el_class = self._buildElementClass() 139 el_class.LINE = None 140 def lookup(doc, el): 141 if el_class.LINE is None: 142 el_class.LINE = el.sourceline 143 return el_class
144 self._setClassLookup(lookup) 145 root = self.XML(xml_str) 146 self.assertEquals(root.sourceline, root.LINE) 147
148 - def test_lookup_getitem(self):
149 el_class = self._buildElementClass() 150 el_class.CHILD_TAG = None 151 def lookup(doc, el): 152 el_class.CHILD_TAG = el[0].tag 153 return el_class
154 self._setClassLookup(lookup) 155 root = self.XML(xml_str) 156 child_tag = root.CHILD_TAG 157 self.assertNotEquals(None, child_tag) 158 self.assertEquals(root[0].tag, child_tag) 159
160 - def test_lookup_getitem_neg(self):
161 el_class = self._buildElementClass() 162 el_class.CHILD_TAG = None 163 def lookup(doc, el): 164 if el_class.CHILD_TAG is None: 165 el_class.CHILD_TAG = el[-1].tag 166 return el_class
167 self._setClassLookup(lookup) 168 root = self.XML(xml_str) 169 child_tag = root.CHILD_TAG 170 self.assertNotEquals(None, child_tag) 171 self.assertEquals(root[-1].tag, child_tag) 172
173 - def test_lookup_getslice(self):
174 el_class = self._buildElementClass() 175 el_class.CHILD_TAGS = None 176 def lookup(doc, el): 177 if el_class.CHILD_TAGS is None: 178 el_class.CHILD_TAGS = [ c.tag for c in el[1:-1] ] 179 return el_class
180 self._setClassLookup(lookup) 181 root = self.XML(xml_str) 182 child_tags = root.CHILD_TAGS 183 self.assertNotEquals(None, child_tags) 184 self.assertEquals([ c.tag for c in root[1:-1] ], 185 child_tags) 186
187 - def test_lookup_len(self):
188 el_class = self._buildElementClass() 189 el_class.LEN = None 190 def lookup(doc, el): 191 if el_class.LEN is None: 192 el_class.LEN = len(el) 193 return el_class
194 self._setClassLookup(lookup) 195 root = self.XML(xml_str) 196 self.assertEquals(1, el_class.LEN) 197
198 - def test_lookup_bool(self):
199 el_class = self._buildElementClass() 200 el_class.TRUE = None 201 def lookup(doc, el): 202 if el_class.TRUE is None: 203 el_class.TRUE = bool(el) 204 return el_class
205 self._setClassLookup(lookup) 206 root = self.XML(xml_str) 207 self.assert_(el_class.TRUE) 208
209 - def test_lookup_get(self):
210 el_class = self._buildElementClass() 211 el_class.VAL = None 212 def lookup(doc, el): 213 if el_class.VAL is None: 214 el_class.VAL = el[0].get('a1') 215 return el_class
216 self._setClassLookup(lookup) 217 root = self.XML(xml_str) 218 self.assertNotEquals(None, el_class.VAL) 219 self.assertEquals(root[0].get('a1'), el_class.VAL) 220
221 - def test_lookup_get_default(self):
222 el_class = self._buildElementClass() 223 default = str(id(el_class)) 224 el_class.VAL = None 225 def lookup(doc, el): 226 if el_class.VAL is None: 227 el_class.VAL = el[0].get('unknownattribute', default) 228 return el_class
229 self._setClassLookup(lookup) 230 root = self.XML(xml_str) 231 self.assertEquals(default, el_class.VAL) 232
233 - def test_lookup_getchildren(self):
234 el_class = self._buildElementClass() 235 el_class.CHILD_TAGS = None 236 def lookup(doc, el): 237 if el_class.CHILD_TAGS is None: 238 el_class.CHILD_TAGS = [ c.tag for c in el.getchildren() ] 239 return el_class
240 self._setClassLookup(lookup) 241 root = self.XML(xml_str) 242 child_tags = root.CHILD_TAGS 243 self.assertNotEquals(None, child_tags) 244 self.assertEquals([ c.tag for c in root.getchildren() ], 245 child_tags) 246
247 - def test_lookup_getparent(self):
248 el_class = self._buildElementClass() 249 el_class.PARENT = None 250 def lookup(doc, el): 251 if el_class.PARENT is None: 252 el_class.PARENT = el[0].getparent().tag 253 return el_class
254 self._setClassLookup(lookup) 255 root = self.XML(xml_str) 256 self.assertEquals(root.tag, root.PARENT) 257
258 - def test_lookup_getnext(self):
259 el_class = self._buildElementClass() 260 el_class.NEXT = None 261 def lookup(doc, el): 262 if el_class.NEXT is None: 263 el_class.NEXT = el[0][1].getnext().tag 264 return el_class
265 self._setClassLookup(lookup) 266 root = self.XML(xml_str) 267 self.assertNotEquals(None, el_class.NEXT) 268 self.assertEquals(root[0][1].getnext().tag, el_class.NEXT) 269
270 - def test_lookup_getprevious(self):
271 el_class = self._buildElementClass() 272 el_class.PREV = None 273 def lookup(doc, el): 274 if el_class.PREV is None: 275 el_class.PREV = el[0][1].getprevious().tag 276 return el_class
277 self._setClassLookup(lookup) 278 root = self.XML(xml_str) 279 self.assertNotEquals(None, el_class.PREV) 280 self.assertEquals(root[0][1].getprevious().tag, el_class.PREV) 281 282
283 -def test_suite():
284 suite = unittest.TestSuite() 285 suite.addTests([unittest.makeSuite(PyClassLookupTestCase)]) 286 return suite
287 288 if __name__ == '__main__': 289 print 'to test use test.py %s' % __file__ 290