summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2024-02-25 18:29:16 +0900
committernagachika <nagachika@ruby-lang.org>2024-02-25 18:29:16 +0900
commit5e4606423da96c2e26b00981c22bddfce0d970bf (patch)
treeda97da4f6c496095f0436cdc8ed0480e41a496d9 /test/ruby
parent1b9ff146e38c348519434754e0466352b8b25c50 (diff)
merge revision(s) f15123c34ce80f3928612befe2a9aaf4c9d27fda: [Backport #18743]
Fix stack trace for rescued StopIteration --- enumerator.c | 15 +++++++++++++-- test/ruby/test_enumerator.rb | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-)
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_enumerator.rb20
1 files changed, 20 insertions, 0 deletions
diff --git a/test/ruby/test_enumerator.rb b/test/ruby/test_enumerator.rb
index 010c1e4969..bbaa91b703 100644
--- a/test/ruby/test_enumerator.rb
+++ b/test/ruby/test_enumerator.rb
@@ -244,6 +244,26 @@ class TestEnumerator < Test::Unit::TestCase
assert_equal(res, exc.result)
end
+ def test_stopiteration_rescue
+ e = [1].each
+ res = e.each {}
+ e.next
+ exc0 = assert_raise(StopIteration) { e.peek }
+ assert_include(exc0.backtrace.first, "test_enumerator.rb:#{__LINE__-1}:")
+ assert_nil(exc0.cause)
+ assert_equal(res, exc0.result)
+
+ exc1 = assert_raise(StopIteration) { e.next }
+ assert_include(exc1.backtrace.first, "test_enumerator.rb:#{__LINE__-1}:")
+ assert_same(exc0, exc1.cause)
+ assert_equal(res, exc1.result)
+
+ exc2 = assert_raise(StopIteration) { e.next }
+ assert_include(exc2.backtrace.first, "test_enumerator.rb:#{__LINE__-1}:")
+ assert_same(exc0, exc2.cause)
+ assert_equal(res, exc2.result)
+ end
+
def test_next_values
o = Object.new
def o.each