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")