summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
authorHiroya Fujinami <[email protected]>2023-10-25 16:32:25 +0900
committerGitHub <[email protected]>2023-10-25 16:32:25 +0900
commit3e64cf60b5162bb5dad772f300b7f6346e5f83f9 (patch)
treecb59d29a745028a5c55f108d665cb93c6585a4ff /test/ruby
parenta6a67b0524ec3f8da96143cdf5094b5eaf7d820d (diff)
Fix [Bug #19632]: Disable external iterator for frozen enumerator (#7791)
* Fix [Bug #19632]: Disable external iterator for frozen enumerator Currently, methods to manipulate an external iterator like `#next` and `#feed` can be called even if a receiver of an enumerator is frozen. However, these methods change the state of an external iterator in an enumerator. Therefore, it seems a BUG to me, and these methods should raise FrozenError if the receiver is frozen. This fixed the following methods to raise FrozenError if the receiver is frozen. - `Enumerator#next` - `Enumerator#next_values` - `Enumerator#peek` - `Enumerator#peek_values` - `Enumerator#feed` - `Enumerator#rewind` * Fix a typo in the document Thanks @Maumagnaguagno.
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_enumerator.rb10
1 files changed, 10 insertions, 0 deletions
diff --git a/test/ruby/test_enumerator.rb b/test/ruby/test_enumerator.rb
index bbaa91b703..d0dc3a8bc4 100644
--- a/test/ruby/test_enumerator.rb
+++ b/test/ruby/test_enumerator.rb
@@ -1008,4 +1008,14 @@ class TestEnumerator < Test::Unit::TestCase
Enumerator.product(1..3, foo: 1, bar: 2)
}
end
+
+ def test_freeze
+ e = 3.times.freeze
+ assert_raise(FrozenError) { e.next }
+ assert_raise(FrozenError) { e.next_values }
+ assert_raise(FrozenError) { e.peek }
+ assert_raise(FrozenError) { e.peek_values }
+ assert_raise(FrozenError) { e.feed 1 }
+ assert_raise(FrozenError) { e.rewind }
+ end
end