Bug #5536

String#start_with? and end_with? ignore arguments convertible to a String [PATCH]

Added by Eregon (Benoit Daloze) 7 months ago. Updated about 1 month ago.

[ruby-core:40623]
Status:Closed Start date:11/01/2011
Priority:Normal Due date:
Assignee:matz (Yukihiro Matsumoto) % Done:

100%

Category:core
Target version:2.0.0
ruby -v:ruby 2.0.0dev (2011-11-01 trunk 33605) [x86_64-linux]

Description

Hi, Currently, String#start_with? and String#end_with? ignore arguments not convertible to String. I believe it should instead raise an error, as it may lead to false expectations from the user and it is inconsistent with the rest of the API. For example, if I try to use start_with? with a RegExp (which would be a nice feature BTW): "str".start_with? /s/ # => false I believe it should be: "str".start_with? /s/ # => TypeError: can't convert Regexp into String If you prefer the current behavior, could you explain me why? P.S.: There is no test for String#{start,end}_with? in test/, should I add one or is it enough to change RubySpec (which I'll do when this gets accepted)?

0001-string.c-rb_str_start_with-rb_str_end_with-raise-an-.patch (1.2 kB) Eregon (Benoit Daloze), 11/01/2011 09:43 pm

0002-test-ruby-test_string.rb-add-test_start_with-and-tes.patch (1.6 kB) Eregon (Benoit Daloze), 11/02/2011 12:03 am

0001-string.c-rb_str_start_with-rb_str_end_with-raise-an-.patch - second set of patchs (fix) (1.2 kB) Eregon (Benoit Daloze), 03/25/2012 09:11 pm

0002-test-ruby-test_string.rb-add-test_start_with-and-tes.patch - second set of patchs (tests) (1.6 kB) Eregon (Benoit Daloze), 03/25/2012 09:11 pm


Related issues

duplicates ruby-trunk - Feature #3388: regexp support for start_with? and end_with? Feedback 06/04/2010

Associated revisions

Revision 35213
Added by nobu (Nobuyoshi Nakada) about 1 month ago

* string.c (rb_str_start_with, rb_str_end_with): raise an error if an argument is not convertible to a String. [ruby-core:40623][Bug #5536]

History

Updated by nobu (Nobuyoshi Nakada) 7 months ago

  • Status changed from Open to Assigned
  • Assignee set to matz (Yukihiro Matsumoto)
(11/11/01 21:43), Benoit Daloze wrote: > Currently, String#start_with? and String#end_with? ignore arguments not convertible to String. > > I believe it should instead raise an error, > as it may lead to false expectations from the user and > it is inconsistent with the rest of the API. Indeed. > If you prefer the current behavior, could you explain me why? It hasn't changed from the origin, and I'm curious too. > P.S.: There is no test for String#{start,end}_with? in test/, should I add one or is it enough to change RubySpec (which I'll do when this gets accepted)? See test/ruby/test_m17n_comb.rb.

Updated by Eregon (Benoit Daloze) 7 months ago

> Issue #5536 has been updated by Nobuyoshi Nakada. > > (11/11/01 21:43), Benoit Daloze wrote: >> P.S.: There is no test for String#{start,end}_with? in test/, should I add one or is it enough to change RubySpec (which I'll do when this gets accepted)? > > See test/ruby/test_m17n_comb.rb. Sorry, I missed it, I only looked at test/ruby/test_string.rb. But I'm not sure the error tests belong there, as test_m17n_comb.rb mainly focus on Encoding interactions. Should I add in test_string.rb or test_m17n_comb.rb? Here is the diff for test_m17n_comb.rb: diff --git a/test/ruby/test_m17n_comb.rb b/test/ruby/test_m17n_comb.rb index 79016af..9c6d5f3 100644 --- a/test/ruby/test_m17n_comb.rb +++ b/test/ruby/test_m17n_comb.rb @@ -1551,6 +1551,7 @@ class TestM17NComb < Test::Unit::TestCase end assert_equal(false, enccall(s1, :end_with?, s2), desc) } + assert_raise(TypeError) { "str".end_with? :not_convertible_to_string } end def test_str_start_with? @@ -1572,6 +1573,7 @@ class TestM17NComb < Test::Unit::TestCase end assert_equal(false, enccall(s1, :start_with?, s2), desc) } + assert_raise(TypeError) { "str".start_with? :not_convertible_to_string } end def test_str_ord

Updated by nobu (Nobuyoshi Nakada) 7 months ago

> Should I add in test_string.rb or test_m17n_comb.rb? test_string.rb, I think.

Updated by Eregon (Benoit Daloze) about 1 month ago

I have uploaded a new set of patchs to better respect the style in test/ruby/test_string.rb (use S(str) for strings). Could we merge this?

Updated by nobu (Nobuyoshi Nakada) about 1 month ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100
This issue was solved with changeset r35213. Benoit, thank you for reporting this issue. Your contribution to Ruby is greatly appreciated. May Ruby be with you. ---------- * string.c (rb_str_start_with, rb_str_end_with): raise an error if an argument is not convertible to a String. [ruby-core:40623][Bug #5536]

Also available in: Atom PDF