From: Yukihiro Matsumoto Date: 2008-03-03T17:11:44+09:00 Subject: [ruby-dev:33971] Re: [ruby-cvs:22881] Ruby:r15644 (trunk): * test/ruby/test_m17n_comb.rb (TestM17NComb::test_str_chomp): test まつもと ゆきひろです In message "Re: [ruby-dev:33966] Re: [ruby-cvs:22881] Ruby:r15644 (trunk): * test/ruby/test_m17n_comb.rb (TestM17NComb::test_str_chomp): test" on Mon, 3 Mar 2008 13:38:04 +0900, Tanaka Akira writes: |この変更で、test_m17n_comb.rb の test_str_sub と |test_str_sub! に assert(false, "test broken") というコードが |入れられて、test broken とされましたが、これはどのように壊れ |ているのでしょうか? | |この assert を取り除くと |"\x80".force_encoding("ASCII-8BIT").sub(Regexp.new("\x80".force_encoding("ASCII-8BIT")),"\xC2\x80".force_encoding("UTF-8")) |と |t="\x80".force_encoding("ASCII-8BIT").dup;t.sub!(Regexp.new("\x80".force_encoding("ASCII-8BIT")),"\xC2\x80".force_encoding("UTF-8")). |で例外が発生する失敗が表れますが、これらは引数も結果も単一の |エンコーディングで表現できる文字列しか表れないので、成功して |もおかしくないはずです。 いや、brokenなのはそこではなくて、 if !str_enc_compatible?(s1.gsub(r2, ''), s3) というチェックで「Encodingがcompatibleでない」とされるケース でも置換可能なため、ArgumentErrorを発生させないケースがある点 です。 で、ご指摘の点はその通りなので直しておきます。