test_encoding_2.rb   [plain text]


require "test/unit/testcase"

require "rexml/document"
require "rexml/parseexception"

=begin
# THIS DOESN'T WORK
begin
  require 'iconv'

  UnixCharsets = open("| iconv -l") do |f|
     f.readlines[5..-1].collect { |x| x.sub(/\/\/\n/,"").delete(' ') }
  end

  DATA = <<END
<?xml version="1.0" encoding='ENC'?>
<Ruby xmlns="http://www.ruby-lang.org/ruby/1.8">
</Ruby>
END


  class IConvTester < Test::Unit::TestCase

    def test_iconv
      broken_encodings = 0
      UnixCharsets.each do |enc|
        begin
          puts "Testing encoding #{enc}"
          data = DATA.dup
          data[/ENC/] = enc
          REXML::Document.new(data).root
        rescue REXML::ParseException => e
          broken_encodings += 1
          fail "Encoding #{enc} does not work with REXML: #{e.message}"
        rescue Errno::EINVAL => e
          broken_encodings += 1
          fail "Encoding #{enc} does not work with REXML: #{e.message}"
        rescue ArgumentError => e
          broken_encodings += 1
          fail "Encoding #{enc} does not work with REXML: #{e.message}"
        rescue
          broken_encodings += 1
          fail "Encoding #{enc} does not work with REXML: #{$!.message}"
        end
      end

      if broken_encodings > 0
        fail "There were #{broken_encodings} encoding failures out of #{UnixCharsets.size} plus some REXML internal encodings"
      else
        fail "There were no encoding failures"
      end

      puts "Full list of registered encodings in REXML:"
      puts REXML::Encoding::ENCODING_CLAIMS.values.join(', ')
    end
  end
rescue LoadError
end
=end