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

Source Code for Module lxml.tests.test_nsclasses

  1  # -*- coding: utf-8 -*- 
  2   
  3  """ 
  4  Test cases related to namespace implementation classes and the 
  5  namespace registry mechanism 
  6  """ 
  7   
  8  import unittest, sys, os.path 
  9   
 10  this_dir = os.path.dirname(__file__) 
 11  if this_dir not in sys.path: 
 12      sys.path.insert(0, this_dir) # needed for Py3 
 13   
 14  from common_imports import etree, HelperTestCase, _bytes 
 15  from common_imports import doctest, make_doctest 
 16   
17 -class ETreeNamespaceClassesTestCase(HelperTestCase):
18
19 - class default_class(etree.ElementBase):
20 pass
21 - class maeh_class(etree.ElementBase):
22 - def maeh(self):
23 return 'maeh'
24 - class bluff_class(etree.ElementBase):
25 - def bluff(self):
26 return 'bluff'
27
28 - def setUp(self):
35
36 - def tearDown(self):
37 etree.set_default_parser() 38 del self.Namespace 39 super(ETreeNamespaceClassesTestCase, self).tearDown()
40
41 - def test_registry(self):
42 ns = self.Namespace('ns01') 43 ns['maeh'] = self.maeh_class 44 45 self.Namespace('ns01').clear() 46 47 self.Namespace('ns02').update({'maeh' : self.maeh_class}) 48 self.Namespace('ns03').update({'bluff' : self.bluff_class}.items()) 49 self.Namespace('ns02').clear() 50 self.Namespace('ns03').clear()
51
52 - def test_ns_classes(self):
53 bluff_dict = {'bluff' : self.bluff_class} 54 maeh_dict = {'maeh' : self.maeh_class} 55 56 self.Namespace('ns10').update(bluff_dict) 57 58 tree = self.parse(_bytes('<bluff xmlns="ns10"><ns11:maeh xmlns:ns11="ns11"/></bluff>')) 59 60 el = tree.getroot() 61 self.assertTrue(isinstance(el, etree.ElementBase)) 62 self.assertTrue(hasattr(el, 'bluff')) 63 self.assertFalse(hasattr(el[0], 'maeh')) 64 self.assertFalse(hasattr(el[0], 'bluff')) 65 self.assertEqual(el.bluff(), 'bluff') 66 del el 67 68 self.Namespace('ns11').update(maeh_dict) 69 el = tree.getroot() 70 self.assertTrue(hasattr(el, 'bluff')) 71 self.assertTrue(hasattr(el[0], 'maeh')) 72 self.assertEqual(el.bluff(), 'bluff') 73 self.assertEqual(el[0].maeh(), 'maeh') 74 del el 75 76 self.Namespace('ns10').clear() 77 78 tree = self.parse(_bytes('<bluff xmlns="ns10"><ns11:maeh xmlns:ns11="ns11"/></bluff>')) 79 el = tree.getroot() 80 self.assertFalse(hasattr(el, 'bluff')) 81 self.assertFalse(hasattr(el, 'maeh')) 82 self.assertFalse(hasattr(el[0], 'bluff')) 83 self.assertTrue(hasattr(el[0], 'maeh')) 84 85 self.Namespace('ns11').clear()
86
87 - def test_default_tagname(self):
88 bluff_dict = { 89 None : self.bluff_class, 90 'maeh' : self.maeh_class 91 } 92 93 ns = self.Namespace("uri:nsDefClass") 94 ns.update(bluff_dict) 95 96 tree = self.parse(_bytes(''' 97 <test xmlns="bla" xmlns:ns1="uri:nsDefClass" xmlns:ns2="uri:nsDefClass"> 98 <ns2:el1/><ns1:el2/><ns1:maeh/><ns2:maeh/><maeh/> 99 </test> 100 ''')) 101 102 el = tree.getroot() 103 self.assertFalse(isinstance(el, etree.ElementBase)) 104 for child in el[:-1]: 105 self.assertTrue(isinstance(child, etree.ElementBase), child.tag) 106 self.assertFalse(isinstance(el[-1], etree.ElementBase)) 107 108 self.assertTrue(hasattr(el[0], 'bluff')) 109 self.assertTrue(hasattr(el[1], 'bluff')) 110 self.assertTrue(hasattr(el[2], 'maeh')) 111 self.assertTrue(hasattr(el[3], 'maeh')) 112 self.assertFalse(hasattr(el[4], 'maeh')) 113 del el 114 115 ns.clear()
116
117 - def test_create_element(self):
118 bluff_dict = {'bluff' : self.bluff_class} 119 self.Namespace('ns20').update(bluff_dict) 120 121 maeh_dict = {'maeh' : self.maeh_class} 122 self.Namespace('ns21').update(maeh_dict) 123 124 el = etree.Element("{ns20}bluff") 125 self.assertTrue(hasattr(el, 'bluff')) 126 127 child = etree.SubElement(el, "{ns21}maeh") 128 self.assertTrue(hasattr(child, 'maeh')) 129 child = etree.SubElement(el, "{ns20}bluff") 130 self.assertTrue(hasattr(child, 'bluff')) 131 child = etree.SubElement(el, "{ns21}bluff") 132 self.assertFalse(hasattr(child, 'bluff')) 133 self.assertFalse(hasattr(child, 'maeh')) 134 135 self.assertTrue(hasattr(el[0], 'maeh')) 136 self.assertTrue(hasattr(el[1], 'bluff')) 137 self.assertFalse(hasattr(el[2], 'bluff')) 138 self.assertFalse(hasattr(el[2], 'maeh')) 139 140 self.assertEqual(el.bluff(), 'bluff') 141 self.assertEqual(el[0].maeh(), 'maeh') 142 self.assertEqual(el[1].bluff(), 'bluff') 143 144 self.Namespace('ns20').clear() 145 self.Namespace('ns21').clear()
146
148 bluff_dict = {None : self.bluff_class} 149 self.Namespace('ns30').update(bluff_dict) 150 151 maeh_dict = {'maeh' : self.maeh_class} 152 self.Namespace(None).update(maeh_dict) 153 154 el = etree.Element("{ns30}bluff") 155 etree.SubElement(el, "maeh") 156 self.assertTrue(hasattr(el, 'bluff')) 157 self.assertTrue(hasattr(el[0], 'maeh')) 158 self.assertEqual(el.bluff(), 'bluff') 159 self.assertEqual(el[0].maeh(), 'maeh') 160 161 self.Namespace(None).clear() 162 self.Namespace('ns30').clear()
163
164 - def test_element_creation(self):
165 default, bluff, maeh = ( 166 self.default_class, self.bluff_class, self.maeh_class) 167 168 class honk(etree.ElementBase): 169 TAG = 'HONK' 170 NAMESPACE = 'http://a.b/c'
171 172 el = default( 173 "test", 174 "text", 175 bluff(honk, "TaIL", maeh), 176 maeh("TeXT", bluff, honk(), "TAiL"), 177 "Tail") 178 179 self.assertEqual('default_class', el.tag) 180 self.assertEqual('testtext', el.text) 181 self.assertEqual(None, el.tail) 182 self.assertEqual(2, len(el)) 183 self.assertEqual(7, len(list(el.iter()))) 184 185 self.assertEqual('bluff_class', el[0].tag) 186 self.assertEqual('TaIL', el[0][0].tail) 187 self.assertEqual('TaIL', ''.join(el[0].itertext())) 188 self.assertEqual('{http://a.b/c}HONK', 189 el[0][0].tag) 190 self.assertEqual('maeh_class', 191 el[0][1].tag) 192 193 self.assertEqual('maeh_class', el[1].tag) 194 self.assertEqual('TeXT', el[1].text) 195 self.assertEqual('bluff_class', el[1][0].tag) 196 self.assertEqual('{http://a.b/c}HONK', el[1][1].tag) 197 self.assertEqual('TAiL', el[1][1].tail) 198 199 self.assertEqual('TeXTTAiL', 200 ''.join(el[1].itertext())) 201 self.assertEqual('Tail', el[1].tail) 202 self.assertEqual('TAiL', el[1][1].tail) 203 self.assertEqual('bluff_class', el[1][0].tag) 204 self.assertEqual('{http://a.b/c}HONK', el[1][1].tag)
205 206
207 -def test_suite():
208 suite = unittest.TestSuite() 209 suite.addTests([unittest.makeSuite(ETreeNamespaceClassesTestCase)]) 210 suite.addTests( 211 [make_doctest('../../../doc/element_classes.txt')]) 212 return suite
213 214 if __name__ == '__main__': 215 print('to test use test.py %s' % __file__) 216