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_stream.rb |
Fresh start
Diffstat (limited to 'jni/ruby/test/rexml/test_stream.rb')
-rw-r--r-- | jni/ruby/test/rexml/test_stream.rb | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/jni/ruby/test/rexml/test_stream.rb b/jni/ruby/test/rexml/test_stream.rb new file mode 100644 index 0000000..3164d91 --- /dev/null +++ b/jni/ruby/test/rexml/test_stream.rb @@ -0,0 +1,129 @@ +require "test/unit/testcase" +require "rexml/document" +require 'rexml/streamlistener' +require 'stringio' + +module REXMLTests + class MyListener + include REXML::StreamListener + end + + + class StreamTester < Test::Unit::TestCase + # Submitted by Han Holl + def test_listener + data = %Q{<session1 user="han" password="rootWeiler" />\n<session2 user="han" password="rootWeiler" />} + + b = RequestReader.new( data ) + b = RequestReader.new( data ) + end + + def test_ticket_49 + source = StringIO.new( <<-EOL ) + <!DOCTYPE foo [ + <!ENTITY ent "replace"> + ]> + <a>&ent;</a> + EOL + REXML::Document.parse_stream(source, MyListener.new) + end + + def test_ticket_10 + source = StringIO.new( <<-EOL ) + <!DOCTYPE foo [ + <!ENTITY ent "replace"> + <!ATTLIST a + xmlns:human CDATA #FIXED "http://www.foo.com/human"> + <!ELEMENT bar (#PCDATA)> + <!NOTATION n1 PUBLIC "-//HM//NOTATION TEST1//EN" 'urn:x-henrikmartensson.org:test5'> + ]> + <a/> + EOL + listener = MyListener.new + class << listener + attr_accessor :events + def entitydecl( content ) + @events[ :entitydecl ] = true + end + def attlistdecl( element_name, attributes, raw_content ) + @events[ :attlistdecl ] = true + end + def elementdecl( content ) + @events[ :elementdecl ] = true + end + def notationdecl( content ) + @events[ :notationdecl ] = true + end + end + listener.events = {} + + REXML::Document.parse_stream( source, listener ) + + assert( listener.events[:entitydecl] ) + assert( listener.events[:attlistdecl] ) + assert( listener.events[:elementdecl] ) + assert( listener.events[:notationdecl] ) + end + + def test_entity + listener = MyListener.new + class << listener + attr_accessor :entities + def entity(content) + @entities << content + end + end + listener.entities = [] + + source = StringIO.new(<<-XML) +<!DOCTYPE root [ +<!ENTITY % ISOLat2 + SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" > +%ISOLat2; +]> +<root/> + XML + REXML::Document.parse_stream(source, listener) + + assert_equal(["ISOLat2"], listener.entities) + end + end + + + # For test_listener + class RequestReader + attr_reader :doc + def initialize(io) + @stack = [] + @doc = nil + catch(:fini) do + REXML::Document.parse_stream(io, self) + raise IOError + end + end + def tag_start(name, args) + if @doc + @stack.push(REXML::Element.new(name, @stack.last)) + else + @doc = REXML::Document.new("<#{name}/>") + @stack.push(@doc.root) + end + args.each do |attr,val| + @stack.last.add_attribute(attr, val) + end + end + def tag_end(name, *args) + @stack.pop + throw(:fini) if @stack.empty? + end + def text(str) + @stack.last.text = str + end + def comment(str) + end + def doctype( name, pub_sys, long_name, uri ) + end + def doctype_end + end + end +end |