summaryrefslogtreecommitdiff
path: root/jni/ruby/test/rexml/test_stream.rb
diff options
context:
space:
mode:
authorJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-16 18:49:26 +0900
committerJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-30 00:39:06 +0900
commitfcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch)
tree64cb17de3f41a2b6fef2368028fbd00349946994 /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.rb129
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