HEX
Server: Apache
System: Linux s198.coreserver.jp 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025 x86_64
User: nagasaki (10062)
PHP: 7.1.33
Disabled: NONE
Upload Files
File: //usr/local/rvm/src/ruby-3.0.2/spec/ruby/core/enumerator/next_spec.rb
require_relative '../../spec_helper'

describe "Enumerator#next" do
  before :each do
    @enum = 1.upto(3)
  end

  it "returns the next element of the enumeration" do
    @enum.next.should == 1
    @enum.next.should == 2
    @enum.next.should == 3
  end

  it "raises a StopIteration exception at the end of the stream" do
    3.times { @enum.next }
    -> { @enum.next }.should raise_error(StopIteration)
  end

  it "cannot be called again until the enumerator is rewound" do
    3.times { @enum.next }
    -> { @enum.next }.should raise_error(StopIteration)
    -> { @enum.next }.should raise_error(StopIteration)
    -> { @enum.next }.should raise_error(StopIteration)
    @enum.rewind
    @enum.next.should == 1
  end

  it "restarts the enumerator if an exception terminated a previous iteration" do
    exception = StandardError.new
    enum = Enumerator.new do
      raise exception
    end

    result = 2.times.map { enum.next rescue $! }

    result.should == [exception, exception]
  end
end