hutch-xamplr-pp 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ 1_2
@@ -0,0 +1 @@
1
+ 1_2__3___4____5
@@ -0,0 +1,36 @@
1
+ # xampl-pp : XML pull parser
2
+ # Copyright (C) 2002-2009 Bob Hutchison
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # #Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+ #
18
+ require "Lapidary/TestCase"
19
+ require "xampl-pp"
20
+
21
+ class TC_Misc < Lapidary::TestCase
22
+ def setup
23
+ @xpp = Xampl_PP.new
24
+ end
25
+ #def tearDown
26
+ #end
27
+
28
+ def testEntityMap
29
+ assert @xpp.entityMap["amp"] == "&"
30
+ assert @xpp.entityMap["apos"] == "'"
31
+ assert @xpp.entityMap["gt"] == ">"
32
+ assert @xpp.entityMap["lt"] == "<"
33
+ assert @xpp.entityMap["quot"] == '"'
34
+ end
35
+ end
36
+
@@ -0,0 +1,197 @@
1
+ # xampl-pp : XML pull parser
2
+ # Copyright (C) 2002-2009 Bob Hutchison
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # #Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+ #
18
+ require "Lapidary/TestCase"
19
+ require "xampl-pp"
20
+
21
+ class XppTestNamespace < Xampl_PP
22
+ def doPushText(c)
23
+ pushTextBuffer(c)
24
+ end
25
+
26
+ def doParseText(delimiter, resolve)
27
+ parseText(delimiter, resolve)
28
+ end
29
+
30
+ def getTextBuffer
31
+ @textBuffer
32
+ end
33
+
34
+ def clearTextBuffer
35
+ @textBuffer = ''
36
+ end
37
+
38
+ def makeStart
39
+ @type = START_ELEMENT
40
+ end
41
+
42
+ def deeper(prefix, name)
43
+ @elementPrefix.push prefix
44
+ @elementName.push name
45
+ @elementQName.push (nil == prefix) ? name : (prefix + ':' + name)
46
+ @elementNamespace.push prefix
47
+ end
48
+
49
+ def doPeekType
50
+ peekType
51
+ end
52
+ end
53
+
54
+ class TC_Namespace < Lapidary::TestCase
55
+ def setup
56
+ @xpp = XppTestParse.new
57
+
58
+ @xppReporting = XppTestParse.new
59
+ @xppReporting.reportNamespaceAttributes = true
60
+ end
61
+ #def tearDown
62
+ #end
63
+
64
+ def testNSDefault
65
+ pp = @xpp
66
+ pp.input = "<start attr1='value1' attr2='value2' xmlns='default-namespace'>"
67
+
68
+ eventType = pp.nextEvent
69
+ assert pp.startElement?
70
+ assert 'start' == pp.name
71
+ assert 1 == pp.elementName.length
72
+ assert 1 == pp.elementQName.length
73
+ assert 1 == pp.elementNamespace.length
74
+ assert 1 == pp.elementPrefix.length
75
+
76
+ assert 2 == pp.attributeName.length
77
+ assert 2 == pp.attributeQName.length
78
+ assert 2 == pp.attributeNamespace.length
79
+ assert 2 == pp.attributePrefix.length
80
+ assert 2 == pp.attributeValue.length
81
+
82
+ assert 'start' == pp.elementName[0]
83
+ assert 'start' == pp.elementQName[0]
84
+ assert 'default-namespace' == pp.elementNamespace[0]
85
+ assert nil == pp.elementPrefix[0]
86
+
87
+ assert 'attr1' == pp.attributeName[0]
88
+ assert 'attr1' == pp.attributeQName[0]
89
+ assert nil == pp.attributeNamespace[0]
90
+ assert nil == pp.attributePrefix[0]
91
+ assert 'value1' == pp.attributeValue[0]
92
+
93
+ assert 'attr2' == pp.attributeName[1]
94
+ assert 'attr2' == pp.attributeQName[1]
95
+ assert nil == pp.attributeNamespace[1]
96
+ assert nil == pp.attributePrefix[1]
97
+ assert 'value2' == pp.attributeValue[1]
98
+ end
99
+
100
+ def testNSDefaultNSReporting
101
+ pp = @xppReporting
102
+ pp.input = "<start attr1='value1' attr2='value2' xmlns='default-namespace'>"
103
+
104
+ eventType = pp.nextEvent
105
+ assert pp.startElement?
106
+ assert 'start' == pp.name
107
+ assert 1 == pp.elementName.length
108
+ assert 1 == pp.elementQName.length
109
+ assert 1 == pp.elementNamespace.length
110
+ assert 1 == pp.elementPrefix.length
111
+
112
+ assert 3 == pp.attributeName.length
113
+ assert 3 == pp.attributeQName.length
114
+ assert 3 == pp.attributeNamespace.length
115
+ assert 3 == pp.attributePrefix.length
116
+ assert 3 == pp.attributeValue.length
117
+
118
+ assert 'start' == pp.elementName[0]
119
+ assert 'start' == pp.elementQName[0]
120
+ assert 'default-namespace' == pp.elementNamespace[0]
121
+ assert nil == pp.elementPrefix[0]
122
+
123
+ assert 'attr1' == pp.attributeName[0]
124
+ assert 'attr1' == pp.attributeQName[0]
125
+ assert nil == pp.attributeNamespace[0]
126
+ assert nil == pp.attributePrefix[0]
127
+ assert 'value1' == pp.attributeValue[0]
128
+
129
+ assert 'attr2' == pp.attributeName[1]
130
+ assert 'attr2' == pp.attributeQName[1]
131
+ assert nil == pp.attributeNamespace[1]
132
+ assert nil == pp.attributePrefix[1]
133
+ assert 'value2' == pp.attributeValue[1]
134
+
135
+ assert nil == pp.attributeName[2]
136
+ assert 'xmlns' == pp.attributeQName[2]
137
+ assert 'http://www.w3.org/2000/xmlns/' == pp.attributeNamespace[2]
138
+ assert 'xmlns' == pp.attributePrefix[2]
139
+ assert 'default-namespace' == pp.attributeValue[2]
140
+ end
141
+
142
+ def testNSqualified000
143
+ pp = @xppReporting
144
+ pp.input = "<ns:start attr1='value1' attr2='value2' xmlns='default-namespace' xmlns:ns='ns-namespace'>"
145
+
146
+ eventType = pp.nextEvent
147
+ assert pp.startElement?
148
+ assert 'start' == pp.name
149
+ assert 1 == pp.elementName.length
150
+ assert 4 == pp.attributeName.length
151
+
152
+ assert 'start' == pp.name
153
+ assert 'ns:start' == pp.qname
154
+ assert 'ns' == pp.prefix
155
+ assert 'ns-namespace' == pp.namespace
156
+
157
+ assert 'ns' == pp.attributeName[3]
158
+ assert 'xmlns:ns' == pp.attributeQName[3]
159
+ assert 'ns-namespace' == pp.attributeNamespace[3]
160
+ assert 'xmlns' == pp.attributePrefix[3]
161
+ assert 'ns-namespace' == pp.attributeValue[3]
162
+ end
163
+
164
+ def testNSqualified001
165
+ pp = @xppReporting
166
+ pp.input = "<ns:start attr1='value1' ns:attr2='value2' xmlns='default-namespace' xmlns:ns='ns-namespace'>"
167
+
168
+ eventType = pp.nextEvent
169
+ assert pp.startElement?
170
+ assert 'start' == pp.name
171
+ assert 1 == pp.elementName.length
172
+ assert 4 == pp.attributeName.length
173
+
174
+ assert 'start' == pp.name
175
+ assert 'ns:start' == pp.qname
176
+ assert 'ns' == pp.prefix
177
+ assert 'ns-namespace' == pp.namespace
178
+
179
+ assert 'attr2' == pp.attributeName[1]
180
+ assert 'ns:attr2' == pp.attributeQName[1]
181
+ assert 'ns-namespace' == pp.attributeNamespace[1]
182
+ assert 'ns' == pp.attributePrefix[1]
183
+ assert 'value2' == pp.attributeValue[1]
184
+ end
185
+
186
+ def testNSqualifiedNonExistant
187
+ pp = @xppReporting
188
+ pp.input = "<ns:start attr1='value1' x:attr2='value2' xmlns='default-namespace' xmlns:ns='ns-namespace'>"
189
+ assertRaises( RuntimeError ) { eventType = pp.nextEvent }
190
+
191
+ pp = @xppReporting
192
+ pp.input = "<x:start attr1='value1' ns:attr2='value2' xmlns='default-namespace' xmlns:ns='ns-namespace'>"
193
+ assertRaises( RuntimeError ) { eventType = pp.nextEvent }
194
+ end
195
+
196
+ end
197
+
@@ -0,0 +1,655 @@
1
+ # xampl-pp : XML pull parser
2
+ # Copyright (C) 2002-2009 Bob Hutchison
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # #Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+ #
18
+ require "Lapidary/TestCase"
19
+ require "xampl-pp"
20
+
21
+ class XppTestParse < Xampl_PP
22
+ def doParseText(delimiter, resolve)
23
+ parseText(delimiter, resolve)
24
+ end
25
+
26
+ def getTextBuffer
27
+ @textBuffer
28
+ end
29
+
30
+ def clearTextBuffer
31
+ @textBuffer = ''
32
+ end
33
+
34
+ def makeStart
35
+ @type = START_ELEMENT
36
+ end
37
+
38
+ def deeper(prefix, name)
39
+ @elementPrefix.push prefix
40
+ @elementName.push name
41
+ @elementQName.push ((nil == prefix) ? name : (prefix + ':' + name))
42
+ @elementNamespace.push prefix
43
+ end
44
+
45
+ def doPeekType
46
+ peekType
47
+ end
48
+ end
49
+
50
+ class TC_Parse < Lapidary::TestCase
51
+ def setup
52
+ @xpp = XppTestParse.new
53
+ end
54
+ #def tearDown
55
+ #end
56
+
57
+ def testParseText
58
+ @xpp.input = "dummy'"
59
+ @xpp.doParseText(?', true) # for vim: '
60
+ assert "dummy" == @xpp.getTextBuffer
61
+
62
+ @xpp.input = "dummy<start>"
63
+ @xpp.doParseText(?<, true)
64
+ assert "dummy" == @xpp.getTextBuffer
65
+
66
+ @xpp.input = "dummy&lt;dummy"
67
+ @xpp.doParseText(?', true) # for vim: '
68
+ assert "dummy<dummy" == @xpp.getTextBuffer
69
+
70
+ @xpp.input = "dummy&lt;dummy'"
71
+ @xpp.doParseText(?', false) # for vim: '
72
+ assert "dummy" == @xpp.getTextBuffer
73
+
74
+ @xpp.input = "dummy&junk;dummy'"
75
+ @xpp.doParseText(?', false) # for vim: '
76
+ assert "dummy" == @xpp.getTextBuffer
77
+
78
+ @xpp.input = "dummy&junk;dummy'"
79
+ assertRaises( RuntimeError ) {
80
+ @xpp.doParseText(?', true) # for vim: '
81
+ }
82
+ end
83
+
84
+ def testEndDocumentPeekType
85
+ @xpp.input = ""
86
+ assert Xampl_PP::END_DOCUMENT == @xpp.doPeekType
87
+ @xpp.input = "\000"
88
+ assert Xampl_PP::END_DOCUMENT == @xpp.doPeekType
89
+ end
90
+
91
+ def testEntityRefPeekType
92
+ @xpp.input = "&lt;"
93
+ assert Xampl_PP::ENTITY_REF == @xpp.doPeekType
94
+ end
95
+
96
+ def testTextPeekType
97
+ @xpp.input = "text"
98
+ assert Xampl_PP::TEXT == @xpp.doPeekType
99
+ end
100
+
101
+ def testEndElementPeekType
102
+ @xpp.input = "</end>"
103
+ assert Xampl_PP::END_ELEMENT == @xpp.doPeekType
104
+ end
105
+
106
+ def testCdataSectionPeekType
107
+ @xpp.input = "<![CDATA[blah]]>"
108
+ assert Xampl_PP::UNDECIDED_TYPE == @xpp.doPeekType
109
+ end
110
+
111
+ def testProcessingPeekType
112
+ @xpp.input = "<?do something?>"
113
+ assert Xampl_PP::UNDECIDED_TYPE == @xpp.doPeekType
114
+ end
115
+
116
+ def testCommentPeekType
117
+ @xpp.input = "<!-- comment -->"
118
+ assert Xampl_PP::UNDECIDED_TYPE == @xpp.doPeekType
119
+ end
120
+
121
+ def testStartElementPeekType
122
+ @xpp.input = "<start>"
123
+ assert Xampl_PP::START_ELEMENT == @xpp.doPeekType
124
+ end
125
+
126
+ def testEndDocumentNextEvent
127
+ @xpp.input = ""
128
+ #@xpp.checkWellFormed = false
129
+ eventType = @xpp.nextEvent
130
+ assert @xpp.endDocument?
131
+
132
+ @xpp.input = "\000"
133
+ eventType = @xpp.nextEvent
134
+ assert @xpp.endDocument?
135
+ end
136
+
137
+ def testEntityRefNextEvent
138
+ @xpp.input = "&lt;"
139
+ #@xpp.checkWellFormed = false
140
+ eventType = @xpp.nextEvent
141
+ assert @xpp.entityRef?
142
+ assert !@xpp.unresolvedEntity
143
+ assert 'lt' == @xpp.name
144
+ assert '<' == @xpp.text
145
+
146
+ @xpp.input = "&blah;"
147
+ assertRaises( RuntimeError ) { eventType = @xpp.nextEvent }
148
+
149
+ @xpp.input = "&#x20;"
150
+ eventType = @xpp.nextEvent
151
+ assert @xpp.entityRef?
152
+ assert !@xpp.unresolvedEntity
153
+ assert '#x20' == @xpp.name
154
+ assert 0x20 == @xpp.text[0]
155
+
156
+ @xpp.input = "&#32;"
157
+ eventType = @xpp.nextEvent
158
+ assert @xpp.entityRef?
159
+ assert !@xpp.unresolvedEntity
160
+ assert '#32' == @xpp.name
161
+ assert 32 == @xpp.text[0]
162
+ end
163
+
164
+ def testEndElementNextEvent
165
+ # no start element...
166
+ @xpp.input = "</end>"
167
+ assertRaises( RuntimeError ) { eventType = @xpp.nextEvent }
168
+
169
+ # fake a start element, illegal name
170
+ @xpp.input = "</*>"
171
+ @xpp.deeper(nil, "*")
172
+ assertRaises( RuntimeError ) { eventType = @xpp.nextEvent }
173
+
174
+ # fake a start element. This should work. make sure that we don't have
175
+ # and unresolved entity stuff nor anything on the element stacks
176
+ @xpp.input = "</end>"
177
+ @xpp.deeper(nil, 'end')
178
+ eventType = @xpp.nextEvent
179
+ assert @xpp.endElement?
180
+ assert !@xpp.unresolvedEntity
181
+ assert 'end' == @xpp.name
182
+ assert 0 == @xpp.elementName.length
183
+ assert 0 == @xpp.elementQName.length
184
+ assert 0 == @xpp.elementNamespace.length
185
+ assert 0 == @xpp.elementPrefix.length
186
+
187
+ # fake a start element, with a namespace
188
+ @xpp.input = "</space:end>"
189
+ @xpp.deeper('space', 'end')
190
+ eventType = @xpp.nextEvent
191
+ assert @xpp.endElement?
192
+ assert !@xpp.unresolvedEntity
193
+ assert 'end' == @xpp.name
194
+
195
+ # fake a start element, different from the end
196
+ @xpp.input = "</end>"
197
+ @xpp.deeper(nil, 'start')
198
+ assertRaises( RuntimeError ) { eventType = @xpp.nextEvent }
199
+ end
200
+
201
+ def testStartElementNextEvent
202
+ @xpp.input = "<start>"
203
+ eventType = @xpp.nextEvent
204
+ assert @xpp.startElement?
205
+ assert !@xpp.unresolvedEntity
206
+ assert 1 == @xpp.elementName.length
207
+ assert 'start' == @xpp.name
208
+ assert !@xpp.emptyElement
209
+ assert 1 == @xpp.elementName.length
210
+ assert 1 == @xpp.elementQName.length
211
+ assert 1 == @xpp.elementNamespace.length
212
+ assert 1 == @xpp.elementPrefix.length
213
+ assert 0 == @xpp.attributeName.length
214
+ assert 0 == @xpp.attributeQName.length
215
+ assert 0 == @xpp.attributeNamespace.length
216
+ assert 0 == @xpp.attributePrefix.length
217
+ assert 0 == @xpp.attributeValue.length
218
+
219
+ assert 'start' == @xpp.elementName[0]
220
+ assert 'start' == @xpp.elementQName[0]
221
+ assert nil == @xpp.elementNamespace[0]
222
+ assert nil == @xpp.elementPrefix[0]
223
+
224
+ @xpp.input = "<start/>"
225
+ eventType = @xpp.nextEvent
226
+ assert @xpp.startElement?
227
+ assert !@xpp.unresolvedEntity
228
+ assert 0 == @xpp.elementName.length
229
+ assert 'start' == @xpp.name
230
+ assert @xpp.emptyElement
231
+ assert 0 == @xpp.elementName.length
232
+ assert 0 == @xpp.elementQName.length
233
+ assert 0 == @xpp.elementNamespace.length
234
+ assert 0 == @xpp.elementPrefix.length
235
+ assert 0 == @xpp.attributeName.length
236
+ assert 0 == @xpp.attributeQName.length
237
+ assert 0 == @xpp.attributeNamespace.length
238
+ assert 0 == @xpp.attributePrefix.length
239
+ assert 0 == @xpp.attributeValue.length
240
+ eventType = @xpp.nextEvent
241
+ assert @xpp.endElement?
242
+
243
+ @xpp.input = "<start"
244
+ assertRaises( RuntimeError ) { eventType = @xpp.nextEvent }
245
+
246
+ @xpp.input = "<start <>"
247
+ assertRaises( RuntimeError ) { eventType = @xpp.nextEvent }
248
+
249
+ @xpp.input = "<start attr='value'/>"
250
+ eventType = @xpp.nextEvent
251
+ assert @xpp.startElement?
252
+ assert !@xpp.unresolvedEntity
253
+ assert 0 == @xpp.elementName.length
254
+ assert 'start' == @xpp.name
255
+ assert @xpp.emptyElement
256
+ assert 0 == @xpp.elementName.length
257
+ assert 0 == @xpp.elementQName.length
258
+ assert 0 == @xpp.elementNamespace.length
259
+ assert 0 == @xpp.elementPrefix.length
260
+ assert 1 == @xpp.attributeName.length
261
+ assert 1 == @xpp.attributeQName.length
262
+ assert 1 == @xpp.attributeNamespace.length
263
+ assert 1 == @xpp.attributePrefix.length
264
+ assert 1 == @xpp.attributeValue.length
265
+ assert 'attr' == @xpp.attributeName[0]
266
+ assert 'attr' == @xpp.attributeQName[0]
267
+ assert nil == @xpp.attributeNamespace[0]
268
+ assert nil == @xpp.attributePrefix[0]
269
+ assert 'value' == @xpp.attributeValue[0]
270
+
271
+ end
272
+
273
+ def testNSAttributeCount
274
+ @xpp.input = "<start attr1='value1'>"
275
+
276
+ eventType = @xpp.nextEvent
277
+ assert @xpp.startElement?
278
+ assert 'start' == @xpp.name
279
+ assert 1 == @xpp.elementName.length
280
+ assert 1 == @xpp.elementQName.length
281
+ assert 1 == @xpp.elementNamespace.length
282
+ assert 1 == @xpp.elementPrefix.length
283
+
284
+ assert 1 == @xpp.attributeName.length
285
+ assert 1 == @xpp.attributeQName.length
286
+ assert 1 == @xpp.attributeNamespace.length
287
+ assert 1 == @xpp.attributePrefix.length
288
+ assert 1 == @xpp.attributeValue.length
289
+
290
+ assert 'start' == @xpp.elementName[0]
291
+ assert 'start' == @xpp.elementQName[0]
292
+ assert nil == @xpp.elementNamespace[0]
293
+ assert nil == @xpp.elementPrefix[0]
294
+
295
+ assert 'attr1' == @xpp.attributeName[0]
296
+ assert 'attr1' == @xpp.attributeQName[0]
297
+ assert nil == @xpp.attributeNamespace[0]
298
+ assert nil == @xpp.attributePrefix[0]
299
+ assert 'value1' == @xpp.attributeValue[0]
300
+
301
+ @xpp.input = "<start attr1='value1' attr2='value2'>"
302
+ #@xpp.checkWellFormed = false
303
+
304
+ eventType = @xpp.nextEvent
305
+ assert @xpp.startElement?
306
+ assert 'start' == @xpp.name
307
+ assert 1 == @xpp.elementName.length
308
+ assert 1 == @xpp.elementQName.length
309
+ assert 1 == @xpp.elementNamespace.length
310
+ assert 1 == @xpp.elementPrefix.length
311
+
312
+ assert 2 == @xpp.attributeName.length
313
+ assert 2 == @xpp.attributeQName.length
314
+ assert 2 == @xpp.attributeNamespace.length
315
+ assert 2 == @xpp.attributePrefix.length
316
+ assert 2 == @xpp.attributeValue.length
317
+
318
+ assert 'start' == @xpp.elementName[0]
319
+ assert 'start' == @xpp.elementQName[0]
320
+ assert nil == @xpp.elementNamespace[0]
321
+ assert nil == @xpp.elementPrefix[0]
322
+
323
+ assert 'attr1' == @xpp.attributeName[0]
324
+ assert 'attr1' == @xpp.attributeQName[0]
325
+ assert nil == @xpp.attributeNamespace[0]
326
+ assert nil == @xpp.attributePrefix[0]
327
+ assert 'value1' == @xpp.attributeValue[0]
328
+
329
+ assert 'attr2' == @xpp.attributeName[1]
330
+ assert 'attr2' == @xpp.attributeQName[1]
331
+ assert nil == @xpp.attributeNamespace[1]
332
+ assert nil == @xpp.attributePrefix[1]
333
+ assert 'value2' == @xpp.attributeValue[1]
334
+ end
335
+
336
+ def testNSStartEnd000
337
+ @xpp.input = "<start></start>"
338
+
339
+ eventType = @xpp.nextEvent
340
+ assert @xpp.startElement?
341
+ eventType = @xpp.nextEvent
342
+ assert @xpp.endElement?
343
+ end
344
+
345
+ def testNSStartEnd001
346
+ @xpp.input = "<start ></start >"
347
+
348
+ eventType = @xpp.nextEvent
349
+ assert @xpp.startElement?
350
+ eventType = @xpp.nextEvent
351
+ assert @xpp.endElement?
352
+ end
353
+
354
+ def testAttributeEncoding
355
+ @xpp.input = "<start attr=' this&#x0d;&#x0a; also gets&#x20; normalized '/>"
356
+
357
+ eventType = @xpp.nextEvent
358
+ assert @xpp.startElement?
359
+
360
+ assert 1 == @xpp.attributeName.length
361
+ assert 1 == @xpp.attributeQName.length
362
+ assert 1 == @xpp.attributeNamespace.length
363
+ assert 1 == @xpp.attributePrefix.length
364
+ assert 1 == @xpp.attributeValue.length
365
+
366
+ assert 'attr' == @xpp.attributeName[0]
367
+ assert 'attr' == @xpp.attributeQName[0]
368
+ assert nil == @xpp.attributeNamespace[0]
369
+ assert nil == @xpp.attributePrefix[0]
370
+ assert " this\x0d\x0a also gets normalized " == @xpp.attributeValue[0]
371
+
372
+ eventType = @xpp.nextEvent
373
+ assert @xpp.endElement?
374
+ end
375
+
376
+ def testNSEmpty
377
+ @xpp.input = "<root><start/><start/><start><start/></start></root>"
378
+
379
+ eventType = @xpp.nextEvent
380
+ assert @xpp.startElement?
381
+
382
+ eventType = @xpp.nextEvent
383
+ assert @xpp.startElement?
384
+ eventType = @xpp.nextEvent
385
+ assert @xpp.endElement?
386
+
387
+ eventType = @xpp.nextEvent
388
+ assert @xpp.startElement?
389
+ eventType = @xpp.nextEvent
390
+ assert @xpp.endElement?
391
+
392
+ eventType = @xpp.nextEvent
393
+ assert @xpp.startElement?
394
+ eventType = @xpp.nextEvent
395
+ assert @xpp.startElement?
396
+ eventType = @xpp.nextEvent
397
+ assert @xpp.endElement?
398
+ eventType = @xpp.nextEvent
399
+ assert @xpp.endElement?
400
+
401
+ eventType = @xpp.nextEvent
402
+ assert @xpp.endElement?
403
+ end
404
+
405
+ def testNSSample
406
+ s = <<END
407
+ <feeds xmlns:auth='http://www.recursive.ca/portal/authorization'
408
+ xmlns='http://www.recursive.ca/feeds'>
409
+ <feed id='generation purpose only'
410
+ userContributionsAllowed='false'
411
+ name='this is not supposed to be used'
412
+ maxCount='15'
413
+ style='news'>
414
+ <auth:excludeRole id='member'/>
415
+ </feed>
416
+ </feeds>
417
+ END
418
+ @xpp.input = s
419
+ type = @xpp.nextEvent
420
+ while not @xpp.endDocument? do
421
+ if @xpp.startElement? then
422
+ elsif @xpp.endElement? then
423
+ end
424
+ type = @xpp.nextEvent
425
+ end
426
+ end
427
+
428
+ def testNSSample
429
+ s = <<END
430
+ <feeds
431
+ xmlns:auth='http://www.recursive.ca/portal/authorization'
432
+ xmlns='http://www.recursive.ca/feeds'
433
+ >
434
+ <feed
435
+ id='generation purpose only'
436
+ userContributionsAllowed='false'
437
+ name='this is not supposed to be used'
438
+ maxCount='15'
439
+ style='news'
440
+ >
441
+ <auth:excludeRole
442
+ id='member'
443
+ />
444
+ </feed
445
+ >
446
+ </feeds
447
+ >
448
+ END
449
+ @xpp.input = s
450
+ type = @xpp.nextEvent
451
+ while not @xpp.endDocument? do
452
+ if @xpp.startElement? then
453
+ elsif @xpp.endElement? then
454
+ end
455
+ type = @xpp.nextEvent
456
+ end
457
+ end
458
+
459
+ def testNSStartEndError000
460
+ @xpp.input = "<start></end>"
461
+ eventType = @xpp.nextEvent
462
+ assert @xpp.startElement?
463
+ assertRaises( RuntimeError ) {
464
+ eventType = @xpp.nextEvent
465
+ }
466
+ end
467
+
468
+ def testNSStartEndError001
469
+ @xpp.input = "<ns:start xmlns:ns='my-namespace'></start>"
470
+ eventType = @xpp.nextEvent
471
+ assert @xpp.startElement?
472
+ assertRaises( RuntimeError ) {
473
+ eventType = @xpp.nextEvent
474
+ }
475
+ end
476
+
477
+ def testNSStartEndError002
478
+ @xpp.input = "<ns:start\n \t xmlns:ns='my-namespace'></start>"
479
+ eventType = @xpp.nextEvent
480
+ assert @xpp.startElement?
481
+ assertRaises( RuntimeError ) {
482
+ eventType = @xpp.nextEvent
483
+ }
484
+ end
485
+
486
+ def testNSStartEndError003
487
+ #@xpp.input = '<ns:start\t \t xmlns:ns=\'my-namespace\'></start>'
488
+ @xpp.input = "<ns:start\n \t xmlns:ns=\"my-namespace\"></start>"
489
+ eventType = @xpp.nextEvent
490
+ assert @xpp.startElement?
491
+ assertRaises( RuntimeError ) {
492
+ eventType = @xpp.nextEvent
493
+ }
494
+ end
495
+
496
+ def testTextNextEvent000
497
+ @xpp.input = "text"
498
+ #@xpp.checkWellFormed = false
499
+ eventType = @xpp.nextEvent
500
+ assert @xpp.text?
501
+
502
+ @xpp.input = "<start>blah</start>"
503
+
504
+ eventType = @xpp.nextEvent
505
+ assert @xpp.startElement?
506
+
507
+ eventType = @xpp.nextEvent
508
+ assert @xpp.text?
509
+ assert 'blah' == @xpp.text
510
+
511
+ eventType = @xpp.nextEvent
512
+ assert @xpp.endElement?
513
+ end
514
+
515
+ def testTextNextEvent001
516
+ @xpp.input = "<start>bl&lt;ah</start>"
517
+
518
+ eventType = @xpp.nextEvent
519
+ assert @xpp.startElement?
520
+
521
+ eventType = @xpp.nextEvent
522
+ assert @xpp.text?
523
+ assert 'bl' == @xpp.text
524
+
525
+ eventType = @xpp.nextEvent
526
+ assert @xpp.entityRef?
527
+ assert '<' == @xpp.text
528
+
529
+ eventType = @xpp.nextEvent
530
+ assert @xpp.text?
531
+ assert 'ah' == @xpp.text
532
+
533
+ eventType = @xpp.nextEvent
534
+ assert @xpp.endElement?
535
+ end
536
+
537
+ def testTextNextEvent002
538
+ @xpp.input = "<start a1='v1'\na2='v2'>blah</start>"
539
+
540
+ eventType = @xpp.nextEvent
541
+ assert @xpp.startElement?
542
+
543
+ eventType = @xpp.nextEvent
544
+ assert @xpp.text?
545
+ assert 'blah' == @xpp.text
546
+
547
+ eventType = @xpp.nextEvent
548
+ assert @xpp.endElement?
549
+ end
550
+
551
+ def testTextNextEvent003
552
+ @xpp.input = "<start><![CDATA[blah]]></start>"
553
+
554
+ eventType = @xpp.nextEvent
555
+ assert @xpp.startElement?
556
+
557
+ eventType = @xpp.nextEvent
558
+ assert @xpp.cdata?
559
+ assert 'blah' == @xpp.text
560
+
561
+ eventType = @xpp.nextEvent
562
+ assert @xpp.endElement?
563
+
564
+ @xpp.input = "<start>aaaa<![CDATA[bbbb]]>cccc</start>"
565
+
566
+ eventType = @xpp.nextEvent
567
+ assert @xpp.startElement?
568
+
569
+ eventType = @xpp.nextEvent
570
+ assert @xpp.text?
571
+ assert 'aaaa' == @xpp.text
572
+
573
+ eventType = @xpp.nextEvent
574
+ assert @xpp.cdata?
575
+ assert 'bbbb' == @xpp.text
576
+
577
+ eventType = @xpp.nextEvent
578
+ assert @xpp.text?
579
+ assert 'cccc' == @xpp.text
580
+
581
+ eventType = @xpp.nextEvent
582
+ assert @xpp.endElement?
583
+
584
+
585
+ end
586
+
587
+
588
+ def testCdataSectionNextEvent
589
+ #@xpp.checkWellFormed = false
590
+ @xpp.input = "<![CDATA[blah]]>"
591
+ eventType = @xpp.nextEvent
592
+ assert @xpp.cdata?
593
+ assert 'blah' == @xpp.text
594
+ end
595
+
596
+ def testProcessingNextEvent
597
+ @xpp.input = "<?do something?>"
598
+ eventType = @xpp.nextEvent
599
+ assert @xpp.processingInstruction?
600
+ assert 'do something' == @xpp.text
601
+ end
602
+
603
+ def testCommentNextEvent
604
+ @xpp.input = "<!-- comment -->"
605
+ eventType = @xpp.nextEvent
606
+ assert @xpp.comment?
607
+ assert ' comment ' == @xpp.text
608
+ end
609
+
610
+ def testDoctype
611
+ @xpp.input = "<!DOCTYPE something 'else'>"
612
+ eventType = @xpp.nextEvent
613
+ assert @xpp.doctype?
614
+ assert " something 'else'" == @xpp.text
615
+
616
+ @xpp.input = '<!DOCTYPE something "else">'
617
+ eventType = @xpp.nextEvent
618
+ assert @xpp.doctype?
619
+ assert ' something "else"' == @xpp.text
620
+
621
+ @xpp.input = "<!DOCTYPE <something 'else'>>"
622
+ eventType = @xpp.nextEvent
623
+ assert @xpp.doctype?
624
+ assert " <something 'else'>" == @xpp.text
625
+
626
+ @xpp.input = "<!DOCTYPE something 'e<lse'>"
627
+ eventType = @xpp.nextEvent
628
+ assert @xpp.doctype?
629
+ assert " something 'e<lse'" == @xpp.text
630
+
631
+ @xpp.input = "<!DOCTYPE something 'e>lse'>"
632
+ eventType = @xpp.nextEvent
633
+ assert @xpp.doctype?
634
+ assert " something 'e>lse'" == @xpp.text
635
+
636
+ @xpp.input = "<!DOCTYPE <!-- quote ' in comment -->something else>"
637
+ eventType = @xpp.nextEvent
638
+ assert @xpp.doctype?
639
+ assert " <!-- quote ' in comment -->something else" == @xpp.text
640
+
641
+ @xpp.input = "<!DOCTYPE <!-- quote ' in comment --><!-- another ' -->something else>"
642
+ eventType = @xpp.nextEvent
643
+ assert @xpp.doctype?
644
+ assert " <!-- quote ' in comment --><!-- another ' -->something else" == @xpp.text
645
+
646
+ @xpp.input = File.new("TC_Parse000.data")
647
+ eventType = @xpp.nextEvent
648
+ assert @xpp.doctype?
649
+ assert "\n<!-- quote ' in comment -->\n<!-- another ' -->\nsomething\nelse\n" == @xpp.text
650
+ assert 6 == @xpp.line
651
+ assert 1 == @xpp.column
652
+
653
+ end
654
+
655
+ end