Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 1 | #!/usr/bin/python -u |
Daniel Veillard | a9a1b10 | 2004-02-17 13:24:01 +0000 | [diff] [blame] | 2 | # -*- coding: ISO-8859-1 -*- |
Daniel Veillard | e18fc18 | 2002-12-28 22:56:33 +0000 | [diff] [blame] | 3 | # |
| 4 | # this tests the basic APIs of the XmlTextReader interface |
| 5 | # |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 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) |
Daniel Veillard | 4258b9c | 2002-12-20 10:29:40 +0000 | [diff] [blame] | 15 | reader = input.newTextReader("test1") |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 16 | ret = reader.Read() |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 17 | if ret != 1: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 18 | print "test1: Error reading to first element" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 19 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 20 | if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \ |
| 21 | reader.NodeType() != 1 or reader.HasAttributes() != 0: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 22 | print "test1: Error reading the first element" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 23 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 24 | ret = reader.Read() |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 25 | if ret != 1: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 26 | print "test1: Error reading to second element" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 27 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 28 | if reader.Name() != "b" or reader.IsEmptyElement() != 1 or \ |
| 29 | reader.NodeType() != 1 or reader.HasAttributes() != 1: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 30 | print "test1: Error reading the second element" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 31 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 32 | ret = reader.Read() |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 33 | if ret != 1: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 34 | print "test1: Error reading to third element" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 35 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 36 | if reader.Name() != "c" or reader.IsEmptyElement() != 0 or \ |
| 37 | reader.NodeType() != 1 or reader.HasAttributes() != 0: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 38 | print "test1: Error reading the third element" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 39 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 40 | ret = reader.Read() |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 41 | if ret != 1: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 42 | print "test1: Error reading to text node" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 43 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 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": |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 47 | print "test1: Error reading the text node" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 48 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 49 | ret = reader.Read() |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 50 | if ret != 1: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 51 | print "test1: Error reading to end of third element" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 52 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 53 | if reader.Name() != "c" or reader.IsEmptyElement() != 0 or \ |
| 54 | reader.NodeType() != 15 or reader.HasAttributes() != 0: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 55 | print "test1: Error reading the end of third element" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 56 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 57 | ret = reader.Read() |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 58 | if ret != 1: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 59 | print "test1: Error reading to end of first element" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 60 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 61 | if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \ |
| 62 | reader.NodeType() != 15 or reader.HasAttributes() != 0: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 63 | print "test1: Error reading the end of first element" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 64 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 65 | ret = reader.Read() |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 66 | if ret != 0: |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 67 | print "test1: Error reading to end of document" |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 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) |
Daniel Veillard | 4258b9c | 2002-12-20 10:29:40 +0000 | [diff] [blame] | 75 | reader = input.newTextReader("test2") |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 76 | |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 77 | ret = reader.Read() |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 78 | if ret != 1: |
| 79 | print "Error reading test element" |
| 80 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 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": |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 85 | print "error reading test attributes" |
| 86 | sys.exit(1) |
| 87 | |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 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) |
Daniel Veillard | 4258b9c | 2002-12-20 10:29:40 +0000 | [diff] [blame] | 97 | reader = input.newTextReader("test3") |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 98 | |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 99 | ret = reader.Read() |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 100 | while ret == 1: |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 101 | if reader.Name() == "ref": |
| 102 | if reader.LookupNamespace("a") != "urn:456": |
Daniel Veillard | 09b792b | 2004-02-23 10:53:52 +0000 | [diff] [blame] | 103 | print "error resolving namespace prefix" |
| 104 | sys.exit(1) |
| 105 | break |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 106 | ret = reader.Read() |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 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) |
Daniel Veillard | 4258b9c | 2002-12-20 10:29:40 +0000 | [diff] [blame] | 116 | reader = input.newTextReader("test4") |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 117 | ret = reader.Read() |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 118 | if ret != 1: |
| 119 | print "Error reading the testattr element" |
| 120 | sys.exit(1) |
| 121 | # |
| 122 | # Attribute exploration by index |
| 123 | # |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 124 | if reader.MoveToAttributeNo(0) != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 125 | print "Failed moveToAttribute(0)" |
| 126 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 127 | if reader.Value() != "urn:1": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 128 | print "Failed to read attribute(0)" |
| 129 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 130 | if reader.Name() != "xmlns": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 131 | print "Failed to read attribute(0) name" |
| 132 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 133 | if reader.MoveToAttributeNo(1) != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 134 | print "Failed moveToAttribute(1)" |
| 135 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 136 | if reader.Value() != "urn:2": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 137 | print "Failed to read attribute(1)" |
| 138 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 139 | if reader.Name() != "xmlns:a": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 140 | print "Failed to read attribute(1) name" |
| 141 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 142 | if reader.MoveToAttributeNo(2) != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 143 | print "Failed moveToAttribute(2)" |
| 144 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 145 | if reader.Value() != "b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 146 | print "Failed to read attribute(2)" |
| 147 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 148 | if reader.Name() != "b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 149 | print "Failed to read attribute(2) name" |
| 150 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 151 | if reader.MoveToAttributeNo(3) != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 152 | print "Failed moveToAttribute(3)" |
| 153 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 154 | if reader.Value() != "a:b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 155 | print "Failed to read attribute(3)" |
| 156 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 157 | if reader.Name() != "a:b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 158 | print "Failed to read attribute(3) name" |
| 159 | sys.exit(1) |
| 160 | # |
| 161 | # Attribute exploration by name |
| 162 | # |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 163 | if reader.MoveToAttribute("xmlns") != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 164 | print "Failed moveToAttribute('xmlns')" |
| 165 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 166 | if reader.Value() != "urn:1": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 167 | print "Failed to read attribute('xmlns')" |
| 168 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 169 | if reader.MoveToAttribute("xmlns:a") != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 170 | print "Failed moveToAttribute('xmlns')" |
| 171 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 172 | if reader.Value() != "urn:2": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 173 | print "Failed to read attribute('xmlns:a')" |
| 174 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 175 | if reader.MoveToAttribute("b") != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 176 | print "Failed moveToAttribute('b')" |
| 177 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 178 | if reader.Value() != "b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 179 | print "Failed to read attribute('b')" |
| 180 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 181 | if reader.MoveToAttribute("a:b") != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 182 | print "Failed moveToAttribute('a:b')" |
| 183 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 184 | if reader.Value() != "a:b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 185 | print "Failed to read attribute('a:b')" |
| 186 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 187 | if reader.MoveToAttributeNs("b", "urn:2") != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 188 | print "Failed moveToAttribute('b', 'urn:2')" |
| 189 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 190 | if reader.Value() != "a:b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 191 | print "Failed to read attribute('b', 'urn:2')" |
| 192 | sys.exit(1) |
| 193 | # |
| 194 | # Go back and read in sequence |
| 195 | # |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 196 | if reader.MoveToElement() != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 197 | print "Failed to move back to element" |
| 198 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 199 | if reader.MoveToFirstAttribute() != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 200 | print "Failed to move to first attribute" |
| 201 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 202 | if reader.Value() != "urn:1": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 203 | print "Failed to read attribute(0)" |
| 204 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 205 | if reader.Name() != "xmlns": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 206 | print "Failed to read attribute(0) name" |
| 207 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 208 | if reader.MoveToNextAttribute() != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 209 | print "Failed to move to next attribute" |
| 210 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 211 | if reader.Value() != "urn:2": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 212 | print "Failed to read attribute(1)" |
| 213 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 214 | if reader.Name() != "xmlns:a": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 215 | print "Failed to read attribute(1) name" |
| 216 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 217 | if reader.MoveToNextAttribute() != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 218 | print "Failed to move to next attribute" |
| 219 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 220 | if reader.Value() != "b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 221 | print "Failed to read attribute(2)" |
| 222 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 223 | if reader.Name() != "b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 224 | print "Failed to read attribute(2) name" |
| 225 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 226 | if reader.MoveToNextAttribute() != 1: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 227 | print "Failed to move to next attribute" |
| 228 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 229 | if reader.Value() != "a:b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 230 | print "Failed to read attribute(3)" |
| 231 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 232 | if reader.Name() != "a:b": |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 233 | print "Failed to read attribute(3) name" |
| 234 | sys.exit(1) |
Daniel Veillard | aba976d | 2002-12-28 21:14:18 +0000 | [diff] [blame] | 235 | if reader.MoveToNextAttribute() != 0: |
Daniel Veillard | da46d2d | 2002-12-15 23:36:49 +0000 | [diff] [blame] | 236 | print "Failed to detect last attribute" |
| 237 | sys.exit(1) |
| 238 | |
Daniel Veillard | 29b3e28 | 2002-12-29 11:14:41 +0000 | [diff] [blame] | 239 | |
Daniel Veillard | ecaba49 | 2002-12-30 10:55:29 +0000 | [diff] [blame] | 240 | # |
| 241 | # a couple of tests for namespace nodes |
| 242 | # |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 243 | f = StringIO.StringIO("""<a xmlns="http://example.com/foo"/>""") |
Daniel Veillard | ecaba49 | 2002-12-30 10:55:29 +0000 | [diff] [blame] | 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 | |
Daniel Veillard | 067bae5 | 2003-01-05 01:27:54 +0000 | [diff] [blame] | 260 | f = StringIO.StringIO("""<a xmlns:prefix="http://example.com/foo"/>""") |
Daniel Veillard | ecaba49 | 2002-12-30 10:55:29 +0000 | [diff] [blame] | 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) |
Daniel Veillard | 29b3e28 | 2002-12-29 11:14:41 +0000 | [diff] [blame] | 276 | |
Daniel Veillard | aaa105b | 2002-12-30 11:42:17 +0000 | [diff] [blame] | 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 | |
Daniel Veillard | 571b889 | 2002-12-30 12:37:59 +0000 | [diff] [blame] | 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(): |
Daniel Veillard | 09b792b | 2004-02-23 10:53:52 +0000 | [diff] [blame] | 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()) |
Daniel Veillard | 571b889 | 2002-12-30 12:37:59 +0000 | [diff] [blame] | 312 | return res |
| 313 | |
| 314 | doc="""<a><b b1="b1"/><c>content of c</c></a>""" |
Daniel Veillard | 4d8db8a | 2002-12-30 18:40:42 +0000 | [diff] [blame] | 315 | expect="""1 (a) [None] 0 0 |
| 316 | 1 (b) [None] 1 1 |
Daniel Veillard | e3c036e | 2003-01-01 15:11:05 +0000 | [diff] [blame] | 317 | -- 2 (b1) [b1] 0 2 |
Daniel Veillard | 4d8db8a | 2002-12-30 18:40:42 +0000 | [diff] [blame] | 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 |
Daniel Veillard | 571b889 | 2002-12-30 12:37:59 +0000 | [diff] [blame] | 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>""" |
Daniel Veillard | 4d8db8a | 2002-12-30 18:40:42 +0000 | [diff] [blame] | 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 |
Daniel Veillard | 571b889 | 2002-12-30 12:37:59 +0000 | [diff] [blame] | 334 | """ |
| 335 | res = tst_reader(doc) |
| 336 | if res != expect: |
Daniel Veillard | 4d8db8a | 2002-12-30 18:40:42 +0000 | [diff] [blame] | 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" |
Daniel Veillard | 571b889 | 2002-12-30 12:37:59 +0000 | [diff] [blame] | 354 | print res |
| 355 | sys.exit(1) |
Daniel Veillard | aaa105b | 2002-12-30 11:42:17 +0000 | [diff] [blame] | 356 | |
Daniel Veillard | e3c036e | 2003-01-01 15:11:05 +0000 | [diff] [blame] | 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 | |
Daniel Veillard | dab8ea9 | 2003-01-02 14:16:45 +0000 | [diff] [blame] | 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 | |
Daniel Veillard | aaa105b | 2002-12-30 11:42:17 +0000 | [diff] [blame] | 403 | # |
Daniel Veillard | 48ef4c9 | 2003-03-22 12:38:15 +0000 | [diff] [blame] | 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 | # |
Daniel Veillard | aaa105b | 2002-12-30 11:42:17 +0000 | [diff] [blame] | 429 | # cleanup for memory allocation counting |
| 430 | # |
Daniel Veillard | 0eb38c7 | 2002-12-14 23:00:35 +0000 | [diff] [blame] | 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() |