1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #!/usr/bin/env ruby
- #--
- # Portions copyright 2004 by Jim Weirich (jim@weirichhouse.org).
- # Portions copyright 2005 by Sam Ruby (rubys@intertwingly.net).
- # All rights reserved.
- # Permission is granted for use, copying, modification, distribution,
- # and distribution of modified versions of this work as long as the
- # above copyright notice is included.
- #++
- #!/usr/bin/env ruby
- require 'test/unit'
- require 'builder/xchar'
- if String.method_defined?(:encode)
- class String
- ENCODING_BINARY = Encoding.find('BINARY')
- # shim method for testing purposes
- def to_xs(escape=true)
- raise NameError.new('to_xs') unless caller[0].index(__FILE__)
- result = Builder::XChar.encode(self)
- if escape
- result.gsub(/[^\u0000-\u007F]/) {|c| "&##{c.ord};"}
- else
- # really only useful for testing purposes
- result.force_encoding(ENCODING_BINARY)
- end
- end
- end
- end
- class TestXmlEscaping < Test::Unit::TestCase
- REPLACEMENT_CHAR = Builder::XChar::REPLACEMENT_CHAR.to_xs
- def test_ascii
- assert_equal 'abc', 'abc'.to_xs
- end
- def test_predefined
- assert_equal '&', '&'.to_xs # ampersand
- assert_equal '<', '<'.to_xs # left angle bracket
- assert_equal '>', '>'.to_xs # right angle bracket
- end
- def test_invalid
- assert_equal REPLACEMENT_CHAR, "\x00".to_xs # null
- assert_equal REPLACEMENT_CHAR, "\x0C".to_xs # form feed
- assert_equal REPLACEMENT_CHAR, "\xEF\xBF\xBF".to_xs # U+FFFF
- end
- def test_iso_8859_1
- assert_equal 'ç', "\xE7".to_xs # small c cedilla
- assert_equal '©', "\xA9".to_xs # copyright symbol
- end
- def test_win_1252
- assert_equal '’', "\x92".to_xs # smart quote
- assert_equal '€', "\x80".to_xs # euro
- end
- def test_utf8
- assert_equal '’', "\xE2\x80\x99".to_xs # right single quote
- assert_equal '©', "\xC2\xA9".to_xs # copy
- end
-
- def test_utf8_verbatim
- assert_equal "\xE2\x80\x99", "\xE2\x80\x99".to_xs(false) # right single quote
- assert_equal "\xC2\xA9", "\xC2\xA9".to_xs(false) # copy
- assert_equal "\xC2\xA9&\xC2\xA9",
- "\xC2\xA9&\xC2\xA9".to_xs(false) # copy with ampersand
- end
- end
|