8000 #214 Introduce `reset` option to PullParser · ruby/rexml@926afc7 · GitHub
[go: up one dir, main page]

Skip to content

Commit 926afc7

Browse files
author
Dmitry Pogrebnoy
committed
#214 Introduce reset option to PullParser
1 parent 519ae6c commit 926afc7

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

lib/rexml/parsers/baseparser.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,10 @@ def add_listener( listener )
181181

182182
def stream=( source )
183183
@source = SourceFactory.create_from( source )
184+
reset
185+
end
186+
187+
def reset
184188
@closed = nil
185189
@have_root = false
186190
@document_status = nil

lib/rexml/parsers/pullparser.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ def pull
9393
def unshift token
9494
@my_stack.unshift token
9595
end
96+
97+
def reset
98+
@parser.reset
99+
end
96100
end
97101

98102
# A parsing event. The contents of the event are accessed as an +Array?,

test/test_pullparser.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,39 @@ def test_peek
156156
assert_equal( 0, names.length )
157157
end
158158

159+
def test_reset
160+
xml_chunks = [
161+
"<message>First valid and complete message</message>",
162+
"<message>Second valid and complete message</message>",
163+
"<message>Third valid and complete message</message>"
164+
]
165+
166+
messages = []
167+
168+
IO.pipe do |reader, writer|
169+
xml_chunks.each do |chunk|
170+
writer.write(chunk)
171+
end
172+
writer.close
173+
174+
parser = REXML::Parsers::PullParser.new(reader)
175+
while parser.has_next?
176+
parser.pull
177+
message_text = parser.pull
178+
messages << message_text[0]
179+
parser.pull
180+
parser.reset
181+
end
182+
end
183+
184+
assert_equal(
185+
messages,
186+
["First valid and complete message",
187+
"Second valid and complete message",
188+
"Third valid and complete message"]
189+
)
190+
end
191+
159192
class EntityExpansionLimitTest < Test::Unit::TestCase
160193
class GeneralEntityTest < self
161194
def test_have_value

0 commit comments

Comments
 (0)
0