summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-07 03:13:29 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-07 03:13:29 +0000
commit020e681eece7359f1cfcda9871b600084507dbb1 (patch)
tree7235e608341c13a79b9518f009f48d2e68d509cc /test
parent120772041e7addfc574e3b045cb4fc6a3517f4f4 (diff)
* include/ruby/encoding.h (ECONV_XML_ATTR_CONTENT_ENCODER): defined.
(ECONV_STATEFUL_ENCODER_MASK): defined. (ECONV_XML_ATTR_QUOTE_ENCODER): defined. (ECONV_XML_ATTR_ENCODER): removed. * enc/trans/escape.trans (rb_escape_xml_attr_content): defined. (rb_escape_xml_attr_quote): defined. (rb_escape_xml_attr): removed. * io.c (NEED_WRITECONV): writeconv is required if supplemental converter is used. (make_writeconv): apply stateful encoder in writeconv. * transcode.c: follow the constant change. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19209 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_econv.rb36
-rw-r--r--test/ruby/test_io_m17n.rb13
2 files changed, 40 insertions, 9 deletions
diff --git a/test/ruby/test_econv.rb b/test/ruby/test_econv.rb
index 5c9fc143b1..ef87fff4cc 100644
--- a/test/ruby/test_econv.rb
+++ b/test/ruby/test_econv.rb
@@ -738,20 +738,37 @@ class TestEncodingConverter < Test::Unit::TestCase
assert_equal('', ec.finish)
end
- def test_xml_escape_attr
- ec = Encoding::Converter.new("", "xml-attr-escaped")
+ def test_xml_escape_attr_content
+ ec = Encoding::Converter.new("", "xml-attr-content-escaped")
+ assert_equal('', ec.finish)
+
+ ec = Encoding::Converter.new("", "xml-attr-content-escaped")
+ assert_equal('', ec.convert(""))
+ assert_equal('', ec.finish)
+
+ ec = Encoding::Converter.new("", "xml-attr-content-escaped")
+ assert_equal('&quot;', ec.convert('"'))
+ assert_equal('', ec.finish)
+
+ ec = Encoding::Converter.new("", "xml-attr-content-escaped")
+ assert_equal('&amp;&lt;&gt;&quot;', ec.convert("&<>\""))
+ assert_equal('', ec.finish)
+ end
+
+ def test_xml_escape_attr_quote
+ ec = Encoding::Converter.new("", "xml-attr-quoted")
assert_equal('""', ec.finish)
- ec = Encoding::Converter.new("", "xml-attr-escaped")
+ ec = Encoding::Converter.new("", "xml-attr-quoted")
assert_equal('', ec.convert(""))
assert_equal('""', ec.finish)
- ec = Encoding::Converter.new("", "xml-attr-escaped")
- assert_equal('"&quot;', ec.convert('"'))
+ ec = Encoding::Converter.new("", "xml-attr-quoted")
+ assert_equal('""', ec.convert('"'))
assert_equal('"', ec.finish)
- ec = Encoding::Converter.new("", "xml-attr-escaped")
- assert_equal('"&amp;&lt;&gt;&quot;', ec.convert("&<>\""))
+ ec = Encoding::Converter.new("", "xml-attr-quoted")
+ assert_equal('"&<>"', ec.convert("&<>\""))
assert_equal('"', ec.finish)
end
@@ -760,7 +777,10 @@ class TestEncodingConverter < Test::Unit::TestCase
assert_equal('&lt;&#x2665;&gt;&amp;"&#x2661;"', ec.convert("<\u2665>&\"\u2661\""))
assert_equal('', ec.finish)
- ec = Encoding::Converter.new("utf-8", "euc-jp", Encoding::Converter::XML_ATTR_ENCODER|Encoding::Converter::UNDEF_HEX_CHARREF)
+ ec = Encoding::Converter.new("utf-8", "euc-jp",
+ Encoding::Converter::XML_ATTR_CONTENT_ENCODER|
+ Encoding::Converter::XML_ATTR_QUOTE_ENCODER|
+ Encoding::Converter::UNDEF_HEX_CHARREF)
assert_equal('"&lt;&#x2665;&gt;&amp;&quot;&#x2661;&quot;', ec.convert("<\u2665>&\"\u2661\""))
assert_equal('"', ec.finish)
diff --git a/test/ruby/test_io_m17n.rb b/test/ruby/test_io_m17n.rb
index 9d999be59e..57943df25f 100644
--- a/test/ruby/test_io_m17n.rb
+++ b/test/ruby/test_io_m17n.rb
@@ -1461,6 +1461,18 @@ EOT
def test_w_xml_attr
with_tmpdir {
+ open("raw.txt", "wb", xml: :attr) {|f| f.print '&<>"\''; f.puts "\u4E02\u3042" }
+ content = File.read("raw.txt", :mode=>"rb:ascii-8bit")
+ assert_equal("\"&amp;&lt;&gt;&quot;'\u4E02\u3042\n\"".force_encoding("ascii-8bit"), content)
+
+ open("ascii.txt", "wb:us-ascii", xml: :attr) {|f| f.print '&<>"\''; f.puts "\u4E02\u3042" }
+ content = File.read("ascii.txt", :mode=>"rb:ascii-8bit")
+ assert_equal("\"&amp;&lt;&gt;&quot;'&#x4E02;&#x3042;\n\"".force_encoding("ascii-8bit"), content)
+
+ open("iso-2022-jp.txt", "wb:iso-2022-jp", xml: :attr) {|f| f.print '&<>"\''; f.puts "\u4E02\u3042" }
+ content = File.read("iso-2022-jp.txt", :mode=>"rb:ascii-8bit")
+ assert_equal("\"&amp;&lt;&gt;&quot;'&#x4E02;\e$B$\"\e(B\n\"".force_encoding("ascii-8bit"), content)
+
open("eucjp.txt", "w:euc-jp:utf-8", xml: :attr) {|f|
f.print "\u4E02" # U+4E02 is 0x3021 in JIS X 0212
}
@@ -1480,6 +1492,5 @@ EOT
assert_equal("\"&#x4E02;\"".force_encoding("ascii-8bit"), content)
}
end
-
end