def _test_xml_text_parents(self): print("_test_xml_text_parents start") parser = XmlParser(io.StringIO("<root>Hello, world!</root>")) parser.next_token() token = parser.next_token() self.assertEqual(len(token.get_parent_tags()), 1) self.assertEqual(token.get_parent_tags()[0], "root") print("_test_xml_text_parents end")
def _test_xml_pure_text(self): print("_test_xml_pure_text start") parser = XmlParser(io.StringIO("hello world")) had_error = False try: parser.next_token() except XmlParserInvalidSyntaxError: had_error = True self.assertTrue(had_error, msg="verify the parser has aborted " + 'parsing "hello world" as XML') print("_test_xml_pure_text end")
def _test_xml_questionmark_invalid_followup(self): print("_test_xml_questionmark_invalid_followup start") parser = XmlParser(io.StringIO('<?xml version="1.0"?test><root></root>')) had_error = False try: parser.next_token() except XmlParserInvalidSyntaxError: had_error = True self.assertTrue( had_error, msg="verify the parser has aborted " + "after encountering invalid followup data after closing '?'", ) print("_test_xml_questionmark_invalid_followup end")
def _test_xml_attributes_unfinished(self): print("_test_xml_attributes_unfinished start") parser = XmlParser(io.StringIO("<root><child myattr=/></root>")) self.assertTrue(parser.next_token().get_tag() == "root") had_error = False try: parser.next_token() except XmlParserInvalidSyntaxError: had_error = True self.assertTrue( had_error, msg="verify the parser has aborted " + "due to unfinished attribute (= character but no value)" ) print("_test_xml_attributes_unfinished end")
def _test_xml_selfclosing_invalid_followup(self): print("_test_xml_selfclosing_invalid_followup start") parser = XmlParser(io.StringIO("<root><child/test></root>")) parser.next_token() had_error = False try: parser.next_token() except XmlParserInvalidSyntaxError: had_error = True self.assertTrue( had_error, msg="verify the parser has aborted " + "after encountering invalid followup data after closing '/'", ) print("_test_xml_selfclosing_invalid_followup end")
def _test_xml_unfinished(self): print("_test_xml_unfinished start") parser = XmlParser(io.StringIO("<root><child/>")) self.assertTrue(parser.next_token().get_tag() == "root") self.assertTrue(parser.next_token().get_tag() == "child") self.assertTrue(parser.next_token().get_tag() == "child") had_error = False try: token = parser.next_token() print("TOKEN: " + str(token)) except XmlParserInvalidSyntaxError: had_error = True self.assertTrue(had_error, msg="verify the parser has aborted " + "due to unfinished XML") print("_test_xml_unfinished end")
def _test_xml_attributes_malformed(self): print("_test_xml_attributes_malformed start") parser = XmlParser(io.StringIO('<root><child ""/></root>')) had_error = False root_begin = parser.next_token() self.assertEqual(root_begin.get_type(), "begin_tag") self.assertEqual(root_begin.get_tag(), "root") try: token = parser.next_token() print("token: " + str(token)) except XmlParserInvalidSyntaxError: had_error = True self.assertTrue(had_error, msg="verify the parser has aborted " + "due to malformed attribute") print("_test_xml_attributes_malformed end")
def _test_xml_parents(self): print("_test_xml_parents start") parser = XmlParser(io.StringIO("<root><child1><child2/></child1></root>")) root_begin = parser.next_token() assert len(root_begin.get_parent_tags()) == 0 child1_begin = parser.next_token() assert len(child1_begin.get_parent_tags()) == 1 assert child1_begin.get_parent_tags()[0] == "root" child2_begin = parser.next_token() assert len(child2_begin.get_parent_tags()) == 2 assert child2_begin.get_parent_tags()[0] == "root" assert child2_begin.get_parent_tags()[1] == "child1" child2_end = parser.next_token() assert child2_end.get_tag() == "child2" assert len(child2_begin.get_parent_tags()) == 2 assert child2_end.get_parent_tags()[0] == "root" assert child2_end.get_parent_tags()[1] == "child1" child1_end = parser.next_token() assert child1_end.get_tag() == "child1" assert len(child1_end.get_parent_tags()) == 1 assert child1_end.get_parent_tags()[0] == "root" root_end = parser.next_token() assert len(root_end.get_parent_tags()) == 0 print("_test_xml_parents end")