From ac9a8ac62416cfc7c6faf059651b7945cb5e3bf6 Mon Sep 17 00:00:00 2001 From: kou Date: Sat, 3 Nov 2012 05:42:40 +0000 Subject: * lib/rexml/output.rb (REXML::Output): Don't output BOM in middle of the output string. * test/rexml/test_document.rb: Add a test for the above change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ lib/rexml/output.rb | 5 +++++ test/rexml/test_document.rb | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/ChangeLog b/ChangeLog index e76149b8bf..0f66fc929c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sat Nov 3 14:41:17 2012 Kouhei Sutou + + * lib/rexml/output.rb (REXML::Output): Don't output BOM in middle + of the output string. + * test/rexml/test_document.rb: Add a test for the above change. + Sat Nov 3 14:09:55 2012 Kouhei Sutou * NEWS: Add an item about REXML::Document#write. diff --git a/lib/rexml/output.rb b/lib/rexml/output.rb index 50333ba177..208bb0ade1 100644 --- a/lib/rexml/output.rb +++ b/lib/rexml/output.rb @@ -11,6 +11,11 @@ module REXML self.encoding = encd @to_utf = encd != 'UTF-8' + + if encoding == "UTF-16" + @output << "\ufeff".encode("UTF-16BE") + self.encoding = "UTF-16BE" + end end def <<( content ) diff --git a/test/rexml/test_document.rb b/test/rexml/test_document.rb index 0e154db20f..3ef584c290 100644 --- a/test/rexml/test_document.rb +++ b/test/rexml/test_document.rb @@ -296,5 +296,24 @@ EOX assert_equal("UTF-16", document.encoding) end end + + class WriteTest < self + def test_utf_16 + xml = <<-EOX.encode("UTF-16LE").force_encoding("ASCII-8BIT") + +Hello world! +EOX + bom = "\ufeff".encode("UTF-16LE").force_encoding("ASCII-8BIT") + document = REXML::Document.new(bom + xml) + + actual_xml = "" + document.write(actual_xml) + expected_xml = <<-EOX.encode("UTF-16BE") +\ufeff +Hello world! +EOX + assert_equal(expected_xml, actual_xml) + end + end end end -- cgit v1.2.3