mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* hash.c (rb_hash_fetch_m): use useful message for longer key, not a
nonsense id value. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30730 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
f989f7c7ea
commit
46142e472f
3 changed files with 14 additions and 4 deletions
|
@ -1,4 +1,7 @@
|
||||||
Sun Jan 30 13:01:54 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sun Jan 30 13:03:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* 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.
|
* string.c (rb_str_ellipsize): new function to ellipsize a string.
|
||||||
|
|
||||||
|
|
3
hash.c
3
hash.c
|
@ -584,9 +584,10 @@ rb_hash_fetch_m(int argc, VALUE *argv, VALUE hash)
|
||||||
if (block_given) return rb_yield(key);
|
if (block_given) return rb_yield(key);
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
volatile VALUE desc = rb_protect(rb_inspect, key, 0);
|
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_any_to_s(key);
|
||||||
}
|
}
|
||||||
|
desc = rb_str_ellipsize(desc, 65);
|
||||||
rb_raise(rb_eKeyError, "key not found: %s", RSTRING_PTR(desc));
|
rb_raise(rb_eKeyError, "key not found: %s", RSTRING_PTR(desc));
|
||||||
}
|
}
|
||||||
return if_none;
|
return if_none;
|
||||||
|
|
|
@ -373,8 +373,6 @@ class TestHash < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_fetch
|
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('gumbygumby', @h.fetch('gumby') {|k| k * 2 })
|
||||||
assert_equal('pokey', @h.fetch('gumby', 'pokey'))
|
assert_equal('pokey', @h.fetch('gumby', 'pokey'))
|
||||||
|
|
||||||
|
@ -383,6 +381,14 @@ class TestHash < Test::Unit::TestCase
|
||||||
assert_equal('nil', @h.fetch(nil))
|
assert_equal('nil', @h.fetch(nil))
|
||||||
end
|
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?
|
def test_key2?
|
||||||
assert(!@cls[].key?(1))
|
assert(!@cls[].key?(1))
|
||||||
assert(!@cls[].key?(nil))
|
assert(!@cls[].key?(nil))
|
||||||
|
|
Loading…
Add table
Reference in a new issue