ruby-changes:18704
From: nobu <ko1@a...>
Date: Sun, 30 Jan 2011 13:06:44 +0900 (JST)
Subject: [ruby-changes:18704] Ruby:r30730 (trunk): * hash.c (rb_hash_fetch_m): use useful message for longer key, not a
nobu 2011-01-30 13:03:19 +0900 (Sun, 30 Jan 2011) New Revision: 30730 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30730 Log: * hash.c (rb_hash_fetch_m): use useful message for longer key, not a nonsense id value. Modified files: trunk/ChangeLog trunk/hash.c trunk/test/ruby/test_hash.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 30729) +++ ChangeLog (revision 30730) @@ -1,5 +1,8 @@ -Sun Jan 30 13:01:54 2011 Nobuyoshi Nakada <nobu@r...> +Sun Jan 30 13:03:16 2011 Nobuyoshi Nakada <nobu@r...> + * hash.c (rb_hash_fetch_m): use useful message for longer key, not a + nonsense id value. + * string.c (rb_str_ellipsize): new function to ellipsize a string. * include/ruby/encoding.h (rb_enc_step_back): new function to step Index: hash.c =================================================================== --- hash.c (revision 30729) +++ hash.c (revision 30730) @@ -584,9 +584,10 @@ if (block_given) return rb_yield(key); if (argc == 1) { volatile VALUE desc = rb_protect(rb_inspect, key, 0); - if (NIL_P(desc) || RSTRING_LEN(desc) > 65) { + if (NIL_P(desc)) { desc = rb_any_to_s(key); } + desc = rb_str_ellipsize(desc, 65); rb_raise(rb_eKeyError, "key not found: %s", RSTRING_PTR(desc)); } return if_none; Index: test/ruby/test_hash.rb =================================================================== --- test/ruby/test_hash.rb (revision 30729) +++ test/ruby/test_hash.rb (revision 30730) @@ -373,8 +373,6 @@ end def test_fetch - assert_raise(KeyError) { @cls[].fetch(1) } - assert_raise(KeyError) { @h.fetch('gumby') } assert_equal('gumbygumby', @h.fetch('gumby') {|k| k * 2 }) assert_equal('pokey', @h.fetch('gumby', 'pokey')) @@ -383,6 +381,14 @@ assert_equal('nil', @h.fetch(nil)) end + def test_fetch_error + assert_raise(KeyError) { @cls[].fetch(1) } + assert_raise(KeyError) { @h.fetch('gumby') } + e = assert_raise(KeyError) { @h.fetch('gumby'*20) } + assert_match(/key not found: "gumbygumby/, e.message) + assert_match(/\.\.\.\z/, e.message) + end + def test_key2? assert(!@cls[].key?(1)) assert(!@cls[].key?(nil)) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/