| #!/usr/bin/env python3 | |
| # | |
| # this tests the entities substitutions with the XmlTextReader interface | |
| # | |
| import sys | |
| import setup_test | |
| import libxml2 | |
| # Memory debug specific | |
| libxml2.debugMemory(1) | |
| result = "" | |
| def processNode(reader): | |
| global result | |
| result = result + "%d %d %s %d\n" % (reader.Depth(), reader.NodeType(), | |
| reader.Name(), reader.IsEmptyElement()) | |
| # | |
| # Parse a document testing the readerForxxx API | |
| # | |
| docstr="""<foo> | |
| <label>some text</label> | |
| <item>100</item> | |
| </foo>""" | |
| expect="""0 1 foo 0 | |
| 1 14 #text 0 | |
| 1 1 label 0 | |
| 2 3 #text 0 | |
| 1 15 label 0 | |
| 1 14 #text 0 | |
| 1 1 item 0 | |
| 2 3 #text 0 | |
| 1 15 item 0 | |
| 1 14 #text 0 | |
| 0 15 foo 0 | |
| """ | |
| result = "" | |
| doc = libxml2.parseDoc(docstr) | |
| reader = doc.readerWalker(); | |
| ret = reader.Read() | |
| while ret == 1: | |
| processNode(reader) | |
| ret = reader.Read() | |
| if ret != 0: | |
| print("Error parsing the document test1") | |
| sys.exit(1) | |
| if result != expect: | |
| print("Unexpected result for test1") | |
| print(result) | |
| sys.exit(1) | |
| doc.freeDoc() | |
| # | |
| # Reuse the reader for another document testing the ReaderNewWalker API | |
| # | |
| docstr="""<foo> | |
| <label>some text</label> | |
| <item>1000</item> | |
| </foo>""" | |
| expect="""0 1 foo 0 | |
| 1 14 #text 0 | |
| 1 1 label 0 | |
| 2 3 #text 0 | |
| 1 15 label 0 | |
| 1 14 #text 0 | |
| 1 1 item 0 | |
| 2 3 #text 0 | |
| 1 15 item 0 | |
| 1 14 #text 0 | |
| 0 15 foo 0 | |
| """ | |
| result = "" | |
| doc = libxml2.parseDoc(docstr) | |
| reader.NewWalker(doc) | |
| ret = reader.Read() | |
| while ret == 1: | |
| processNode(reader) | |
| ret = reader.Read() | |
| if ret != 0: | |
| print("Error parsing the document test2") | |
| sys.exit(1) | |
| if result != expect: | |
| print("Unexpected result for test2") | |
| print(result) | |
| sys.exit(1) | |
| doc.freeDoc() | |
| # | |
| # Reuse the reader for another document testing the ReaderNewxxx API | |
| # | |
| docstr="""<foo> | |
| <label>some text</label> | |
| <item>1000</item> | |
| </foo>""" | |
| expect="""0 1 foo 0 | |
| 1 14 #text 0 | |
| 1 1 label 0 | |
| 2 3 #text 0 | |
| 1 15 label 0 | |
| 1 14 #text 0 | |
| 1 1 item 0 | |
| 2 3 #text 0 | |
| 1 15 item 0 | |
| 1 14 #text 0 | |
| 0 15 foo 0 | |
| """ | |
| result = "" | |
| reader.NewDoc(docstr, "test3", None, 0) | |
| ret = reader.Read() | |
| while ret == 1: | |
| processNode(reader) | |
| ret = reader.Read() | |
| if ret != 0: | |
| print("Error parsing the document test3") | |
| sys.exit(1) | |
| if result != expect: | |
| print("Unexpected result for test3") | |
| print(result) | |
| sys.exit(1) | |
| # | |
| # cleanup | |
| # | |
| del reader | |
| # Memory debug specific | |
| libxml2.cleanupParser() | |
| if libxml2.debugMemory(1) == 0: | |
| print("OK") | |
| else: | |
| print("Memory leak %d bytes" % (libxml2.debugMemory(1))) | |