diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/test/rexml/test_pullparser.rb |
Fresh start
Diffstat (limited to 'jni/ruby/test/rexml/test_pullparser.rb')
-rw-r--r-- | jni/ruby/test/rexml/test_pullparser.rb | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/jni/ruby/test/rexml/test_pullparser.rb b/jni/ruby/test/rexml/test_pullparser.rb new file mode 100644 index 0000000..db336a1 --- /dev/null +++ b/jni/ruby/test/rexml/test_pullparser.rb @@ -0,0 +1,102 @@ +require "test/unit/testcase" + +require 'rexml/parsers/pullparser' + +module REXMLTests + class PullParserTester < Test::Unit::TestCase + include REXML + def test_basics + source = '<?xml version="1.0"?> + <!DOCTYPE blah> + <a>foo <<b attribute="value">bar</b> nooo</a>' + parser = REXML::Parsers::PullParser.new(source) + res = { :text=>0 } + until parser.empty? + results = parser.pull + res[ :xmldecl ] = true if results.xmldecl? + res[ :doctype ] = true if results.doctype? + res[ :a ] = true if results.start_element? and results[0] == 'a' + if results.start_element? and results[0] == 'b' + res[ :b ] = true + assert_equal 'value', results[1]['attribute'] + end + res[ :text ] += 1 if results.text? + end + [ :xmldecl, :doctype, :a, :b ].each { |tag| + assert res[tag] , "#{tag} wasn't processed" + } + assert_equal 4, res[ :text ] + rescue ParseException + puts $! + end + + def test_bad_document + source = "<a><b></a>" + parser = REXML::Parsers::PullParser.new(source) + assert_raise(ParseException, "Parsing should have failed") { + parser.pull while parser.has_next? + } + end + + def test_entity_replacement + source = '<!DOCTYPE foo [ + <!ENTITY la "1234"> + <!ENTITY lala "--&la;--"> + <!ENTITY lalal "&la;&la;"> + ]><a><la>&la;</la><lala>&lala;</lala></a>' + pp = REXML::Parsers::PullParser.new( source ) + el_name = '' + while pp.has_next? + event = pp.pull + case event.event_type + when :start_element + el_name = event[0] + when :text + case el_name + when 'la' + assert_equal('1234', event[1]) + when 'lala' + assert_equal('--1234--', event[1]) + end + end + end + end + + def test_peek_unshift + source = "<a><b/></a>" + REXML::Parsers::PullParser.new(source) + # FINISH ME! + end + + def test_inspect + xml = '<a id="1"><b id="2">Hey</b></a>' + parser = Parsers::PullParser.new( xml ) + while parser.has_next? + pull_event = parser.pull + if pull_event.start_element? + peek = parser.peek() + peek.inspect + end + end + end + + def test_peek + xml = '<a id="1"><b id="2">Hey</b></a>' + parser = Parsers::PullParser.new( xml ) + names = %w{ a b } + while parser.has_next? + pull_event = parser.pull + if pull_event.start_element? + assert_equal( :start_element, pull_event.event_type ) + assert_equal( names.shift, pull_event[0] ) + if names[0] == 'b' + peek = parser.peek() + assert_equal( :start_element, peek.event_type ) + assert_equal( names[0], peek[0] ) + end + end + end + assert_equal( 0, names.length ) + end + end +end |