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