Return to reader.py CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / python / tests |
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()