[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]