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_listener.rb |
Fresh start
Diffstat (limited to 'jni/ruby/test/rexml/test_listener.rb')
-rw-r--r-- | jni/ruby/test/rexml/test_listener.rb | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/jni/ruby/test/rexml/test_listener.rb b/jni/ruby/test/rexml/test_listener.rb new file mode 100644 index 0000000..309e827 --- /dev/null +++ b/jni/ruby/test/rexml/test_listener.rb @@ -0,0 +1,130 @@ +# coding: binary + +require_relative 'rexml_test_utils' + +require 'rexml/document' +require 'rexml/streamlistener' + +module REXMLTests + class BaseTester < Test::Unit::TestCase + include REXMLTestUtils + def test_empty + return unless defined? @listener + # Empty. + t1 = %Q{<string></string>} + assert_equal( "", @listener.parse( t1 ), + "Empty" ) + end + + def test_space + return unless defined? @listener + # Space. + t2 = %Q{<string> </string>} + assert_equal( " ", @listener.parse( t2 ), + "Space" ) + end + + def test_whitespace + return unless defined? @listener + # Whitespaces. + t3 = %Q{<string>RE\n \t \n \t XML</string>} + assert_equal( "RE\n \t \n \t XML", @listener.parse( t3 ), + "Whitespaces" ) + end + + def test_leading_trailing_whitespace + return unless defined? @listener + # Leading and trailing whitespaces. + t4 = %Q{<string> REXML </string>} + assert_equal( " REXML ", @listener.parse( t4 ), + "Leading and trailing whitespaces" ) + end + + def test_entity_reference + return unless defined? @listener + # Entity reference. + t5 = %Q{<string><>&lt;&gt;</string>} + assert_equal( "<><>", @listener.parse( t5 ), + "Entity reference" ) + end + + def test_character_reference + return unless defined? @listener + # Character reference. + t6 = %Q{<string>
</string>} + assert_equal( "\r", @listener.parse( t6 ), + "Character reference." ) + end + + def test_cr + return unless defined? @listener + # CR. + t7 = %Q{<string> \r\n \r \n </string>} + assert_equal( " \n \n \n ".unpack("C*").inspect, + @listener.parse( t7 ).unpack("C*").inspect, "CR" ) + end + + # The accent bug, and the code that exhibits the bug, was contributed by + # Guilhem Vellut + class AccentListener + def tag_start(name,attributes) + #p name + #p attributes + end + def tag_end(name) + #p "/"+name + end + def xmldecl(a,b,c) + #puts "#{a} #{b} #{c}" + end + def text(tx) + #p tx + end + end + + def test_accents + source = %[<?xml version="1.0" encoding="ISO-8859-1"?> +<g> +<f a="\xE9" /> +</g>] + doc = REXML::Document.new( source ) + a = doc.elements['/g/f'].attribute('a') + if a.value.respond_to? :force_encoding + a.value.force_encoding('binary') + end + assert_equal( "\xC3\xA9", a.value) + doc = File::open(fixture_path("stream_accents.xml")) do |f| + REXML::Document.parse_stream(f, AccentListener::new) + end + end + end + + class MyREXMLListener + include REXML::StreamListener + + def initialize + @text = nil + end + + def parse( stringOrReadable ) + @text = "" + REXML::Document.parse_stream( stringOrReadable, self ) + @text + end + + def text( text ) + @text << text + end + end + + class REXMLTester < BaseTester + def setup + @listener = MyREXMLListener.new + end + + def test_character_reference_2 + t6 = %Q{<string>
</string>} + assert_equal( t6.strip, REXML::Document.new(t6).to_s ) + end + end +end |