summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/-ext-/test_enumerator_kw.rb11
-rw-r--r--test/ruby/test_enumerator.rb8
2 files changed, 19 insertions, 0 deletions
diff --git a/test/-ext-/test_enumerator_kw.rb b/test/-ext-/test_enumerator_kw.rb
new file mode 100644
index 0000000000..fb47c2bcf8
--- /dev/null
+++ b/test/-ext-/test_enumerator_kw.rb
@@ -0,0 +1,11 @@
+require 'test/unit'
+require '-test-/enumerator_kw'
+
+class TestEnumeratorKw < Test::Unit::TestCase
+ def test_enumerator_kw
+ o = Object.new
+ o.extend Bug::EnumeratorKw
+ assert_equal([nil, [], {:a=>1}, o], o.m(a: 1) { |*a| a })
+ assert_equal([nil, [[], {:a=>1}, o], nil, o], o.m(a: 1).each { |*a| a })
+ end
+end
diff --git a/test/ruby/test_enumerator.rb b/test/ruby/test_enumerator.rb
index 1e306c33a2..65adb5a438 100644
--- a/test/ruby/test_enumerator.rb
+++ b/test/ruby/test_enumerator.rb
@@ -831,6 +831,14 @@ class TestEnumerator < Test::Unit::TestCase
assert_equal [1, 2, 3], enum.take(3)
assert_equal [1, 2], passed_args
+ # With initial keyword arguments
+ passed_args = []
+ enum = Enumerator.produce(a: 1, b: 1) { |obj| passed_args << obj; obj.shift if obj.respond_to?(:shift)}
+ assert_instance_of(Enumerator, enum)
+ assert_equal Float::INFINITY, enum.size
+ assert_equal [{b: 1}, [1], :a, nil], enum.take(4)
+ assert_equal [{b: 1}, [1], :a], passed_args
+
# Raising StopIteration
words = "The quick brown fox jumps over the lazy dog.".scan(/\w+/)
enum = Enumerator.produce { words.shift or raise StopIteration }