|
Packit Service |
b74dd5 |
# -*- coding: utf-8 -*-
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
"""
|
|
Packit Service |
b74dd5 |
Test cases related to namespace implementation classes and the
|
|
Packit Service |
b74dd5 |
namespace registry mechanism
|
|
Packit Service |
b74dd5 |
"""
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
import unittest, sys, os.path
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
this_dir = os.path.dirname(__file__)
|
|
Packit Service |
b74dd5 |
if this_dir not in sys.path:
|
|
Packit Service |
b74dd5 |
sys.path.insert(0, this_dir) # needed for Py3
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
from common_imports import etree, HelperTestCase, _bytes
|
|
Packit Service |
b74dd5 |
from common_imports import doctest, make_doctest
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
class ETreeNamespaceClassesTestCase(HelperTestCase):
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
class default_class(etree.ElementBase):
|
|
Packit Service |
b74dd5 |
pass
|
|
Packit Service |
b74dd5 |
class maeh_class(etree.ElementBase):
|
|
Packit Service |
b74dd5 |
def maeh(self):
|
|
Packit Service |
b74dd5 |
return 'maeh'
|
|
Packit Service |
b74dd5 |
class bluff_class(etree.ElementBase):
|
|
Packit Service |
b74dd5 |
def bluff(self):
|
|
Packit Service |
b74dd5 |
return 'bluff'
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
def setUp(self):
|
|
Packit Service |
b74dd5 |
super(ETreeNamespaceClassesTestCase, self).setUp()
|
|
Packit Service |
b74dd5 |
lookup = etree.ElementNamespaceClassLookup()
|
|
Packit Service |
b74dd5 |
self.Namespace = lookup.get_namespace
|
|
Packit Service |
b74dd5 |
parser = etree.XMLParser()
|
|
Packit Service |
b74dd5 |
parser.set_element_class_lookup(lookup)
|
|
Packit Service |
b74dd5 |
etree.set_default_parser(parser)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
def tearDown(self):
|
|
Packit Service |
b74dd5 |
etree.set_default_parser()
|
|
Packit Service |
b74dd5 |
del self.Namespace
|
|
Packit Service |
b74dd5 |
super(ETreeNamespaceClassesTestCase, self).tearDown()
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
def test_registry(self):
|
|
Packit Service |
b74dd5 |
ns = self.Namespace('ns01')
|
|
Packit Service |
b74dd5 |
ns['maeh'] = self.maeh_class
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.Namespace('ns01').clear()
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.Namespace('ns02').update({'maeh' : self.maeh_class})
|
|
Packit Service |
b74dd5 |
self.Namespace('ns03').update({'bluff' : self.bluff_class}.items())
|
|
Packit Service |
b74dd5 |
self.Namespace('ns02').clear()
|
|
Packit Service |
b74dd5 |
self.Namespace('ns03').clear()
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
def test_ns_classes(self):
|
|
Packit Service |
b74dd5 |
bluff_dict = {'bluff' : self.bluff_class}
|
|
Packit Service |
b74dd5 |
maeh_dict = {'maeh' : self.maeh_class}
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.Namespace('ns10').update(bluff_dict)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
tree = self.parse(_bytes('<bluff xmlns="ns10"><ns11:maeh xmlns:ns11="ns11"/></bluff>'))
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
el = tree.getroot()
|
|
Packit Service |
b74dd5 |
self.assertTrue(isinstance(el, etree.ElementBase))
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el, 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertFalse(hasattr(el[0], 'maeh'))
|
|
Packit Service |
b74dd5 |
self.assertFalse(hasattr(el[0], 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertEqual(el.bluff(), 'bluff')
|
|
Packit Service |
b74dd5 |
del el
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.Namespace('ns11').update(maeh_dict)
|
|
Packit Service |
b74dd5 |
el = tree.getroot()
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el, 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el[0], 'maeh'))
|
|
Packit Service |
b74dd5 |
self.assertEqual(el.bluff(), 'bluff')
|
|
Packit Service |
b74dd5 |
self.assertEqual(el[0].maeh(), 'maeh')
|
|
Packit Service |
b74dd5 |
del el
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.Namespace('ns10').clear()
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
tree = self.parse(_bytes('<bluff xmlns="ns10"><ns11:maeh xmlns:ns11="ns11"/></bluff>'))
|
|
Packit Service |
b74dd5 |
el = tree.getroot()
|
|
Packit Service |
b74dd5 |
self.assertFalse(hasattr(el, 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertFalse(hasattr(el, 'maeh'))
|
|
Packit Service |
b74dd5 |
self.assertFalse(hasattr(el[0], 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el[0], 'maeh'))
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.Namespace('ns11').clear()
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
def test_default_tagname(self):
|
|
Packit Service |
b74dd5 |
bluff_dict = {
|
|
Packit Service |
b74dd5 |
None : self.bluff_class,
|
|
Packit Service |
b74dd5 |
'maeh' : self.maeh_class
|
|
Packit Service |
b74dd5 |
}
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
ns = self.Namespace("uri:nsDefClass")
|
|
Packit Service |
b74dd5 |
ns.update(bluff_dict)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
tree = self.parse(_bytes('''
|
|
Packit Service |
b74dd5 |
<test xmlns="bla" xmlns:ns1="uri:nsDefClass" xmlns:ns2="uri:nsDefClass">
|
|
Packit Service |
b74dd5 |
<ns2:el1/><ns1:el2/><ns1:maeh/><ns2:maeh/><maeh/>
|
|
Packit Service |
b74dd5 |
</test>
|
|
Packit Service |
b74dd5 |
'''))
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
el = tree.getroot()
|
|
Packit Service |
b74dd5 |
self.assertFalse(isinstance(el, etree.ElementBase))
|
|
Packit Service |
b74dd5 |
for child in el[:-1]:
|
|
Packit Service |
b74dd5 |
self.assertTrue(isinstance(child, etree.ElementBase), child.tag)
|
|
Packit Service |
b74dd5 |
self.assertFalse(isinstance(el[-1], etree.ElementBase))
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el[0], 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el[1], 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el[2], 'maeh'))
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el[3], 'maeh'))
|
|
Packit Service |
b74dd5 |
self.assertFalse(hasattr(el[4], 'maeh'))
|
|
Packit Service |
b74dd5 |
del el
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
ns.clear()
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
def test_create_element(self):
|
|
Packit Service |
b74dd5 |
bluff_dict = {'bluff' : self.bluff_class}
|
|
Packit Service |
b74dd5 |
self.Namespace('ns20').update(bluff_dict)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
maeh_dict = {'maeh' : self.maeh_class}
|
|
Packit Service |
b74dd5 |
self.Namespace('ns21').update(maeh_dict)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
el = etree.Element("{ns20}bluff")
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el, 'bluff'))
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
child = etree.SubElement(el, "{ns21}maeh")
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(child, 'maeh'))
|
|
Packit Service |
b74dd5 |
child = etree.SubElement(el, "{ns20}bluff")
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(child, 'bluff'))
|
|
Packit Service |
b74dd5 |
child = etree.SubElement(el, "{ns21}bluff")
|
|
Packit Service |
b74dd5 |
self.assertFalse(hasattr(child, 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertFalse(hasattr(child, 'maeh'))
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el[0], 'maeh'))
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el[1], 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertFalse(hasattr(el[2], 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertFalse(hasattr(el[2], 'maeh'))
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.assertEqual(el.bluff(), 'bluff')
|
|
Packit Service |
b74dd5 |
self.assertEqual(el[0].maeh(), 'maeh')
|
|
Packit Service |
b74dd5 |
self.assertEqual(el[1].bluff(), 'bluff')
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.Namespace('ns20').clear()
|
|
Packit Service |
b74dd5 |
self.Namespace('ns21').clear()
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
def test_create_element_default(self):
|
|
Packit Service |
b74dd5 |
bluff_dict = {None : self.bluff_class}
|
|
Packit Service |
b74dd5 |
self.Namespace('ns30').update(bluff_dict)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
maeh_dict = {'maeh' : self.maeh_class}
|
|
Packit Service |
b74dd5 |
self.Namespace(None).update(maeh_dict)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
el = etree.Element("{ns30}bluff")
|
|
Packit Service |
b74dd5 |
etree.SubElement(el, "maeh")
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el, 'bluff'))
|
|
Packit Service |
b74dd5 |
self.assertTrue(hasattr(el[0], 'maeh'))
|
|
Packit Service |
b74dd5 |
self.assertEqual(el.bluff(), 'bluff')
|
|
Packit Service |
b74dd5 |
self.assertEqual(el[0].maeh(), 'maeh')
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.Namespace(None).clear()
|
|
Packit Service |
b74dd5 |
self.Namespace('ns30').clear()
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
def test_element_creation(self):
|
|
Packit Service |
b74dd5 |
default, bluff, maeh = (
|
|
Packit Service |
b74dd5 |
self.default_class, self.bluff_class, self.maeh_class)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
class honk(etree.ElementBase):
|
|
Packit Service |
b74dd5 |
TAG = 'HONK'
|
|
Packit Service |
b74dd5 |
NAMESPACE = 'http://a.b/c'
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
el = default(
|
|
Packit Service |
b74dd5 |
"test",
|
|
Packit Service |
b74dd5 |
"text",
|
|
Packit Service |
b74dd5 |
bluff(honk, "TaIL", maeh),
|
|
Packit Service |
b74dd5 |
maeh("TeXT", bluff, honk(), "TAiL"),
|
|
Packit Service |
b74dd5 |
"Tail")
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.assertEqual('default_class', el.tag)
|
|
Packit Service |
b74dd5 |
self.assertEqual('testtext', el.text)
|
|
Packit Service |
b74dd5 |
self.assertEqual(None, el.tail)
|
|
Packit Service |
b74dd5 |
self.assertEqual(2, len(el))
|
|
Packit Service |
b74dd5 |
self.assertEqual(7, len(list(el.iter())))
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.assertEqual('bluff_class', el[0].tag)
|
|
Packit Service |
b74dd5 |
self.assertEqual('TaIL', el[0][0].tail)
|
|
Packit Service |
b74dd5 |
self.assertEqual('TaIL', ''.join(el[0].itertext()))
|
|
Packit Service |
b74dd5 |
self.assertEqual('{http://a.b/c}HONK',
|
|
Packit Service |
b74dd5 |
el[0][0].tag)
|
|
Packit Service |
b74dd5 |
self.assertEqual('maeh_class',
|
|
Packit Service |
b74dd5 |
el[0][1].tag)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.assertEqual('maeh_class', el[1].tag)
|
|
Packit Service |
b74dd5 |
self.assertEqual('TeXT', el[1].text)
|
|
Packit Service |
b74dd5 |
self.assertEqual('bluff_class', el[1][0].tag)
|
|
Packit Service |
b74dd5 |
self.assertEqual('{http://a.b/c}HONK', el[1][1].tag)
|
|
Packit Service |
b74dd5 |
self.assertEqual('TAiL', el[1][1].tail)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
self.assertEqual('TeXTTAiL',
|
|
Packit Service |
b74dd5 |
''.join(el[1].itertext()))
|
|
Packit Service |
b74dd5 |
self.assertEqual('Tail', el[1].tail)
|
|
Packit Service |
b74dd5 |
self.assertEqual('TAiL', el[1][1].tail)
|
|
Packit Service |
b74dd5 |
self.assertEqual('bluff_class', el[1][0].tag)
|
|
Packit Service |
b74dd5 |
self.assertEqual('{http://a.b/c}HONK', el[1][1].tag)
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
def test_suite():
|
|
Packit Service |
b74dd5 |
suite = unittest.TestSuite()
|
|
Packit Service |
b74dd5 |
suite.addTests([unittest.makeSuite(ETreeNamespaceClassesTestCase)])
|
|
Packit Service |
b74dd5 |
suite.addTests(
|
|
Packit Service |
b74dd5 |
[make_doctest('../../../doc/element_classes.txt')])
|
|
Packit Service |
b74dd5 |
return suite
|
|
Packit Service |
b74dd5 |
|
|
Packit Service |
b74dd5 |
if __name__ == '__main__':
|
|
Packit Service |
b74dd5 |
print('to test use test.py %s' % __file__)
|