summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDaniel Bovensiepen <[email protected]>2013-02-17 12:13:46 +0000
committerDaniel Bovensiepen <[email protected]>2013-02-17 12:13:46 +0000
commite8c0b61c0decc9bab480b59dc98075c34259a0d8 (patch)
tree44ed9c63f16bbc4f27ad17dd5a93a3ff6d344b12
parent92cf2a0ced00cf4071d624eb2d842867a6d054c2 (diff)
downloadmruby-e8c0b61c0decc9bab480b59dc98075c34259a0d8.tar.gz
mruby-e8c0b61c0decc9bab480b59dc98075c34259a0d8.zip
String#gsub fix with last character
-rw-r--r--mrblib/string.rb4
-rw-r--r--test/t/string.rb8
2 files changed, 9 insertions, 3 deletions
diff --git a/mrblib/string.rb b/mrblib/string.rb
index 9b11bb2e5..8a4894dd4 100644
--- a/mrblib/string.rb
+++ b/mrblib/string.rb
@@ -28,8 +28,10 @@ class String
#
# ISO 15.2.10.5.18
def gsub(*args, &block)
+ lc = ''
if args.size == 2
- split(args[0]).join(args[1])
+ lc = args[1] if self[-1] == args[0]
+ split(args[0]).join(args[1]) + lc
elsif args.size == 1 && block
split(args[0]).join(block.call(args[0]))
else
diff --git a/test/t/string.rb b/test/t/string.rb
index fac77075b..7d0b147d0 100644
--- a/test/t/string.rb
+++ b/test/t/string.rb
@@ -193,7 +193,9 @@ assert('String#eql?', '15.2.10.5.17') do
end
assert('String#gsub', '15.2.10.5.18') do
- 'abcabc'.gsub('b', 'B') == 'aBcaBc' && 'abcabc'.gsub('b') { |w| w.capitalize } == 'aBcaBc'
+ 'abcabc'.gsub('b', 'B') == 'aBcaBc' and
+ 'abcabc'.gsub('b') { |w| w.capitalize } == 'aBcaBc' and
+ '#a#a#'.gsub('#', '$') == '$a$a$'
end
assert('String#gsub!', '15.2.10.5.19') do
@@ -318,7 +320,9 @@ assert('String#split', '15.2.10.5.35') do
end
assert('String#sub', '15.2.10.5.36') do
- 'abcabc'.sub('b', 'B') == 'aBcabc' && 'abcabc'.sub('b') { |w| w.capitalize } == 'aBcabc'
+ 'abcabc'.sub('b', 'B') == 'aBcabc' and
+ 'abcabc'.sub('b') { |w| w.capitalize } == 'aBcabc' and
+ 'aa#'.sub('#', '$') == 'aa$'
end
assert('String#sub!', '15.2.10.5.37') do