From: Yusuke ENDOH Date: 2008-07-25T00:39:29+09:00 Subject: [ruby-dev:35649] PENDINGS.rb (Was: Re: [Ruby 1.9 - Bug #354] (Assigned) Test failure test/ruby/test_transcode.rb) 遠藤です。 2008/07/24 0:44 Yui NARUSE : > 以上のような理由のため、修正は transcode の仕様の確定待ちとなるため、 > 「当面の間修正されない既知のバグ」というのが現在のステータスになります。 > # なので、そのような趣旨の別ファイルにテストを移動したい 賛成です。直る予定のないテストを make test-all に放置しておくのは、 - テスト結果の視認性が悪くなり、リグレッションテストがしにくくなる - 「テストは多少失敗しててもいい」というダメな認識が広まってしまう - 事情を知らない人にはビルドの失敗などと区別がつかない の 3 点から、よくないと思います。 そのような状態だと思われるテストは、以下の 3 点です。 - test_getc_stateful_conversion(TestIO_M17N) - test_terminator_stateful_conversion(TestIO_M17N) - stateful encoding は当分サポートされない - test_iso_2022_jp(TestTranscode) - EUC の補助漢字は当分サポートされない これらは test/ruby/PENDINGS.rb に移し、make test-all (や make check) では実行しないようにしたいと思います。 (ただし、何でもかんでも PENDINGS.rb に入れたらダメです。重要。) どんなもんでしょうか。 以下のパッチでは、make test-all-including-pendings で PENDINGS.rb も 含めたテストを走らせるようにしてみました。 Index: common.mk =================================================================== --- common.mk (revision 18196) +++ common.mk (working copy) @@ -368,6 +368,9 @@ test-all: $(RUNRUBY) "$(srcdir)/test/runner.rb" --basedir="$(TESTSDIR)" --runner=$(TESTUI) $(TESTS) +test-all-including-pendings: + $(RUNRUBY) "$(srcdir)/test/runner.rb" --basedir="$(TESTSDIR)" --runner=$(TESTUI) --pattern=PENDINGS.rb $(TESTS) + extconf: $(PREP) $(MINIRUBY) -run -e mkdir -- -p "$(EXTCONFDIR)" $(RUNRUBY) -C "$(EXTCONFDIR)" $(EXTCONF) $(EXTCONFARGS) Index: test/ruby/test_transcode.rb =================================================================== --- test/ruby/test_transcode.rb (revision 18196) +++ test/ruby/test_transcode.rb (working copy) @@ -259,13 +259,11 @@ assert_raise(RuntimeError) { "\x1b$(A".encode("utf-8", "iso-2022-jp") } assert_equal("\uff71\uff72\uff73\uff74\uff75", "\x1b(I12345\x1b(B".force_encoding("iso-2022-jp").encode("utf-8")) # JIS X 0201 ァィゥェォ - assert_equal("\u9299", "\x1b$(Dd!\x1b(B".encode("utf-8", "iso-2022-jp")) # JIS X 0212 区68 点01 ? assert_raise(RuntimeError) { "\x1b$C".encode("utf-8", "iso-2022-jp") } assert_raise(RuntimeError) { "\x1e".encode("utf-8", "iso-2022-jp") } assert_raise(RuntimeError) { "\x80".encode("utf-8", "iso-2022-jp") } assert_equal("\x1b(I12345\x1b(B".force_encoding("iso-2022-jp"), "\uff71\uff72\uff73\uff74\uff75".encode("iso-2022-jp")) - assert_equal("\x1b$(Dd!\x1b(B".force_encoding("iso-2022-jp"), "\u9299".encode("iso-2022-jp")) end end Index: test/ruby/test_io_m17n.rb =================================================================== --- test/ruby/test_io_m17n.rb (revision 18196) +++ test/ruby/test_io_m17n.rb (working copy) @@ -157,18 +157,6 @@ } end - def test_terminator_stateful_conversion - with_tmpdir { - src = "before \e$B\x23\x30\x23\x31\e(B after".force_encoding("iso-2022-jp") - generate_file('tmp', src) - s = open("tmp", "r:iso-2022-jp:euc-jp") {|f| - f.gets("0".force_encoding("euc-jp")) - } - assert_equal(Encoding.find("euc-jp"), s.encoding) - assert_str_equal(src.encode("euc-jp"), s) - } - end - def test_nonascii_terminator with_tmpdir { generate_file('tmp', "before \xA2\xA2 after") @@ -214,17 +202,6 @@ } end - def test_getc_stateful_conversion - with_tmpdir { - src = "\e$B\x23\x30\x23\x31\e(B".force_encoding("iso-2022-jp") - generate_file('tmp', src) - open("tmp", "r:iso-2022-jp:euc-jp") {|f| - assert_equal("\xa3\xb0".force_encoding("euc-jp"), f.getc) - assert_equal("\xa3\xb1".force_encoding("euc-jp"), f.getc) - } - } - end - def test_open_ascii with_tmpdir { src = "abc\n" Index: test/ruby/PENDINGS.rb =================================================================== --- test/ruby/PENDINGS.rb (revision 0) +++ test/ruby/PENDINGS.rb (revision 0) @@ -0,0 +1,62 @@ +# -*- encoding: ASCII-8BIT -*- # make sure this runs in binary mode +# some of the comments are in UTF-8 + +require 'test/unit' +require 'tmpdir' +require 'timeout' + +class TestIO_M17N_PENDING < Test::Unit::TestCase + def with_tmpdir + Dir.mktmpdir {|dir| + Dir.chdir(dir) { + yield dir + } + } + end + + def generate_file(path, content) + open(path, "wb") {|f| f.write content } + end + + def encdump(str) + "#{str.dump}.force_encoding(#{str.encoding.name.dump})" + end + + def assert_str_equal(expected, actual, message=nil) + full_message = build_message(message, <