def test_resolve_lang(self): """Test the use of resolve_lang""" parent = structures.Element(None) self.assertTrue(parent.resolve_lang() is None, "No default language") parent.set_lang('en-GB') self.assertTrue(parent.get_lang() == 'en-GB', "Lang Get/Set") child = structures.Element(parent) self.assertTrue(child.get_lang() is None, "No xml:lang by default") self.assertTrue(child.resolve_lang() == 'en-GB', "Lang inheritence") # repeat tests with a parent document d = structures.Document() parent = structures.Element(d) self.assertTrue(parent.resolve_lang() is None, "No default language")
def test_copy(self): e1 = structures.Element(None) e2 = e1.deepcopy() self.assertTrue(isinstance(e2, structures.Element), "deepcopy didn't make Element") self.assertTrue(e1 == e2) self.assertTrue(e1 is not e2)
def test_data(self): e = structures.Element(None) self.assertTrue(e.is_mixed(), "Mixed default") e.add_data('Hello') self.assertTrue(e.get_value() == 'Hello', "Data value") children = list(e.get_children()) self.assertTrue(len(children) == 1, "Data child not set") self.assertTrue(children[0] == "Hello", "Data child not set correctly")
def test_child_elements(self): """Test child element behaviour""" e = structures.Element(None) e.set_xmlname('test') e.add_child(structures.Element, 'test1') children = list(e.get_children()) self.assertTrue( len(children) == 1, "add_child failed to add child element")
def test_id(self): """Test the built-in handling of a document's ID space.""" doc = structures.Document() e1 = structures.Element(doc) e2 = structures.Element(doc) e1.id = e2.id = 'test' doc.register_element(e1) try: doc.register_element(e2) self.fail("Failed to spot ID clash") except structures.XMLIDClashError: pass e2.id = 'test2' doc.register_element(e2) self.assertTrue( doc.get_element_by_id('test') is e1, "Element look-up failed") new_id = doc.get_unique_id('test') self.assertFalse(new_id == 'test' or new_id == 'test2')
def test_constructor(self): e = structures.Element(None) self.assertTrue(e.xmlname is None, 'element name on construction') self.assertTrue(e.get_document() is None, 'document set on construction') attrs = e.get_attributes() self.assertTrue( len(list(dict_keys(attrs))) == 0, "Attributes present on construction") children = e.get_children() try: next(children) self.fail("Children present on construction") except StopIteration: pass
def test_resolve_base(self): """Test the use of resolve_uri and resolve_base""" os.chdir(TEST_DATA_DIR) parent = structures.Element(None) self.assertTrue(parent.resolve_base() is None, "No default base") child = structures.Element(parent) self.assertTrue(child.resolve_base() is None, "No xml:base by default") parent.set_base('file:///index.xml') self.assertTrue(child.resolve_base() == 'file:///index.xml', "No xml:base inheritance") # Tests with a document follow.... furl = str(uri.URI.from_path(os.path.abspath('base.xml'))) href = uri.URI.from_path(os.path.abspath('link.xml')) href_path = href.abs_path href = str(href) alt_ref = 'file:///hello/link.xml' d = structures.Document(base_uri='base.xml') self.assertTrue(d.get_base() == furl, "Base not resolved relative to w.d. by constructor") d.read() tag = d.root self.assertTrue(tag.resolve_base() == furl, "Root element resolves from document") self.assertTrue( str(tag.resolve_uri("link.xml")) == href, "Root element HREF") self.assertTrue( str(tag.relative_uri(href)) == 'link.xml', "Root element relative") # self.assertTrue( # tag.relative_uri(alt_ref)=='/hello/link.xml', # 'Root element full path relative: %s'%tag.relative_uri(alt_ref)) child_tag = tag._children[0] self.assertTrue( child_tag.resolve_base() == "file:///hello/base.xml", "xml:base overrides in child_tag (%s)" % child_tag.resolve_base()) self.assertTrue( str(child_tag.resolve_uri("link.xml")) == alt_ref, "child element HREF") self.assertTrue( str(child_tag.relative_uri(href)) == '..' + href_path, "child element relative resulting in full path: %s" % child_tag.relative_uri(href)) self.assertTrue( str(child_tag.relative_uri(alt_ref)) == 'link.xml', 'child element relative') # We require this next test to ensure that an href to the # current document comes up blank. Although this was a major # source of bugs in browsers (<img src=''> causing infinite # loading loops) these are largely fixed now and obfuscating by # using a non-empty relative link to ourselves is likely to # start the whole thing going again. self.assertTrue( str(child_tag.relative_uri(child_tag.resolve_base())) == '', 'child element relative avoiding empty URI(%s)' % child_tag.relative_uri(child_tag.resolve_base())) grandchild_tag = child_tag._children[0] self.assertTrue( grandchild_tag.resolve_base() == "file:///hello/base.xml", "xml:base inherited") self.assertTrue( str(grandchild_tag.resolve_uri("link.xml")) == alt_ref, "grandchild element HREF inherited") self.assertTrue( str(grandchild_tag.relative_uri(href)) == '..' + href_path, "grandchild element relative inherited: %s" % grandchild_tag.relative_uri(href)) self.assertTrue( str(grandchild_tag.relative_uri(alt_ref)) == 'link.xml', 'grandchild element relative inherited')
def test_attributes(self): e = structures.Element(None) e.set_xmlname('test') e.set_attribute('atest', 'value') attrs = e.get_attributes() self.assertTrue(len(list(dict_keys(attrs))) == 1, "Attribute not set") self.assertTrue(attrs['atest'] == 'value', "Attribute not set correctly") e = ReflectiveElement(None) e.set_attribute('atest', 'value') # Deprecated: self.assertTrue(e.atest=='value',"Attribute relfection") attrs = e.get_attributes() self.assertTrue(attrs['atest'] == 'value', "Attribute not set correctly") e.set_attribute('btest', 'Yes') self.assertTrue(e.bTest == 'Yes', "Attribute relfection with simple assignment") attrs = e.get_attributes() self.assertTrue(attrs['btest'] == 'Yes', "Attribute not set correctly") e.set_attribute('ctest', 'Yes') self.assertTrue(e.cTest is True, "Attribute relfection with decode/encode") attrs = e.get_attributes() self.assertTrue(attrs['ctest'] == 'Yes', "Attribute not set correctly") self.assertFalse('dtest' in attrs, "Optional ordered list attribute") self.assertTrue(attrs['dtestR'] == '', "Required ordered list attribute") e.set_attribute('dtest', 'Yes No') self.assertTrue(e.dTest == [True, False], "Attribute relfection with list; %s" % repr(e.dTest)) attrs = e.get_attributes() self.assertTrue(attrs['dtest'] == 'Yes No', "Attribute not set correctly") self.assertFalse('etest' in attrs, "Optional unordered list attribute") self.assertTrue(attrs['etestR'] == '', "Required unordered list attribute") e.set_attribute('etest', 'Yes No Yes') self.assertTrue(e.eTest == { True: 2, False: 1 }, "Attribute relfection with list: %s" % repr(e.eTest)) attrs = e.get_attributes() self.assertTrue( attrs['etest'] == 'No Yes Yes', "Attribute not set correctly: %s" % repr(attrs['etest'])) try: if e.ztest: pass self.fail("AttributeError required for undefined names") except AttributeError: pass e.ztest = 1 if e.ztest: pass del e.ztest try: if e.ztest: pass self.fail("AttributeError required for undefined names after del") except AttributeError: pass try: self.assertTrue(e.fTest is None, "Missing attribute auto value not None") except AttributeError: self.fail("Missing attribute auto value: AttributeError") e.fTest = 1 del e.fTest try: self.assertTrue( e.fTest is None, "Missing attribute auto value not None (after del)") except AttributeError: self.fail( "Missing attribute auto value: AttributeError (after del)")