зеркало из https://github.com/github/ruby.git
* string.c (rb_str_sub_bang): fix coderange.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19662 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
255f43160b
Коммит
bd421aa2d2
|
@ -1,3 +1,7 @@
|
|||
Thu Oct 2 20:46:17 2008 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* string.c (rb_str_sub_bang): fix coderange.
|
||||
|
||||
Wed Oct 1 22:54:09 2008 Yusuke Endoh <mame@tsg.ne.jp>
|
||||
|
||||
* lib/rexml/parsers/lightparser.rb, lib/debug.rb: remove unused when
|
||||
|
|
6
string.c
6
string.c
|
@ -3307,7 +3307,11 @@ rb_str_sub_bang(int argc, VALUE *argv, VALUE str)
|
|||
if (OBJ_UNTRUSTED(repl)) untrusted = 1;
|
||||
if (ENC_CODERANGE_UNKNOWN < cr && cr < ENC_CODERANGE_BROKEN) {
|
||||
int cr2 = ENC_CODERANGE(repl);
|
||||
if (cr2 == ENC_CODERANGE_UNKNOWN || cr2 > cr) cr = cr2;
|
||||
if (cr2 == ENC_CODERANGE_BROKEN ||
|
||||
(cr == ENC_CODERANGE_VALID && cr2 == ENC_CODERANGE_7BIT))
|
||||
cr = ENC_CODERANGE_UNKNOWN;
|
||||
else
|
||||
cr = cr2;
|
||||
}
|
||||
plen = end0 - beg0;
|
||||
if (RSTRING_LEN(repl) > plen) {
|
||||
|
|
|
@ -959,6 +959,21 @@ class TestM17N < Test::Unit::TestCase
|
|||
assert_equal(Encoding::EUC_JP, "\xa4\xa2".force_encoding("euc-jp").gsub(/./, '\&').encoding)
|
||||
end
|
||||
|
||||
def test_sub2
|
||||
s = "\x80".force_encoding("ASCII-8BIT")
|
||||
r = Regexp.new("\x80".force_encoding("ASCII-8BIT"))
|
||||
s2 = s.sub(r, "")
|
||||
assert(s2.empty?)
|
||||
assert(s2.ascii_only?)
|
||||
end
|
||||
|
||||
def test_sub3
|
||||
repl = "\x81".force_encoding("sjis")
|
||||
assert_equal(false, repl.valid_encoding?)
|
||||
s = "a@".sub(/a/, repl)
|
||||
assert(s.valid_encoding?)
|
||||
end
|
||||
|
||||
def test_insert
|
||||
s = e("\xa3\xb0\xa3\xb1\xa3\xb2\xa3\xb3\xa3\xb4")
|
||||
assert_equal(e("\xa3\xb0\xa3\xb1\xa3\xb2\xa3\xb3\xa3\xb4a"), s.insert(-1, "a"))
|
||||
|
|
|
@ -115,6 +115,7 @@ class TestM17NComb < Test::Unit::TestCase
|
|||
|
||||
def combination(*args, &b)
|
||||
AllPairs.each(*args, &b)
|
||||
#AllPairs.exhaustive_each(*args, &b)
|
||||
end
|
||||
|
||||
def encdump(str)
|
||||
|
@ -1395,21 +1396,25 @@ class TestM17NComb < Test::Unit::TestCase
|
|||
[
|
||||
[
|
||||
"#{encdump s1}.sub(Regexp.new(#{encdump s2}), #{encdump s3})",
|
||||
lambda { s1.sub(r2, s3) }
|
||||
lambda { s1.sub(r2, s3) },
|
||||
false
|
||||
],
|
||||
[
|
||||
"#{encdump s1}.sub(Regexp.new(#{encdump s2}), #{encdump s3})",
|
||||
lambda { s1.sub(r2) { s3 } }
|
||||
lambda { s1.sub(r2) { s3 } },
|
||||
false
|
||||
],
|
||||
[
|
||||
"#{encdump s1}.gsub(Regexp.new(#{encdump s2}), #{encdump s3})",
|
||||
lambda { s1.gsub(r2, s3) }
|
||||
lambda { s1.gsub(r2, s3) },
|
||||
true
|
||||
],
|
||||
[
|
||||
"#{encdump s1}.gsub(Regexp.new(#{encdump s2}), #{encdump s3})",
|
||||
lambda { s1.gsub(r2) { s3 } }
|
||||
lambda { s1.gsub(r2) { s3 } },
|
||||
true
|
||||
]
|
||||
].each {|desc, doit|
|
||||
].each {|desc, doit, g|
|
||||
if !s1.valid_encoding?
|
||||
assert_raise(ArgumentError, desc) { doit.call }
|
||||
next
|
||||
|
@ -1422,7 +1427,7 @@ class TestM17NComb < Test::Unit::TestCase
|
|||
assert_equal(s1, doit.call)
|
||||
next
|
||||
end
|
||||
if !str_enc_compatible?(s1.gsub(r2, ''), s3)
|
||||
if !str_enc_compatible?(g ? s1.gsub(r2, '') : s1.sub(r2, ''), s3)
|
||||
assert_raise(Encoding::CompatibilityError, desc) { doit.call }
|
||||
next
|
||||
end
|
||||
|
@ -1449,21 +1454,25 @@ class TestM17NComb < Test::Unit::TestCase
|
|||
[
|
||||
[
|
||||
"t=#{encdump s1}.dup;t.sub!(Regexp.new(#{encdump s2}), #{encdump s3})",
|
||||
lambda { t=s1.dup; [t, t.sub!(r2, s3)] }
|
||||
lambda { t=s1.dup; [t, t.sub!(r2, s3)] },
|
||||
false
|
||||
],
|
||||
[
|
||||
"t=#{encdump s1}.dup;t.sub!(Regexp.new(#{encdump s2}), #{encdump s3})",
|
||||
lambda { t=s1.dup; [t, t.sub!(r2) { s3 }] }
|
||||
lambda { t=s1.dup; [t, t.sub!(r2) { s3 }] },
|
||||
false
|
||||
],
|
||||
[
|
||||
"t=#{encdump s1}.dup;t.gsub!(Regexp.new(#{encdump s2}), #{encdump s3})",
|
||||
lambda { t=s1.dup; [t, t.gsub!(r2, s3)] }
|
||||
lambda { t=s1.dup; [t, t.gsub!(r2, s3)] },
|
||||
true
|
||||
],
|
||||
[
|
||||
"t=#{encdump s1}.dup;t.gsub!(Regexp.new(#{encdump s2}), #{encdump s3})",
|
||||
lambda { t=s1.dup; [t, t.gsub!(r2) { s3 }] }
|
||||
lambda { t=s1.dup; [t, t.gsub!(r2) { s3 }] },
|
||||
true
|
||||
]
|
||||
].each {|desc, doit|
|
||||
].each {|desc, doit, g|
|
||||
if !s1.valid_encoding?
|
||||
assert_raise(ArgumentError, desc) { doit.call }
|
||||
next
|
||||
|
@ -1476,7 +1485,7 @@ class TestM17NComb < Test::Unit::TestCase
|
|||
assert_equal([s1, nil], doit.call)
|
||||
next
|
||||
end
|
||||
if !str_enc_compatible?(s1.gsub(r2, ''), s3)
|
||||
if !str_enc_compatible?(g ? s1.gsub(r2, '') : s1.sub(r2, ''), s3)
|
||||
assert_raise(Encoding::CompatibilityError, desc) { doit.call }
|
||||
next
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче