1
2
3 """
4 Test cases related to namespace implementation classes and the
5 namespace registry mechanism
6 """
7
8 import unittest
9
10 from common_imports import etree, HelperTestCase, doctest
11
13
22
28
31
42
44 bluff_dict = {u'bluff' : self.bluff_class}
45 maeh_dict = {u'maeh' : self.maeh_class}
46
47 etree.Namespace(u'ns10').update(bluff_dict)
48
49 tree = self.parse(u'<bluff xmlns="ns10"><ns11:maeh xmlns:ns11="ns11"/></bluff>')
50
51 el = tree.getroot()
52 self.assert_(isinstance(el, etree.ElementBase))
53 self.assert_(hasattr(el, 'bluff'))
54 self.assertFalse(hasattr(el[0], 'maeh'))
55 self.assertFalse(hasattr(el[0], 'bluff'))
56 self.assertEquals(el.bluff(), u'bluff')
57 del el
58
59 etree.Namespace(u'ns11').update(maeh_dict)
60 el = tree.getroot()
61 self.assert_(hasattr(el, 'bluff'))
62 self.assert_(hasattr(el[0], 'maeh'))
63 self.assertEquals(el.bluff(), u'bluff')
64 self.assertEquals(el[0].maeh(), u'maeh')
65 del el
66
67 etree.Namespace(u'ns10').clear()
68
69 tree = self.parse(u'<bluff xmlns="ns10"><ns11:maeh xmlns:ns11="ns11"/></bluff>')
70 el = tree.getroot()
71 self.assertFalse(hasattr(el, 'bluff'))
72 self.assertFalse(hasattr(el, 'maeh'))
73 self.assertFalse(hasattr(el[0], 'bluff'))
74 self.assert_(hasattr(el[0], 'maeh'))
75
76 etree.Namespace(u'ns11').clear()
77
79 bluff_dict = {
80 None : self.bluff_class,
81 'maeh' : self.maeh_class
82 }
83
84 ns = etree.Namespace("uri:nsDefClass")
85 ns.update(bluff_dict)
86
87 tree = self.parse(u'''
88 <test xmlns="bla" xmlns:ns1="uri:nsDefClass" xmlns:ns2="uri:nsDefClass">
89 <ns2:el1/><ns1:el2/><ns1:maeh/><ns2:maeh/><maeh/>
90 </test>
91 ''')
92
93 el = tree.getroot()
94 self.assertFalse(isinstance(el, etree.ElementBase))
95 for child in el[:-1]:
96 self.assert_(isinstance(child, etree.ElementBase), child.tag)
97 self.assertFalse(isinstance(el[-1], etree.ElementBase))
98
99 self.assert_(hasattr(el[0], 'bluff'))
100 self.assert_(hasattr(el[1], 'bluff'))
101 self.assert_(hasattr(el[2], 'maeh'))
102 self.assert_(hasattr(el[3], 'maeh'))
103 self.assertFalse(hasattr(el[4], 'maeh'))
104 del el
105
106 ns.clear()
107
109 bluff_dict = {u'bluff' : self.bluff_class}
110 etree.Namespace(u'ns20').update(bluff_dict)
111
112 maeh_dict = {u'maeh' : self.maeh_class}
113 etree.Namespace(u'ns21').update(maeh_dict)
114
115 el = etree.Element("{ns20}bluff")
116 self.assert_(hasattr(el, 'bluff'))
117
118 child = etree.SubElement(el, "{ns21}maeh")
119 self.assert_(hasattr(child, 'maeh'))
120 child = etree.SubElement(el, "{ns20}bluff")
121 self.assert_(hasattr(child, 'bluff'))
122 child = etree.SubElement(el, "{ns21}bluff")
123 self.assertFalse(hasattr(child, 'bluff'))
124 self.assertFalse(hasattr(child, 'maeh'))
125
126 self.assert_(hasattr(el[0], 'maeh'))
127 self.assert_(hasattr(el[1], 'bluff'))
128 self.assertFalse(hasattr(el[2], 'bluff'))
129 self.assertFalse(hasattr(el[2], 'maeh'))
130
131 self.assertEquals(el.bluff(), u'bluff')
132 self.assertEquals(el[0].maeh(), u'maeh')
133 self.assertEquals(el[1].bluff(), u'bluff')
134
135 etree.Namespace(u'ns20').clear()
136 etree.Namespace(u'ns21').clear()
137
154
156 suite = unittest.TestSuite()
157 suite.addTests([unittest.makeSuite(ETreeNamespaceClassesTestCase)])
158 optionflags = doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS
159 suite.addTests(
160 [doctest.DocFileSuite('../../../doc/element_classes.txt',
161 optionflags=optionflags)],
162 )
163 return suite
164
165 if __name__ == '__main__':
166 unittest.main()
167