mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Move spec/rubyspec to spec/ruby for consistency
* Other ruby implementations use the spec/ruby directory. [Misc #13792] [ruby-core:82287] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
75bfc6440d
commit
1d15d5f080
4370 changed files with 0 additions and 0 deletions
32
spec/ruby/core/enumerable/shared/collect.rb
Normal file
32
spec/ruby/core/enumerable/shared/collect.rb
Normal file
|
@ -0,0 +1,32 @@
|
|||
require File.expand_path('../enumerable_enumeratorized', __FILE__)
|
||||
|
||||
describe :enumerable_collect, shared: true do
|
||||
before :each do
|
||||
ScratchPad.record []
|
||||
end
|
||||
|
||||
it "returns a new array with the results of passing each element to block" do
|
||||
entries = [0, 1, 3, 4, 5, 6]
|
||||
numerous = EnumerableSpecs::Numerous.new(*entries)
|
||||
numerous.send(@method) { |i| i % 2 }.should == [0, 1, 1, 0, 1, 0]
|
||||
numerous.send(@method) { |i| i }.should == entries
|
||||
end
|
||||
|
||||
it "passes through the values yielded by #each_with_index" do
|
||||
[:a, :b].each_with_index.send(@method) { |x, i| ScratchPad << [x, i]; nil }
|
||||
ScratchPad.recorded.should == [[:a, 0], [:b, 1]]
|
||||
end
|
||||
|
||||
it "gathers initial args as elements when each yields multiple" do
|
||||
multi = EnumerableSpecs::YieldsMulti.new
|
||||
multi.send(@method) {|e| e}.should == [1,3,6]
|
||||
end
|
||||
|
||||
it "returns an enumerator when no block given" do
|
||||
enum = EnumerableSpecs::Numerous.new.send(@method)
|
||||
enum.should be_an_instance_of(Enumerator)
|
||||
enum.each { |i| -i }.should == [-2, -5, -3, -6, -1, -4]
|
||||
end
|
||||
|
||||
it_should_behave_like :enumerable_enumeratorized_with_origin_size
|
||||
end
|
54
spec/ruby/core/enumerable/shared/collect_concat.rb
Normal file
54
spec/ruby/core/enumerable/shared/collect_concat.rb
Normal file
|
@ -0,0 +1,54 @@
|
|||
require File.expand_path('../enumerable_enumeratorized', __FILE__)
|
||||
|
||||
describe :enumerable_collect_concat, shared: true do
|
||||
it "yields elements to the block and flattens one level" do
|
||||
numerous = EnumerableSpecs::Numerous.new(1, [2, 3], [4, [5, 6]], {foo: :bar})
|
||||
numerous.send(@method) { |i| i }.should == [1, 2, 3, 4, [5, 6], {foo: :bar}]
|
||||
end
|
||||
|
||||
it "appends non-Array elements that do not define #to_ary" do
|
||||
obj = mock("to_ary undefined")
|
||||
|
||||
numerous = EnumerableSpecs::Numerous.new(1, obj, 2)
|
||||
numerous.send(@method) { |i| i }.should == [1, obj, 2]
|
||||
end
|
||||
|
||||
it "concatenates the result of calling #to_ary if it returns an Array" do
|
||||
obj = mock("to_ary defined")
|
||||
obj.should_receive(:to_ary).and_return([:a, :b])
|
||||
|
||||
numerous = EnumerableSpecs::Numerous.new(1, obj, 2)
|
||||
numerous.send(@method) { |i| i }.should == [1, :a, :b, 2]
|
||||
end
|
||||
|
||||
it "does not call #to_a" do
|
||||
obj = mock("to_ary undefined")
|
||||
obj.should_not_receive(:to_a)
|
||||
|
||||
numerous = EnumerableSpecs::Numerous.new(1, obj, 2)
|
||||
numerous.send(@method) { |i| i }.should == [1, obj, 2]
|
||||
end
|
||||
|
||||
it "appends an element that defines #to_ary that returns nil" do
|
||||
obj = mock("to_ary defined")
|
||||
obj.should_receive(:to_ary).and_return(nil)
|
||||
|
||||
numerous = EnumerableSpecs::Numerous.new(1, obj, 2)
|
||||
numerous.send(@method) { |i| i }.should == [1, obj, 2]
|
||||
end
|
||||
|
||||
it "raises a TypeError if an element defining #to_ary does not return an Array or nil" do
|
||||
obj = mock("to_ary defined")
|
||||
obj.should_receive(:to_ary).and_return("array")
|
||||
|
||||
lambda { [1, obj, 3].send(@method) { |i| i } }.should raise_error(TypeError)
|
||||
end
|
||||
|
||||
it "returns an enumerator when no block given" do
|
||||
enum = EnumerableSpecs::Numerous.new(1, 2).send(@method)
|
||||
enum.should be_an_instance_of(Enumerator)
|
||||
enum.each{ |i| [i] * i }.should == [1, 2, 2]
|
||||
end
|
||||
|
||||
it_should_behave_like :enumerable_enumeratorized_with_origin_size
|
||||
end
|
24
spec/ruby/core/enumerable/shared/entries.rb
Normal file
24
spec/ruby/core/enumerable/shared/entries.rb
Normal file
|
@ -0,0 +1,24 @@
|
|||
describe :enumerable_entries, shared: true do
|
||||
it "returns an array containing the elements" do
|
||||
numerous = EnumerableSpecs::Numerous.new(1, nil, 'a', 2, false, true)
|
||||
numerous.send(@method).should == [1, nil, "a", 2, false, true]
|
||||
end
|
||||
|
||||
it "passes through the values yielded by #each_with_index" do
|
||||
[:a, :b].each_with_index.send(@method).should == [[:a, 0], [:b, 1]]
|
||||
end
|
||||
|
||||
it "passes arguments to each" do
|
||||
count = EnumerableSpecs::EachCounter.new(1, 2, 3)
|
||||
count.send(@method, :hello, "world").should == [1, 2, 3]
|
||||
count.arguments_passed.should == [:hello, "world"]
|
||||
end
|
||||
|
||||
it "returns a tainted array if self is tainted" do
|
||||
EnumerableSpecs::Empty.new.taint.send(@method).tainted?.should be_true
|
||||
end
|
||||
|
||||
it "returns an untrusted array if self is untrusted" do
|
||||
EnumerableSpecs::Empty.new.untrust.send(@method).untrusted?.should be_true
|
||||
end
|
||||
end
|
|
@ -0,0 +1,33 @@
|
|||
require File.expand_path('../enumeratorized', __FILE__)
|
||||
|
||||
describe :enumerable_enumeratorized_with_unknown_size, shared: true do
|
||||
describe "Enumerable with size" do
|
||||
before :all do
|
||||
@object = EnumerableSpecs::NumerousWithSize.new(1, 2, 3, 4)
|
||||
end
|
||||
it_should_behave_like :enumeratorized_with_unknown_size
|
||||
end
|
||||
|
||||
describe "Enumerable with no size" do
|
||||
before :all do
|
||||
@object = EnumerableSpecs::Numerous.new(1, 2, 3, 4)
|
||||
end
|
||||
it_should_behave_like :enumeratorized_with_unknown_size
|
||||
end
|
||||
end
|
||||
|
||||
describe :enumerable_enumeratorized_with_origin_size, shared: true do
|
||||
describe "Enumerable with size" do
|
||||
before :all do
|
||||
@object = EnumerableSpecs::NumerousWithSize.new(1, 2, 3, 4)
|
||||
end
|
||||
it_should_behave_like :enumeratorized_with_origin_size
|
||||
end
|
||||
|
||||
describe "Enumerable with no size" do
|
||||
before :all do
|
||||
@object = EnumerableSpecs::Numerous.new(1, 2, 3, 4)
|
||||
end
|
||||
it_should_behave_like :enumeratorized_with_unknown_size
|
||||
end
|
||||
end
|
42
spec/ruby/core/enumerable/shared/enumeratorized.rb
Normal file
42
spec/ruby/core/enumerable/shared/enumeratorized.rb
Normal file
|
@ -0,0 +1,42 @@
|
|||
describe :enumeratorized_with_unknown_size, shared: true do
|
||||
describe "when no block is given" do
|
||||
describe "returned Enumerator" do
|
||||
it "size returns nil" do
|
||||
@object.send(*@method).size.should == nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe :enumeratorized_with_origin_size, shared: true do
|
||||
describe "when no block is given" do
|
||||
describe "returned Enumerator" do
|
||||
it "size returns the enumerable size" do
|
||||
@object.send(*@method).size.should == @object.size
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe :enumeratorized_with_cycle_size, shared: true do
|
||||
describe "when no block is given" do
|
||||
describe "returned Enumerator" do
|
||||
describe "size" do
|
||||
it "should be the result of multiplying the enumerable size by the argument passed" do
|
||||
@object.cycle(2).size.should == @object.size * 2
|
||||
@object.cycle(7).size.should == @object.size * 7
|
||||
@object.cycle(0).size.should == 0
|
||||
@empty_object.cycle(2).size.should == 0
|
||||
end
|
||||
|
||||
it "should be zero when the argument passed is 0 or less" do
|
||||
@object.cycle(-1).size.should == 0
|
||||
end
|
||||
|
||||
it "should be Float::INFINITY when no argument is passed" do
|
||||
@object.cycle.size.should == Float::INFINITY
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
73
spec/ruby/core/enumerable/shared/find.rb
Normal file
73
spec/ruby/core/enumerable/shared/find.rb
Normal file
|
@ -0,0 +1,73 @@
|
|||
require File.expand_path('../enumerable_enumeratorized', __FILE__)
|
||||
|
||||
describe :enumerable_find, shared: true do
|
||||
# #detect and #find are aliases, so we only need one function
|
||||
before :each do
|
||||
ScratchPad.record []
|
||||
@elements = [2, 4, 6, 8, 10]
|
||||
@numerous = EnumerableSpecs::Numerous.new(*@elements)
|
||||
@empty = []
|
||||
end
|
||||
|
||||
it "passes each entry in enum to block while block when block is false" do
|
||||
visited_elements = []
|
||||
@numerous.send(@method) do |element|
|
||||
visited_elements << element
|
||||
false
|
||||
end
|
||||
visited_elements.should == @elements
|
||||
end
|
||||
|
||||
it "returns nil when the block is false and there is no ifnone proc given" do
|
||||
@numerous.send(@method) {|e| false }.should == nil
|
||||
end
|
||||
|
||||
it "returns the first element for which the block is not false" do
|
||||
@elements.each do |element|
|
||||
@numerous.send(@method) {|e| e > element - 1 }.should == element
|
||||
end
|
||||
end
|
||||
|
||||
it "returns the value of the ifnone proc if the block is false" do
|
||||
fail_proc = lambda { "cheeseburgers" }
|
||||
@numerous.send(@method, fail_proc) {|e| false }.should == "cheeseburgers"
|
||||
end
|
||||
|
||||
it "doesn't call the ifnone proc if an element is found" do
|
||||
fail_proc = lambda { raise "This shouldn't have been called" }
|
||||
@numerous.send(@method, fail_proc) {|e| e == @elements.first }.should == 2
|
||||
end
|
||||
|
||||
it "calls the ifnone proc only once when the block is false" do
|
||||
times = 0
|
||||
fail_proc = lambda { times += 1; raise if times > 1; "cheeseburgers" }
|
||||
@numerous.send(@method, fail_proc) {|e| false }.should == "cheeseburgers"
|
||||
end
|
||||
|
||||
it "calls the ifnone proc when there are no elements" do
|
||||
fail_proc = lambda { "yay" }
|
||||
@empty.send(@method, fail_proc) {|e| true}.should == "yay"
|
||||
end
|
||||
|
||||
it "passes through the values yielded by #each_with_index" do
|
||||
[:a, :b].each_with_index.send(@method) { |x, i| ScratchPad << [x, i]; nil }
|
||||
ScratchPad.recorded.should == [[:a, 0], [:b, 1]]
|
||||
end
|
||||
|
||||
it "returns an enumerator when no block given" do
|
||||
@numerous.send(@method).should be_an_instance_of(Enumerator)
|
||||
end
|
||||
|
||||
it "passes the ifnone proc to the enumerator" do
|
||||
times = 0
|
||||
fail_proc = lambda { times += 1; raise if times > 1; "cheeseburgers" }
|
||||
@numerous.send(@method, fail_proc).each {|e| false }.should == "cheeseburgers"
|
||||
end
|
||||
|
||||
it "gathers whole arrays as elements when each yields multiple" do
|
||||
multi = EnumerableSpecs::YieldsMulti.new
|
||||
multi.send(@method) {|e| e == [1, 2] }.should == [1, 2]
|
||||
end
|
||||
|
||||
it_should_behave_like :enumerable_enumeratorized_with_unknown_size
|
||||
end
|
31
spec/ruby/core/enumerable/shared/find_all.rb
Normal file
31
spec/ruby/core/enumerable/shared/find_all.rb
Normal file
|
@ -0,0 +1,31 @@
|
|||
require File.expand_path('../enumerable_enumeratorized', __FILE__)
|
||||
|
||||
describe :enumerable_find_all, shared: true do
|
||||
before :each do
|
||||
ScratchPad.record []
|
||||
@elements = (1..10).to_a
|
||||
@numerous = EnumerableSpecs::Numerous.new(*@elements)
|
||||
end
|
||||
|
||||
it "returns all elements for which the block is not false" do
|
||||
@numerous.send(@method) {|i| i % 3 == 0 }.should == [3, 6, 9]
|
||||
@numerous.send(@method) {|i| true }.should == @elements
|
||||
@numerous.send(@method) {|i| false }.should == []
|
||||
end
|
||||
|
||||
it "returns an enumerator when no block given" do
|
||||
@numerous.send(@method).should be_an_instance_of(Enumerator)
|
||||
end
|
||||
|
||||
it "passes through the values yielded by #each_with_index" do
|
||||
[:a, :b].each_with_index.send(@method) { |x, i| ScratchPad << [x, i] }
|
||||
ScratchPad.recorded.should == [[:a, 0], [:b, 1]]
|
||||
end
|
||||
|
||||
it "gathers whole arrays as elements when each yields multiple" do
|
||||
multi = EnumerableSpecs::YieldsMulti.new
|
||||
multi.send(@method) {|e| e == [3, 4, 5] }.should == [[3, 4, 5]]
|
||||
end
|
||||
|
||||
it_should_behave_like :enumerable_enumeratorized_with_origin_size
|
||||
end
|
34
spec/ruby/core/enumerable/shared/include.rb
Normal file
34
spec/ruby/core/enumerable/shared/include.rb
Normal file
|
@ -0,0 +1,34 @@
|
|||
describe :enumerable_include, shared: true do
|
||||
it "returns true if any element == argument for numbers" do
|
||||
class EnumerableSpecIncludeP; def ==(obj) obj == 5; end; end
|
||||
|
||||
elements = (0..5).to_a
|
||||
EnumerableSpecs::Numerous.new(*elements).send(@method,5).should == true
|
||||
EnumerableSpecs::Numerous.new(*elements).send(@method,10).should == false
|
||||
EnumerableSpecs::Numerous.new(*elements).send(@method,EnumerableSpecIncludeP.new).should == true
|
||||
end
|
||||
|
||||
it "returns true if any element == argument for other objects" do
|
||||
class EnumerableSpecIncludeP11; def ==(obj); obj == '11'; end; end
|
||||
|
||||
elements = ('0'..'5').to_a + [EnumerableSpecIncludeP11.new]
|
||||
EnumerableSpecs::Numerous.new(*elements).send(@method,'5').should == true
|
||||
EnumerableSpecs::Numerous.new(*elements).send(@method,'10').should == false
|
||||
EnumerableSpecs::Numerous.new(*elements).send(@method,EnumerableSpecIncludeP11.new).should == true
|
||||
EnumerableSpecs::Numerous.new(*elements).send(@method,'11').should == true
|
||||
end
|
||||
|
||||
|
||||
it "returns true if any member of enum equals obj when == compare different classes (legacy rubycon)" do
|
||||
# equality is tested with ==
|
||||
EnumerableSpecs::Numerous.new(2,4,6,8,10).send(@method, 2.0).should == true
|
||||
EnumerableSpecs::Numerous.new(2,4,[6,8],10).send(@method, [6, 8]).should == true
|
||||
EnumerableSpecs::Numerous.new(2,4,[6,8],10).send(@method, [6.0, 8.0]).should == true
|
||||
end
|
||||
|
||||
it "gathers whole arrays as elements when each yields multiple" do
|
||||
multi = EnumerableSpecs::YieldsMulti.new
|
||||
multi.send(@method, [1,2]).should be_true
|
||||
end
|
||||
|
||||
end
|
69
spec/ruby/core/enumerable/shared/inject.rb
Normal file
69
spec/ruby/core/enumerable/shared/inject.rb
Normal file
|
@ -0,0 +1,69 @@
|
|||
describe :enumerable_inject, shared: true do
|
||||
it "with argument takes a block with an accumulator (with argument as initial value) and the current element. Value of block becomes new accumulator" do
|
||||
a = []
|
||||
EnumerableSpecs::Numerous.new.send(@method, 0) { |memo, i| a << [memo, i]; i }
|
||||
a.should == [[0, 2], [2, 5], [5, 3], [3, 6], [6, 1], [1, 4]]
|
||||
EnumerableSpecs::EachDefiner.new(true, true, true).send(@method, nil) {|result, i| i && result}.should == nil
|
||||
end
|
||||
|
||||
it "produces an array of the accumulator and the argument when given a block with a *arg" do
|
||||
a = []
|
||||
[1,2].send(@method, 0) {|*args| a << args; args[0] + args[1]}
|
||||
a.should == [[0, 1], [1, 2]]
|
||||
end
|
||||
|
||||
it "can take two argument" do
|
||||
EnumerableSpecs::Numerous.new(1, 2, 3).send(@method, 10, :-).should == 4
|
||||
end
|
||||
|
||||
it "ignores the block if two arguments" do
|
||||
EnumerableSpecs::Numerous.new(1, 2, 3).send(@method, 10, :-){ raise "we never get here"}.should == 4
|
||||
end
|
||||
|
||||
it "can take a symbol argument" do
|
||||
EnumerableSpecs::Numerous.new(10, 1, 2, 3).send(@method, :-).should == 4
|
||||
end
|
||||
|
||||
it "without argument takes a block with an accumulator (with first element as initial value) and the current element. Value of block becomes new accumulator" do
|
||||
a = []
|
||||
EnumerableSpecs::Numerous.new.send(@method) { |memo, i| a << [memo, i]; i }
|
||||
a.should == [[2, 5], [5, 3], [3, 6], [6, 1], [1, 4]]
|
||||
end
|
||||
|
||||
it "gathers whole arrays as elements when each yields multiple" do
|
||||
multi = EnumerableSpecs::YieldsMulti.new
|
||||
multi.send(@method, []) {|acc, e| acc << e }.should == [[1, 2], [3, 4, 5], [6, 7, 8, 9]]
|
||||
end
|
||||
|
||||
it "with inject arguments(legacy rubycon)" do
|
||||
# with inject argument
|
||||
EnumerableSpecs::EachDefiner.new().send(@method, 1) {|acc,x| 999 }.should == 1
|
||||
EnumerableSpecs::EachDefiner.new(2).send(@method, 1) {|acc,x| 999 }.should == 999
|
||||
EnumerableSpecs::EachDefiner.new(2).send(@method, 1) {|acc,x| acc }.should == 1
|
||||
EnumerableSpecs::EachDefiner.new(2).send(@method, 1) {|acc,x| x }.should == 2
|
||||
|
||||
EnumerableSpecs::EachDefiner.new(1,2,3,4).send(@method, 100) {|acc,x| acc + x }.should == 110
|
||||
EnumerableSpecs::EachDefiner.new(1,2,3,4).send(@method, 100) {|acc,x| acc * x }.should == 2400
|
||||
|
||||
EnumerableSpecs::EachDefiner.new('a','b','c').send(@method, "z") {|result, i| i+result}.should == "cbaz"
|
||||
end
|
||||
|
||||
it "without inject arguments(legacy rubycon)" do
|
||||
# no inject argument
|
||||
EnumerableSpecs::EachDefiner.new(2).send(@method) {|acc,x| 999 } .should == 2
|
||||
EnumerableSpecs::EachDefiner.new(2).send(@method) {|acc,x| acc }.should == 2
|
||||
EnumerableSpecs::EachDefiner.new(2).send(@method) {|acc,x| x }.should == 2
|
||||
|
||||
EnumerableSpecs::EachDefiner.new(1,2,3,4).send(@method) {|acc,x| acc + x }.should == 10
|
||||
EnumerableSpecs::EachDefiner.new(1,2,3,4).send(@method) {|acc,x| acc * x }.should == 24
|
||||
|
||||
EnumerableSpecs::EachDefiner.new('a','b','c').send(@method) {|result, i| i+result}.should == "cba"
|
||||
EnumerableSpecs::EachDefiner.new(3, 4, 5).send(@method) {|result, i| result*i}.should == 60
|
||||
EnumerableSpecs::EachDefiner.new([1], 2, 'a','b').send(@method){|r,i| r<<i}.should == [1, 2, 'a', 'b']
|
||||
|
||||
end
|
||||
|
||||
it "returns nil when fails(legacy rubycon)" do
|
||||
EnumerableSpecs::EachDefiner.new().send(@method) {|acc,x| 999 }.should == nil
|
||||
end
|
||||
end
|
63
spec/ruby/core/enumerable/shared/take.rb
Normal file
63
spec/ruby/core/enumerable/shared/take.rb
Normal file
|
@ -0,0 +1,63 @@
|
|||
describe :enumerable_take, shared: true do
|
||||
before :each do
|
||||
@values = [4,3,2,1,0,-1]
|
||||
@enum = EnumerableSpecs::Numerous.new(*@values)
|
||||
end
|
||||
|
||||
it "returns the first count elements if given a count" do
|
||||
@enum.send(@method, 2).should == [4, 3]
|
||||
@enum.send(@method, 4).should == [4, 3, 2, 1] # See redmine #1686 !
|
||||
end
|
||||
|
||||
it "returns an empty array when passed count on an empty array" do
|
||||
empty = EnumerableSpecs::Empty.new
|
||||
empty.send(@method, 0).should == []
|
||||
empty.send(@method, 1).should == []
|
||||
empty.send(@method, 2).should == []
|
||||
end
|
||||
|
||||
it "returns an empty array when passed count == 0" do
|
||||
@enum.send(@method, 0).should == []
|
||||
end
|
||||
|
||||
it "returns an array containing the first element when passed count == 1" do
|
||||
@enum.send(@method, 1).should == [4]
|
||||
end
|
||||
|
||||
it "raises an ArgumentError when count is negative" do
|
||||
lambda { @enum.send(@method, -1) }.should raise_error(ArgumentError)
|
||||
end
|
||||
|
||||
it "returns the entire array when count > length" do
|
||||
@enum.send(@method, 100).should == @values
|
||||
@enum.send(@method, 8).should == @values # See redmine #1686 !
|
||||
end
|
||||
|
||||
it "tries to convert the passed argument to an Integer using #to_int" do
|
||||
obj = mock('to_int')
|
||||
obj.should_receive(:to_int).and_return(3).at_most(:twice) # called twice, no apparent reason. See redmine #1554
|
||||
@enum.send(@method, obj).should == [4, 3, 2]
|
||||
end
|
||||
|
||||
it "raises a TypeError if the passed argument is not numeric" do
|
||||
lambda { @enum.send(@method, nil) }.should raise_error(TypeError)
|
||||
lambda { @enum.send(@method, "a") }.should raise_error(TypeError)
|
||||
|
||||
obj = mock("nonnumeric")
|
||||
lambda { @enum.send(@method, obj) }.should raise_error(TypeError)
|
||||
end
|
||||
|
||||
it "gathers whole arrays as elements when each yields multiple" do
|
||||
multi = EnumerableSpecs::YieldsMulti.new
|
||||
multi.send(@method, 1).should == [[1, 2]]
|
||||
end
|
||||
|
||||
it "consumes only what is needed" do
|
||||
thrower = EnumerableSpecs::ThrowingEach.new
|
||||
thrower.send(@method, 0).should == []
|
||||
counter = EnumerableSpecs::EachCounter.new(1,2,3,4)
|
||||
counter.send(@method, 2).should == [1,2]
|
||||
counter.times_called.should == 1
|
||||
counter.times_yielded.should == 2
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue