Annotation of embedaddon/libxml2/python/tests/reader.py, revision 1.1

1.1     ! misho       1: #!/usr/bin/python -u
        !             2: # -*- coding: ISO-8859-1 -*-
        !             3: #
        !             4: # this tests the basic APIs of the XmlTextReader interface
        !             5: #
        !             6: import libxml2
        !             7: import StringIO
        !             8: import sys
        !             9: 
        !            10: # Memory debug specific
        !            11: libxml2.debugMemory(1)
        !            12: 
        !            13: f = StringIO.StringIO("""<a><b b1="b1"/><c>content of c</c></a>""")
        !            14: input = libxml2.inputBuffer(f)
        !            15: reader = input.newTextReader("test1")
        !            16: ret = reader.Read()
        !            17: if ret != 1:
        !            18:     print "test1: Error reading to first element"
        !            19:     sys.exit(1)
        !            20: if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
        !            21:    reader.NodeType() != 1 or reader.HasAttributes() != 0:
        !            22:     print "test1: Error reading the first element"
        !            23:     sys.exit(1)
        !            24: ret = reader.Read()
        !            25: if ret != 1:
        !            26:     print "test1: Error reading to second element"
        !            27:     sys.exit(1)
        !            28: if reader.Name() != "b" or reader.IsEmptyElement() != 1 or \
        !            29:    reader.NodeType() != 1 or reader.HasAttributes() != 1:
        !            30:     print "test1: Error reading the second element"
        !            31:     sys.exit(1)
        !            32: ret = reader.Read()
        !            33: if ret != 1:
        !            34:     print "test1: Error reading to third element"
        !            35:     sys.exit(1)
        !            36: if reader.Name() != "c" or reader.IsEmptyElement() != 0 or \
        !            37:    reader.NodeType() != 1 or reader.HasAttributes() != 0:
        !            38:     print "test1: Error reading the third element"
        !            39:     sys.exit(1)
        !            40: ret = reader.Read()
        !            41: if ret != 1:
        !            42:     print "test1: Error reading to text node"
        !            43:     sys.exit(1)
        !            44: if reader.Name() != "#text" or reader.IsEmptyElement() != 0 or \
        !            45:    reader.NodeType() != 3 or reader.HasAttributes() != 0 or \
        !            46:    reader.Value() != "content of c":
        !            47:     print "test1: Error reading the text node"
        !            48:     sys.exit(1)
        !            49: ret = reader.Read()
        !            50: if ret != 1:
        !            51:     print "test1: Error reading to end of third element"
        !            52:     sys.exit(1)
        !            53: if reader.Name() != "c" or reader.IsEmptyElement() != 0 or \
        !            54:    reader.NodeType() != 15 or reader.HasAttributes() != 0:
        !            55:     print "test1: Error reading the end of third element"
        !            56:     sys.exit(1)
        !            57: ret = reader.Read()
        !            58: if ret != 1:
        !            59:     print "test1: Error reading to end of first element"
        !            60:     sys.exit(1)
        !            61: if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
        !            62:    reader.NodeType() != 15 or reader.HasAttributes() != 0:
        !            63:     print "test1: Error reading the end of first element"
        !            64:     sys.exit(1)
        !            65: ret = reader.Read()
        !            66: if ret != 0:
        !            67:     print "test1: Error reading to end of document"
        !            68:     sys.exit(1)
        !            69: 
        !            70: #
        !            71: # example from the XmlTextReader docs
        !            72: #
        !            73: f = StringIO.StringIO("""<test xmlns:dt="urn:datatypes" dt:type="int"/>""")
        !            74: input = libxml2.inputBuffer(f)
        !            75: reader = input.newTextReader("test2")
        !            76: 
        !            77: ret = reader.Read()
        !            78: if ret != 1:
        !            79:     print "Error reading test element"
        !            80:     sys.exit(1)
        !            81: if reader.GetAttributeNo(0) != "urn:datatypes" or \
        !            82:    reader.GetAttributeNo(1) != "int" or \
        !            83:    reader.GetAttributeNs("type", "urn:datatypes") != "int" or \
        !            84:    reader.GetAttribute("dt:type") != "int":
        !            85:     print "error reading test attributes"
        !            86:     sys.exit(1)
        !            87: 
        !            88: #
        !            89: # example from the XmlTextReader docs
        !            90: #
        !            91: f = StringIO.StringIO("""<root xmlns:a="urn:456">
        !            92: <item>
        !            93: <ref href="a:b"/>
        !            94: </item>
        !            95: </root>""")
        !            96: input = libxml2.inputBuffer(f)
        !            97: reader = input.newTextReader("test3")
        !            98: 
        !            99: ret = reader.Read()
        !           100: while ret == 1:
        !           101:     if reader.Name() == "ref":
        !           102:         if reader.LookupNamespace("a") != "urn:456":
        !           103:             print "error resolving namespace prefix"
        !           104:             sys.exit(1)
        !           105:         break
        !           106:     ret = reader.Read()
        !           107: if ret != 1:
        !           108:     print "Error finding the ref element"
        !           109:     sys.exit(1)
        !           110: 
        !           111: #
        !           112: # Home made example for the various attribute access functions
        !           113: #
        !           114: f = StringIO.StringIO("""<testattr xmlns="urn:1" xmlns:a="urn:2" b="b" a:b="a:b"/>""")
        !           115: input = libxml2.inputBuffer(f)
        !           116: reader = input.newTextReader("test4")
        !           117: ret = reader.Read()
        !           118: if ret != 1:
        !           119:     print "Error reading the testattr element"
        !           120:     sys.exit(1)
        !           121: #
        !           122: # Attribute exploration by index
        !           123: #
        !           124: if reader.MoveToAttributeNo(0) != 1:
        !           125:     print "Failed moveToAttribute(0)"
        !           126:     sys.exit(1)
        !           127: if reader.Value() != "urn:1":
        !           128:     print "Failed to read attribute(0)"
        !           129:     sys.exit(1)
        !           130: if reader.Name() != "xmlns":
        !           131:     print "Failed to read attribute(0) name"
        !           132:     sys.exit(1)
        !           133: if reader.MoveToAttributeNo(1) != 1:
        !           134:     print "Failed moveToAttribute(1)"
        !           135:     sys.exit(1)
        !           136: if reader.Value() != "urn:2":
        !           137:     print "Failed to read attribute(1)"
        !           138:     sys.exit(1)
        !           139: if reader.Name() != "xmlns:a":
        !           140:     print "Failed to read attribute(1) name"
        !           141:     sys.exit(1)
        !           142: if reader.MoveToAttributeNo(2) != 1:
        !           143:     print "Failed moveToAttribute(2)"
        !           144:     sys.exit(1)
        !           145: if reader.Value() != "b":
        !           146:     print "Failed to read attribute(2)"
        !           147:     sys.exit(1)
        !           148: if reader.Name() != "b":
        !           149:     print "Failed to read attribute(2) name"
        !           150:     sys.exit(1)
        !           151: if reader.MoveToAttributeNo(3) != 1:
        !           152:     print "Failed moveToAttribute(3)"
        !           153:     sys.exit(1)
        !           154: if reader.Value() != "a:b":
        !           155:     print "Failed to read attribute(3)"
        !           156:     sys.exit(1)
        !           157: if reader.Name() != "a:b":
        !           158:     print "Failed to read attribute(3) name"
        !           159:     sys.exit(1)
        !           160: #
        !           161: # Attribute exploration by name
        !           162: #
        !           163: if reader.MoveToAttribute("xmlns") != 1:
        !           164:     print "Failed moveToAttribute('xmlns')"
        !           165:     sys.exit(1)
        !           166: if reader.Value() != "urn:1":
        !           167:     print "Failed to read attribute('xmlns')"
        !           168:     sys.exit(1)
        !           169: if reader.MoveToAttribute("xmlns:a") != 1:
        !           170:     print "Failed moveToAttribute('xmlns')"
        !           171:     sys.exit(1)
        !           172: if reader.Value() != "urn:2":
        !           173:     print "Failed to read attribute('xmlns:a')"
        !           174:     sys.exit(1)
        !           175: if reader.MoveToAttribute("b") != 1:
        !           176:     print "Failed moveToAttribute('b')"
        !           177:     sys.exit(1)
        !           178: if reader.Value() != "b":
        !           179:     print "Failed to read attribute('b')"
        !           180:     sys.exit(1)
        !           181: if reader.MoveToAttribute("a:b") != 1:
        !           182:     print "Failed moveToAttribute('a:b')"
        !           183:     sys.exit(1)
        !           184: if reader.Value() != "a:b":
        !           185:     print "Failed to read attribute('a:b')"
        !           186:     sys.exit(1)
        !           187: if reader.MoveToAttributeNs("b", "urn:2") != 1:
        !           188:     print "Failed moveToAttribute('b', 'urn:2')"
        !           189:     sys.exit(1)
        !           190: if reader.Value() != "a:b":
        !           191:     print "Failed to read attribute('b', 'urn:2')"
        !           192:     sys.exit(1)
        !           193: #
        !           194: # Go back and read in sequence
        !           195: #
        !           196: if reader.MoveToElement() != 1:
        !           197:     print "Failed to move back to element"
        !           198:     sys.exit(1)
        !           199: if reader.MoveToFirstAttribute() != 1:
        !           200:     print "Failed to move to first attribute"
        !           201:     sys.exit(1)
        !           202: if reader.Value() != "urn:1":
        !           203:     print "Failed to read attribute(0)"
        !           204:     sys.exit(1)
        !           205: if reader.Name() != "xmlns":
        !           206:     print "Failed to read attribute(0) name"
        !           207:     sys.exit(1)
        !           208: if reader.MoveToNextAttribute() != 1:
        !           209:     print "Failed to move to next attribute"
        !           210:     sys.exit(1)
        !           211: if reader.Value() != "urn:2":
        !           212:     print "Failed to read attribute(1)"
        !           213:     sys.exit(1)
        !           214: if reader.Name() != "xmlns:a":
        !           215:     print "Failed to read attribute(1) name"
        !           216:     sys.exit(1)
        !           217: if reader.MoveToNextAttribute() != 1:
        !           218:     print "Failed to move to next attribute"
        !           219:     sys.exit(1)
        !           220: if reader.Value() != "b":
        !           221:     print "Failed to read attribute(2)"
        !           222:     sys.exit(1)
        !           223: if reader.Name() != "b":
        !           224:     print "Failed to read attribute(2) name"
        !           225:     sys.exit(1)
        !           226: if reader.MoveToNextAttribute() != 1:
        !           227:     print "Failed to move to next attribute"
        !           228:     sys.exit(1)
        !           229: if reader.Value() != "a:b":
        !           230:     print "Failed to read attribute(3)"
        !           231:     sys.exit(1)
        !           232: if reader.Name() != "a:b":
        !           233:     print "Failed to read attribute(3) name"
        !           234:     sys.exit(1)
        !           235: if reader.MoveToNextAttribute() != 0:
        !           236:     print "Failed to detect last attribute"
        !           237:     sys.exit(1)
        !           238: 
        !           239:     
        !           240: #
        !           241: # a couple of tests for namespace nodes
        !           242: #
        !           243: f = StringIO.StringIO("""<a xmlns="http://example.com/foo"/>""")
        !           244: input = libxml2.inputBuffer(f)
        !           245: reader = input.newTextReader("test6")
        !           246: ret = reader.Read()
        !           247: if ret != 1:
        !           248:     print "test6: failed to Read()"
        !           249:     sys.exit(1)
        !           250: ret = reader.MoveToFirstAttribute()
        !           251: if ret != 1:
        !           252:     print "test6: failed to MoveToFirstAttribute()"
        !           253:     sys.exit(1)
        !           254: if reader.NamespaceUri() != "http://www.w3.org/2000/xmlns/" or \
        !           255:    reader.LocalName() != "xmlns" or reader.Name() != "xmlns" or \
        !           256:    reader.Value() != "http://example.com/foo" or reader.NodeType() != 2:
        !           257:     print "test6: failed to read the namespace node"
        !           258:     sys.exit(1)
        !           259: 
        !           260: f = StringIO.StringIO("""<a xmlns:prefix="http://example.com/foo"/>""")
        !           261: input = libxml2.inputBuffer(f)
        !           262: reader = input.newTextReader("test7")
        !           263: ret = reader.Read()
        !           264: if ret != 1:
        !           265:     print "test7: failed to Read()"
        !           266:     sys.exit(1)
        !           267: ret = reader.MoveToFirstAttribute()
        !           268: if ret != 1:
        !           269:     print "test7: failed to MoveToFirstAttribute()"
        !           270:     sys.exit(1)
        !           271: if reader.NamespaceUri() != "http://www.w3.org/2000/xmlns/" or \
        !           272:    reader.LocalName() != "prefix" or reader.Name() != "xmlns:prefix" or \
        !           273:    reader.Value() != "http://example.com/foo" or reader.NodeType() != 2:
        !           274:     print "test7: failed to read the namespace node"
        !           275:     sys.exit(1)
        !           276: 
        !           277: #
        !           278: # Test for a limit case:
        !           279: #
        !           280: f = StringIO.StringIO("""<a/>""")
        !           281: input = libxml2.inputBuffer(f)
        !           282: reader = input.newTextReader("test8")
        !           283: ret = reader.Read()
        !           284: if ret != 1:
        !           285:     print "test8: failed to read the node"
        !           286:     sys.exit(1)
        !           287: if reader.Name() != "a" or reader.IsEmptyElement() != 1:
        !           288:     print "test8: failed to analyze the node"
        !           289:     sys.exit(1)
        !           290: ret = reader.Read()
        !           291: if ret != 0:
        !           292:     print "test8: failed to detect the EOF"
        !           293:     sys.exit(1)
        !           294: 
        !           295: #
        !           296: # Another test provided by Stéphane Bidoul and checked with C#
        !           297: #
        !           298: def tst_reader(s):
        !           299:     f = StringIO.StringIO(s)
        !           300:     input = libxml2.inputBuffer(f)
        !           301:     reader = input.newTextReader("tst")
        !           302:     res = ""
        !           303:     while reader.Read():
        !           304:         res=res + "%s (%s) [%s] %d %d\n" % (reader.NodeType(),reader.Name(),
        !           305:                                       reader.Value(), reader.IsEmptyElement(),
        !           306:                                       reader.Depth())
        !           307:         if reader.NodeType() == 1: # Element
        !           308:             while reader.MoveToNextAttribute():
        !           309:                 res = res + "-- %s (%s) [%s] %d %d\n" % (reader.NodeType(),
        !           310:                                        reader.Name(),reader.Value(),
        !           311:                                        reader.IsEmptyElement(), reader.Depth())
        !           312:     return res
        !           313:     
        !           314: doc="""<a><b b1="b1"/><c>content of c</c></a>"""
        !           315: expect="""1 (a) [None] 0 0
        !           316: 1 (b) [None] 1 1
        !           317: -- 2 (b1) [b1] 0 2
        !           318: 1 (c) [None] 0 1
        !           319: 3 (#text) [content of c] 0 2
        !           320: 15 (c) [None] 0 1
        !           321: 15 (a) [None] 0 0
        !           322: """
        !           323: res = tst_reader(doc)
        !           324: if res != expect:
        !           325:     print "test5 failed"
        !           326:     print res
        !           327:     sys.exit(1)
        !           328: 
        !           329: doc="""<test><b/><c/></test>"""
        !           330: expect="""1 (test) [None] 0 0
        !           331: 1 (b) [None] 1 1
        !           332: 1 (c) [None] 1 1
        !           333: 15 (test) [None] 0 0
        !           334: """
        !           335: res = tst_reader(doc)
        !           336: if res != expect:
        !           337:     print "test9 failed"
        !           338:     print res
        !           339:     sys.exit(1)
        !           340: 
        !           341: doc="""<a><b>bbb</b><c>ccc</c></a>"""
        !           342: expect="""1 (a) [None] 0 0
        !           343: 1 (b) [None] 0 1
        !           344: 3 (#text) [bbb] 0 2
        !           345: 15 (b) [None] 0 1
        !           346: 1 (c) [None] 0 1
        !           347: 3 (#text) [ccc] 0 2
        !           348: 15 (c) [None] 0 1
        !           349: 15 (a) [None] 0 0
        !           350: """
        !           351: res = tst_reader(doc)
        !           352: if res != expect:
        !           353:     print "test10 failed"
        !           354:     print res
        !           355:     sys.exit(1)
        !           356: 
        !           357: doc="""<test a="a"/>"""
        !           358: expect="""1 (test) [None] 1 0
        !           359: -- 2 (a) [a] 0 1
        !           360: """
        !           361: res = tst_reader(doc)
        !           362: if res != expect:
        !           363:     print "test11 failed"
        !           364:     print res
        !           365:     sys.exit(1)
        !           366: 
        !           367: doc="""<test><a>aaa</a><b/></test>"""
        !           368: expect="""1 (test) [None] 0 0
        !           369: 1 (a) [None] 0 1
        !           370: 3 (#text) [aaa] 0 2
        !           371: 15 (a) [None] 0 1
        !           372: 1 (b) [None] 1 1
        !           373: 15 (test) [None] 0 0
        !           374: """
        !           375: res = tst_reader(doc)
        !           376: if res != expect:
        !           377:     print "test12 failed"
        !           378:     print res
        !           379:     sys.exit(1)
        !           380: 
        !           381: doc="""<test><p></p></test>"""
        !           382: expect="""1 (test) [None] 0 0
        !           383: 1 (p) [None] 0 1
        !           384: 15 (p) [None] 0 1
        !           385: 15 (test) [None] 0 0
        !           386: """
        !           387: res = tst_reader(doc)
        !           388: if res != expect:
        !           389:     print "test13 failed"
        !           390:     print res
        !           391:     sys.exit(1)
        !           392: 
        !           393: doc="""<p></p>"""
        !           394: expect="""1 (p) [None] 0 0
        !           395: 15 (p) [None] 0 0
        !           396: """
        !           397: res = tst_reader(doc)
        !           398: if res != expect:
        !           399:     print "test14 failed"
        !           400:     print res
        !           401:     sys.exit(1)
        !           402: 
        !           403: #
        !           404: # test from bug #108801 
        !           405: #
        !           406: doc="""<?xml version="1.0" standalone="no"?>
        !           407: <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
        !           408:                   "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
        !           409: ]>
        !           410: 
        !           411: <article>
        !           412: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        !           413: </article>
        !           414: """
        !           415: expect="""10 (article) [None] 0 0
        !           416: 1 (article) [None] 0 0
        !           417: 3 (#text) [
        !           418: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        !           419: ] 0 1
        !           420: 15 (article) [None] 0 0
        !           421: """
        !           422: res = tst_reader(doc)
        !           423: if res != expect:
        !           424:     print "test15 failed"
        !           425:     print res
        !           426:     sys.exit(1)
        !           427: 
        !           428: #
        !           429: # cleanup for memory allocation counting
        !           430: #
        !           431: del f
        !           432: del input
        !           433: del reader
        !           434: 
        !           435: # Memory debug specific
        !           436: libxml2.cleanupParser()
        !           437: if libxml2.debugMemory(1) == 0:
        !           438:     print "OK"
        !           439: else:
        !           440:     print "Memory leak %d bytes" % (libxml2.debugMemory(1))
        !           441:     libxml2.dumpMemory()

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>