diff options
| author | Yuichiro MASUI <[email protected]> | 2013-02-12 16:07:57 +0900 |
|---|---|---|
| committer | Yuichiro MASUI <[email protected]> | 2013-02-12 16:10:35 +0900 |
| commit | 0ee2c71b034e6168a8c394304325c3cd2a253492 (patch) | |
| tree | 3dd9da01e5f5ce6b029a5a881acc3ecd5933b36a | |
| parent | 3e021b8e858194aba692912af26bc2a81e0b67ed (diff) | |
| download | mruby-0ee2c71b034e6168a8c394304325c3cd2a253492.tar.gz mruby-0ee2c71b034e6168a8c394304325c3cd2a253492.zip | |
Added String#sub/sub! and String#gsub/gsub!
| -rw-r--r-- | mrblib/string.rb | 22 | ||||
| -rw-r--r-- | test/t/string.rb | 29 |
2 files changed, 35 insertions, 16 deletions
diff --git a/mrblib/string.rb b/mrblib/string.rb index 43dda16e5..9b11bb2e5 100644 --- a/mrblib/string.rb +++ b/mrblib/string.rb @@ -28,14 +28,13 @@ class String # # ISO 15.2.10.5.18 def gsub(*args, &block) - unless (args.size == 1 && block) || args.size == 2 + if args.size == 2 + split(args[0]).join(args[1]) + elsif args.size == 1 && block + split(args[0]).join(block.call(args[0])) + else raise ArgumentError, "wrong number of arguments" end - - ### *** TODO *** ### - unless Object.const_defined?(:Regexp) - raise NotImplementedError, "gsub not available (yet)" - end end ## @@ -76,14 +75,13 @@ class String # # ISO 15.2.10.5.36 def sub(*args, &block) - unless (args.size == 1 && block) || args.size == 2 + if args.size == 2 + split(args[0], 2).join(args[1]) + elsif args.size == 1 && block + split(args[0], 2).join(block.call(args[0])) + else raise ArgumentError, "wrong number of arguments" end - - ### *** TODO *** ### - unless Object.const_defined?(:Regexp) - raise NotImplementedError, "sub not available (yet)" - end end ## diff --git a/test/t/string.rb b/test/t/string.rb index 05a610e00..fac77075b 100644 --- a/test/t/string.rb +++ b/test/t/string.rb @@ -192,9 +192,19 @@ assert('String#eql?', '15.2.10.5.17') do 'abc'.eql?('abc') and not 'abc'.eql?('cba') end -# TODO ATM broken assert('String#gsub', '15.2.10.5.18') do +assert('String#gsub', '15.2.10.5.18') do + 'abcabc'.gsub('b', 'B') == 'aBcaBc' && 'abcabc'.gsub('b') { |w| w.capitalize } == 'aBcaBc' +end + +assert('String#gsub!', '15.2.10.5.19') do + a = 'abcabc' + a.gsub!('b', 'B') -# TODO ATM broken assert('String#gsub!', '15.2.10.5.19') do + b = 'abcabc' + b.gsub!('b') { |w| w.capitalize } + + a == 'aBcaBc' && b == 'aBcaBc' +end assert('String#hash', '15.2.10.5.20') do a = 'abc' @@ -307,9 +317,20 @@ assert('String#split', '15.2.10.5.35') do 'abc'.split("") == ['a', 'b', 'c'] end -# TODO ATM broken assert('String#sub', '15.2.10.5.36') do +assert('String#sub', '15.2.10.5.36') do + 'abcabc'.sub('b', 'B') == 'aBcabc' && 'abcabc'.sub('b') { |w| w.capitalize } == 'aBcabc' +end + +assert('String#sub!', '15.2.10.5.37') do + a = 'abcabc' + a.sub!('b', 'B') + + b = 'abcabc' + b.sub!('b') { |w| w.capitalize } + + a == 'aBcabc' && b == 'aBcabc' +end -# TODO ATM broken assert('String#sub!', '15.2.10.5.37') do assert('String#to_i', '15.2.10.5.38') do a = ''.to_i |
