summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-03 05:42:40 +0000
committerkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-03 05:42:40 +0000
commitac9a8ac62416cfc7c6faf059651b7945cb5e3bf6 (patch)
tree3418221eaae6f263b7698ba87aeeee08aae51540
parent15a743b3ff393092f19fb8e57bd79675dd208b02 (diff)
* 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
-rw-r--r--ChangeLog6
-rw-r--r--lib/rexml/output.rb5
-rw-r--r--test/rexml/test_document.rb19
3 files changed, 30 insertions, 0 deletions
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 <kou@cozmixng.org>
+
+ * 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 <kou@cozmixng.org>
* 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")
+<?xml version="1.0"?>
+<message>Hello world!</message>
+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<?xml version='1.0' encoding='UTF-16'?>
+<message>Hello world!</message>
+EOX
+ assert_equal(expected_xml, actual_xml)
+ end
+ end
end
end