summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/iconv/test_basic.rb49
-rw-r--r--test/iconv/test_option.rb31
-rw-r--r--test/iconv/test_partial.rb41
-rw-r--r--test/iconv/test_simple.rb27
-rw-r--r--test/iconv/utils.rb22
5 files changed, 143 insertions, 27 deletions
diff --git a/test/iconv/test_basic.rb b/test/iconv/test_basic.rb
new file mode 100644
index 00000000000..79a6bad95bc
--- /dev/null
+++ b/test/iconv/test_basic.rb
@@ -0,0 +1,49 @@
+require File.join(File.dirname(__FILE__), "utils.rb")
+
+class TestIconv
+ def test_euc2sjis
+ iconv = Iconv.open('SHIFT_JIS', 'EUC-JP')
+ str = iconv.iconv(EUCJ_STR)
+ str << iconv.iconv(nil)
+ assert_equal(SJIS_STR, str)
+ iconv.close
+ end
+
+ def test_close
+ iconv = Iconv.new('Shift_JIS', 'EUC-JP')
+ output = ""
+ begin
+ output += iconv.iconv(EUCJ_STR)
+ output += iconv.iconv(nil)
+ ensure
+ assert_respond_to(iconv, :close)
+ assert_equal("", iconv.close)
+ assert_equal(SJIS_STR, output)
+ end
+ end
+
+ def test_open_without_block
+ assert_respond_to(Iconv, :open)
+ iconv = Iconv.open('SHIFT_JIS', 'EUC-JP')
+ str = iconv.iconv(EUCJ_STR)
+ str << iconv.iconv(nil)
+ assert_equal(SJIS_STR, str )
+ iconv.close
+ end
+
+ def test_open_with_block
+ input = "#{EUCJ_STR}\n"*2
+ output = ""
+ Iconv.open("Shift_JIS", "EUC-JP") do |cd|
+ input.each_line do |s|
+ output << cd.iconv(s)
+ end
+ output << cd.iconv(nil)
+ end
+ assert_equal("#{SJIS_STR}\n"*2, output)
+ end
+
+ def test_unknown_encoding
+ assert_raise(Iconv::InvalidEncoding) { Iconv.iconv("utf-8", "X-UKNOWN", "heh") }
+ end
+end
diff --git a/test/iconv/test_option.rb b/test/iconv/test_option.rb
new file mode 100644
index 00000000000..20c7219df3f
--- /dev/null
+++ b/test/iconv/test_option.rb
@@ -0,0 +1,31 @@
+require File.join(File.dirname(__FILE__), "utils.rb")
+
+class TestIconv
+ def test_ignore_option
+ iconv = Iconv.new('SHIFT_JIS', 'EUC-JP//ignore')
+ str = iconv.iconv(EUCJ_STR)
+ str << iconv.iconv(nil)
+ assert_equal(SJIS_STR, str)
+ iconv.close
+
+ iconv = Iconv.new('SHIFT_JIS//IGNORE', 'EUC-JP//ignore')
+ str = iconv.iconv(EUCJ_STR)
+ str << iconv.iconv(nil)
+ assert_equal(SJIS_STR, str)
+ iconv.close
+ end
+
+ def test_translit_option
+ iconv = Iconv.new('SHIFT_JIS', 'EUC-JP//ignore')
+ str = iconv.iconv(EUCJ_STR)
+ str << iconv.iconv(nil)
+ assert_equal(SJIS_STR, str)
+ iconv.close
+
+ iconv = Iconv.new('SHIFT_JIS//TRANSLIT', 'EUC-JP//translit//ignore')
+ str = iconv.iconv(EUCJ_STR)
+ str << iconv.iconv(nil)
+ assert_equal(SJIS_STR, str)
+ iconv.close
+ end
+end if defined?(::Iconv)
diff --git a/test/iconv/test_partial.rb b/test/iconv/test_partial.rb
new file mode 100644
index 00000000000..fb31c9e3e81
--- /dev/null
+++ b/test/iconv/test_partial.rb
@@ -0,0 +1,41 @@
+require File.join(File.dirname(__FILE__), "utils.rb")
+
+class TestIconv
+ def test_partial_ascii
+ c = Iconv.open(ASCII, ASCII)
+ ref = '[ruby-core:17092]'
+ rescue
+ return
+ else
+ assert_equal("abc", c.iconv("abc"))
+ assert_equal("c", c.iconv("abc", 2), "#{ref}: with start")
+ assert_equal("c", c.iconv("abc", 2, 1), "#{ref}: with start, length")
+ assert_equal("c", c.iconv("abc", 2, 5), "#{ref}: with start, longer length")
+ assert_equal("bc", c.iconv("abc", -2), "#{ref}: with nagative start")
+ assert_equal("b", c.iconv("abc", -2, 1), "#{ref}: with nagative start, length")
+ assert_equal("bc", c.iconv("abc", -2, 5), "#{ref}: with nagative start, longer length")
+ assert_equal("", c.iconv("abc", 5), "#{ref}: with OOB")
+ assert_equal("", c.iconv("abc", 5, 2), "#{ref}: with OOB, length")
+ ensure
+ c.close if c
+ end
+
+ def test_partial_euc2sjis
+ c = Iconv.open('SHIFT_JIS', 'EUC-JP')
+ rescue
+ return
+ else
+ assert_equal(SJIS_STR[0, 2], c.iconv(EUCJ_STR, 0, 2))
+ assert_equal(SJIS_STR, c.iconv(EUCJ_STR, 0, 20))
+ assert_equal(SJIS_STR[2..-1], c.iconv(EUCJ_STR, 2))
+ assert_equal(SJIS_STR[2, 2], c.iconv(EUCJ_STR, 2, 2))
+ assert_equal(SJIS_STR[2..-1], c.iconv(EUCJ_STR, 2, 20))
+ assert_equal(SJIS_STR[-4..-1], c.iconv(EUCJ_STR, -4))
+ assert_equal(SJIS_STR[-4, 2], c.iconv(EUCJ_STR, -4, 2))
+ assert_equal(SJIS_STR[-4..-1], c.iconv(EUCJ_STR, -4, 20))
+ assert_equal("", c.iconv(EUCJ_STR, 20))
+ assert_equal("", c.iconv(EUCJ_STR, 20, 2))
+ ensure
+ c.close
+ end
+end if defined?(::Iconv)
diff --git a/test/iconv/test_simple.rb b/test/iconv/test_simple.rb
deleted file mode 100644
index e449b27542d..00000000000
--- a/test/iconv/test_simple.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require 'test/unit'
-begin
- require 'iconv'
-rescue LoadError
-end
-
-class TestIConv < Test::Unit::TestCase
- ASCII = "ascii"
- def test_simple
- c = Iconv.open(ASCII, ASCII)
- ref = '[ruby-core:17092]'
- rescue
- return
- else
- assert_equal("abc", c.iconv("abc"))
- assert_equal("c", c.iconv("abc", 2), "#{ref}: with start")
- assert_equal("c", c.iconv("abc", 2, 1), "#{ref}: with start, length")
- assert_equal("c", c.iconv("abc", 2, 5), "#{ref}: with start, longer length")
- assert_equal("bc", c.iconv("abc", -2), "#{ref}: with nagative start")
- assert_equal("b", c.iconv("abc", -2, 1), "#{ref}: with nagative start, length")
- assert_equal("bc", c.iconv("abc", -2, 5), "#{ref}: with nagative start, longer length")
- assert_equal("", c.iconv("abc", 5), "#{ref}: with OOB")
- assert_equal("", c.iconv("abc", 5, 2), "#{ref}: with OOB, length")
- ensure
- c.close if c
- end
-end if defined?(::Iconv)
diff --git a/test/iconv/utils.rb b/test/iconv/utils.rb
new file mode 100644
index 00000000000..032ac28ea4d
--- /dev/null
+++ b/test/iconv/utils.rb
@@ -0,0 +1,22 @@
+begin
+ require 'iconv'
+rescue LoadError
+else
+ require 'test/unit'
+end
+
+class TestIconv < Test::Unit::TestCase
+ if defined?(::Encoding) and String.method_defined?(:force_encoding)
+ def self.encode(str, enc)
+ str.force_encoding(enc)
+ end
+ else
+ def self.encode(str, enc)
+ str
+ end
+ end
+
+ ASCII = "ascii"
+ EUCJ_STR = encode("\xa4\xa2\xa4\xa4\xa4\xa6\xa4\xa8\xa4\xaa", "EUC-JP").freeze
+ SJIS_STR = encode("\x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8", "Shift_JIS").freeze
+end if defined?(::Iconv)