1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
eregon 2017-12-01 15:41:50 +00:00
parent 821d9a2d30
commit 4d7b0b9112
104 changed files with 2105 additions and 510 deletions

View file

@ -1,5 +1,6 @@
require File.expand_path('../../../spec_helper', __FILE__)
require File.expand_path('../fixtures/classes', __FILE__)
require File.expand_path('../shared/push', __FILE__)
describe "Array#<<" do
it "pushes the object onto the end of the array" do
@ -33,3 +34,9 @@ describe "Array#<<" do
lambda { ArraySpecs.frozen_array << 5 }.should raise_error(RuntimeError)
end
end
ruby_version_is "2.5" do
describe "Array#append" do
it_behaves_like(:array_push, :append)
end
end

View file

@ -0,0 +1,9 @@
require File.expand_path('../../../spec_helper', __FILE__)
require File.expand_path('../fixtures/classes', __FILE__)
require File.expand_path('../shared/unshift', __FILE__)
ruby_version_is "2.5" do
describe "Array#prepend" do
it_behaves_like(:array_unshift, :prepend)
end
end

View file

@ -1,36 +1,7 @@
require File.expand_path('../../../spec_helper', __FILE__)
require File.expand_path('../fixtures/classes', __FILE__)
require File.expand_path('../shared/push', __FILE__)
describe "Array#push" do
it "appends the arguments to the array" do
a = [ "a", "b", "c" ]
a.push("d", "e", "f").should equal(a)
a.push().should == ["a", "b", "c", "d", "e", "f"]
a.push(5)
a.should == ["a", "b", "c", "d", "e", "f", 5]
a = [0, 1]
a.push(2)
a.should == [0, 1, 2]
end
it "isn't confused by previous shift" do
a = [ "a", "b", "c" ]
a.shift
a.push("foo")
a.should == ["b", "c", "foo"]
end
it "properly handles recursive arrays" do
empty = ArraySpecs.empty_recursive_array
empty.push(:last).should == [empty, :last]
array = ArraySpecs.recursive_array
array.push(:last).should == [1, 'two', 3.0, array, array, array, array, array, :last]
end
it "raises a RuntimeError on a frozen array" do
lambda { ArraySpecs.frozen_array.push(1) }.should raise_error(RuntimeError)
lambda { ArraySpecs.frozen_array.push }.should raise_error(RuntimeError)
end
it_behaves_like(:array_push, :push)
end

View file

@ -0,0 +1,33 @@
describe :array_push, shared: true do
it "appends the arguments to the array" do
a = [ "a", "b", "c" ]
a.send(@method, "d", "e", "f").should equal(a)
a.send(@method).should == ["a", "b", "c", "d", "e", "f"]
a.send(@method, 5)
a.should == ["a", "b", "c", "d", "e", "f", 5]
a = [0, 1]
a.send(@method, 2)
a.should == [0, 1, 2]
end
it "isn't confused by previous shift" do
a = [ "a", "b", "c" ]
a.shift
a.send(@method, "foo")
a.should == ["b", "c", "foo"]
end
it "properly handles recursive arrays" do
empty = ArraySpecs.empty_recursive_array
empty.send(@method, :last).should == [empty, :last]
array = ArraySpecs.recursive_array
array.send(@method, :last).should == [1, 'two', 3.0, array, array, array, array, array, :last]
end
it "raises a RuntimeError on a frozen array" do
lambda { ArraySpecs.frozen_array.send(@method, 1) }.should raise_error(RuntimeError)
lambda { ArraySpecs.frozen_array.send(@method) }.should raise_error(RuntimeError)
end
end

View file

@ -0,0 +1,46 @@
describe :array_unshift, shared: true do
it "prepends object to the original array" do
a = [1, 2, 3]
a.send(@method, "a").should equal(a)
a.should == ['a', 1, 2, 3]
a.send(@method).should equal(a)
a.should == ['a', 1, 2, 3]
a.send(@method, 5, 4, 3)
a.should == [5, 4, 3, 'a', 1, 2, 3]
# shift all but one element
a = [1, 2]
a.shift
a.send(@method, 3, 4)
a.should == [3, 4, 2]
# now shift all elements
a.shift
a.shift
a.shift
a.send(@method, 3, 4)
a.should == [3, 4]
end
it "quietly ignores unshifting nothing" do
[].send(@method).should == []
end
it "properly handles recursive arrays" do
empty = ArraySpecs.empty_recursive_array
empty.send(@method, :new).should == [:new, empty]
array = ArraySpecs.recursive_array
array.send(@method, :new)
array[0..5].should == [:new, 1, 'two', 3.0, array, array]
end
it "raises a RuntimeError on a frozen array when the array is modified" do
lambda { ArraySpecs.frozen_array.send(@method, 1) }.should raise_error(RuntimeError)
end
# see [ruby-core:23666]
it "raises a RuntimeError on a frozen array when the array would not be modified" do
lambda { ArraySpecs.frozen_array.send(@method) }.should raise_error(RuntimeError)
end
end

View file

@ -66,7 +66,9 @@ describe "Array#sort" do
it "does not deal with exceptions raised by unimplemented or incorrect #<=>" do
o = Object.new
lambda { [o, 1].sort }.should raise_error
lambda {
[o, 1].sort
}.should raise_error(ArgumentError)
end
it "may take a block which is used to determine the order of objects a and b described as -1, 0 or +1" do

View file

@ -1,50 +1,7 @@
require File.expand_path('../../../spec_helper', __FILE__)
require File.expand_path('../fixtures/classes', __FILE__)
require File.expand_path('../shared/unshift', __FILE__)
describe "Array#unshift" do
it "prepends object to the original array" do
a = [1, 2, 3]
a.unshift("a").should equal(a)
a.should == ['a', 1, 2, 3]
a.unshift().should equal(a)
a.should == ['a', 1, 2, 3]
a.unshift(5, 4, 3)
a.should == [5, 4, 3, 'a', 1, 2, 3]
# shift all but one element
a = [1, 2]
a.shift
a.unshift(3, 4)
a.should == [3, 4, 2]
# now shift all elements
a.shift
a.shift
a.shift
a.unshift(3, 4)
a.should == [3, 4]
end
it "quietly ignores unshifting nothing" do
[].unshift().should == []
[].unshift(*[]).should == []
end
it "properly handles recursive arrays" do
empty = ArraySpecs.empty_recursive_array
empty.unshift(:new).should == [:new, empty]
array = ArraySpecs.recursive_array
array.unshift(:new)
array[0..5].should == [:new, 1, 'two', 3.0, array, array]
end
it "raises a RuntimeError on a frozen array when the array is modified" do
lambda { ArraySpecs.frozen_array.unshift(1) }.should raise_error(RuntimeError)
end
# see [ruby-core:23666]
it "raises a RuntimeError on a frozen array when the array would not be modified" do
lambda { ArraySpecs.frozen_array.unshift }.should raise_error(RuntimeError)
end
it_behaves_like(:array_unshift, :unshift)
end