Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 20 additions & 24 deletions core/kernel/Array_spec.rb
Original file line number Diff line number Diff line change
@@ -1,97 +1,93 @@
require_relative '../../spec_helper'
require_relative 'fixtures/classes'

describe "Kernel" do
it "has private instance method Array()" do
Kernel.private_instance_methods(false).should.include?(:Array)
end
end

describe :kernel_Array, shared: true do
describe "Kernel#Array" do
before :each do
@array = [1, 2, 3]
end

it "is a private method" do
Kernel.private_instance_methods(false).should.include?(:Array)
end

it "does not call #to_ary on an Array" do
@array.should_not_receive(:to_ary)
@object.send(@method, @array).should == @array
Array(@array).should == @array
end

it "calls #to_ary to convert the argument to an Array" do
obj = mock("Array([1,2,3])")
obj.should_receive(:to_ary).and_return(@array)
obj.should_not_receive(:to_a)

@object.send(@method, obj).should == @array
Array(obj).should == @array
end

it "does not call #to_a on an Array" do
@array.should_not_receive(:to_a)
@object.send(@method, @array).should == @array
Array(@array).should == @array
end

it "calls #to_a if the argument does not respond to #to_ary" do
obj = mock("Array([1,2,3])")
obj.should_receive(:to_a).and_return(@array)

@object.send(@method, obj).should == @array
Array(obj).should == @array
end

it "calls #to_a if #to_ary returns nil" do
obj = mock("Array([1,2,3])")
obj.should_receive(:to_ary).and_return(nil)
obj.should_receive(:to_a).and_return(@array)

@object.send(@method, obj).should == @array
Array(obj).should == @array
end

it "returns an Array containing the argument if #to_a returns nil" do
obj = mock("Array([1,2,3])")
obj.should_receive(:to_a).and_return(nil)

@object.send(@method, obj).should == [obj]
Array(obj).should == [obj]
end

it "calls #to_ary first, even if it's private" do
obj = KernelSpecs::PrivateToAry.new

@object.send(@method, obj).should == [1, 2]
Array(obj).should == [1, 2]
end

it "calls #to_a if #to_ary is not defined, even if it's private" do
obj = KernelSpecs::PrivateToA.new

@object.send(@method, obj).should == [3, 4]
Array(obj).should == [3, 4]
end

it "returns an Array containing the argument if it responds to neither #to_ary nor #to_a" do
obj = mock("Array(x)")
@object.send(@method, obj).should == [obj]
Array(obj).should == [obj]
end

it "returns an empty Array when passed nil" do
@object.send(@method, nil).should == []
Array(nil).should == []
end

it "raises a TypeError if #to_ary does not return an Array" do
obj = mock("Array() string")
obj.should_receive(:to_ary).and_return("string")

-> { @object.send(@method, obj) }.should.raise(TypeError)
-> { Array(obj) }.should.raise(TypeError)
end

it "raises a TypeError if #to_a does not return an Array" do
obj = mock("Array() string")
obj.should_receive(:to_a).and_return("string")

-> { @object.send(@method, obj) }.should.raise(TypeError)
-> { Array(obj) }.should.raise(TypeError)
end
end

describe "Kernel.Array" do
it_behaves_like :kernel_Array, :Array_method, KernelSpecs
end

describe "Kernel#Array" do
it_behaves_like :kernel_Array, :Array_function, KernelSpecs
it "is a public method" do
Kernel.public_methods(false).should.include?(:Array)
end
end
12 changes: 11 additions & 1 deletion core/kernel/Complex_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
require_relative '../../shared/kernel/complex'
require_relative 'fixtures/Complex'

describe "Kernel.Complex()" do
describe "Kernel#Complex" do
it "is a private method" do
Kernel.private_instance_methods(false).should.include?(:Complex)
end

describe "when passed [Complex, Complex]" do
it "returns a new Complex number based on the two given numbers" do
Complex(Complex(3, 4), Complex(5, 6)).should == Complex(3 - 6, 4 + 5)
Expand Down Expand Up @@ -274,3 +278,9 @@
Complex(1).frozen?.should == true
end
end

describe "Kernel.Complex" do
it "is a public method" do
Kernel.public_methods(false).should.include?(:Complex)
end
end
Loading
Loading