summaryrefslogtreecommitdiff
path: root/spec/ruby/core/struct
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/struct')
-rw-r--r--spec/ruby/core/struct/deconstruct_spec.rb7
-rw-r--r--spec/ruby/core/struct/filter_spec.rb10
-rw-r--r--spec/ruby/core/struct/inspect_spec.rb5
-rw-r--r--spec/ruby/core/struct/length_spec.rb8
-rw-r--r--spec/ruby/core/struct/select_spec.rb25
-rw-r--r--spec/ruby/core/struct/shared/inspect.rb40
-rw-r--r--spec/ruby/core/struct/shared/select.rb26
-rw-r--r--spec/ruby/core/struct/size_spec.rb5
-rw-r--r--spec/ruby/core/struct/to_s_spec.rb39
-rw-r--r--spec/ruby/core/struct/values_spec.rb7
10 files changed, 74 insertions, 98 deletions
diff --git a/spec/ruby/core/struct/deconstruct_spec.rb b/spec/ruby/core/struct/deconstruct_spec.rb
index 32d4f6bac4..aad82ac2ba 100644
--- a/spec/ruby/core/struct/deconstruct_spec.rb
+++ b/spec/ruby/core/struct/deconstruct_spec.rb
@@ -1,10 +1,7 @@
require_relative '../../spec_helper'
describe "Struct#deconstruct" do
- it "returns an array of attribute values" do
- struct = Struct.new(:x, :y)
- s = struct.new(1, 2)
-
- s.deconstruct.should == [1, 2]
+ it "is an alias of Struct#to_a" do
+ Struct.instance_method(:deconstruct).should == Struct.instance_method(:to_a)
end
end
diff --git a/spec/ruby/core/struct/filter_spec.rb b/spec/ruby/core/struct/filter_spec.rb
index 0ccd8ad6b2..5d11f47e6b 100644
--- a/spec/ruby/core/struct/filter_spec.rb
+++ b/spec/ruby/core/struct/filter_spec.rb
@@ -1,10 +1,8 @@
require_relative '../../spec_helper'
-require_relative 'shared/select'
-require_relative 'shared/accessor'
-require_relative '../enumerable/shared/enumeratorized'
+require_relative 'fixtures/classes'
describe "Struct#filter" do
- it_behaves_like :struct_select, :filter
- it_behaves_like :struct_accessor, :filter
- it_behaves_like :enumeratorized_with_origin_size, :filter, Struct.new(:foo).new
+ it "is an alias of Struct#select" do
+ StructClasses::Car.instance_method(:filter).should == StructClasses::Car.instance_method(:select)
+ end
end
diff --git a/spec/ruby/core/struct/inspect_spec.rb b/spec/ruby/core/struct/inspect_spec.rb
index 657b06abc1..13fd0bef41 100644
--- a/spec/ruby/core/struct/inspect_spec.rb
+++ b/spec/ruby/core/struct/inspect_spec.rb
@@ -1,7 +1,8 @@
require_relative '../../spec_helper'
require_relative 'fixtures/classes'
-require_relative 'shared/inspect'
describe "Struct#inspect" do
- it_behaves_like :struct_inspect, :inspect
+ it "is an alias of Struct#to_s" do
+ StructClasses::Car.instance_method(:inspect).should == StructClasses::Car.instance_method(:to_s)
+ end
end
diff --git a/spec/ruby/core/struct/length_spec.rb b/spec/ruby/core/struct/length_spec.rb
index 1143676122..8d48f4118d 100644
--- a/spec/ruby/core/struct/length_spec.rb
+++ b/spec/ruby/core/struct/length_spec.rb
@@ -1,12 +1,8 @@
require_relative '../../spec_helper'
require_relative 'fixtures/classes'
-require_relative 'shared/accessor'
describe "Struct#length" do
- it "returns the number of attributes" do
- StructClasses::Car.new('Cadillac', 'DeVille').length.should == 3
- StructClasses::Car.new.length.should == 3
+ it "is an alias of Struct#size" do
+ StructClasses::Car.instance_method(:length).should == StructClasses::Car.instance_method(:size)
end
-
- it_behaves_like :struct_accessor, :length
end
diff --git a/spec/ruby/core/struct/select_spec.rb b/spec/ruby/core/struct/select_spec.rb
index ee846ec45f..5f26a177eb 100644
--- a/spec/ruby/core/struct/select_spec.rb
+++ b/spec/ruby/core/struct/select_spec.rb
@@ -1,10 +1,31 @@
require_relative '../../spec_helper'
-require_relative 'shared/select'
+require_relative 'fixtures/classes'
require_relative 'shared/accessor'
require_relative '../enumerable/shared/enumeratorized'
describe "Struct#select" do
- it_behaves_like :struct_select, :select
it_behaves_like :struct_accessor, :select
it_behaves_like :enumeratorized_with_origin_size, :select, Struct.new(:foo).new
+
+ it "raises an ArgumentError if given any non-block arguments" do
+ struct = StructClasses::Car.new
+ -> { struct.select(1) { } }.should.raise(ArgumentError)
+ end
+
+ it "returns a new array of elements for which block is true" do
+ struct = StructClasses::Car.new("Toyota", "Tercel", "2000")
+ struct.select { |i| i == "2000" }.should == [ "2000" ]
+ end
+
+ it "returns an instance of Array" do
+ struct = StructClasses::Car.new("Ford", "Escort", "1995")
+ struct.select { true }.should.instance_of?(Array)
+ end
+
+ describe "without block" do
+ it "returns an instance of Enumerator" do
+ struct = Struct.new(:foo).new
+ struct.select.should.instance_of?(Enumerator)
+ end
+ end
end
diff --git a/spec/ruby/core/struct/shared/inspect.rb b/spec/ruby/core/struct/shared/inspect.rb
deleted file mode 100644
index 1a0fb6a6b2..0000000000
--- a/spec/ruby/core/struct/shared/inspect.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-describe :struct_inspect, shared: true do
- it "returns a string representation showing members and values" do
- car = StructClasses::Car.new('Ford', 'Ranger')
- car.send(@method).should == '#<struct StructClasses::Car make="Ford", model="Ranger", year=nil>'
- end
-
- it "returns a string representation without the class name for anonymous structs" do
- Struct.new(:a).new("").send(@method).should == '#<struct a="">'
- end
-
- it "returns a string representation without the class name for structs nested in anonymous classes" do
- c = Class.new
- c.class_eval <<~DOC
- class Foo < Struct.new(:a); end
- DOC
-
- c::Foo.new("").send(@method).should == '#<struct a="">'
- end
-
- it "returns a string representation without the class name for structs nested in anonymous modules" do
- m = Module.new
- m.module_eval <<~DOC
- class Foo < Struct.new(:a); end
- DOC
-
- m::Foo.new("").send(@method).should == '#<struct a="">'
- end
-
- it "does not call #name method" do
- struct = StructClasses::StructWithOverriddenName.new("")
- struct.send(@method).should == '#<struct StructClasses::StructWithOverriddenName a="">'
- end
-
- it "does not call #name method when struct is anonymous" do
- struct = Struct.new(:a)
- def struct.name; "A"; end
-
- struct.new("").send(@method).should == '#<struct a="">'
- end
-end
diff --git a/spec/ruby/core/struct/shared/select.rb b/spec/ruby/core/struct/shared/select.rb
deleted file mode 100644
index dfa1a809fe..0000000000
--- a/spec/ruby/core/struct/shared/select.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require_relative '../../../spec_helper'
-require_relative '../fixtures/classes'
-
-describe :struct_select, shared: true do
- it "raises an ArgumentError if given any non-block arguments" do
- struct = StructClasses::Car.new
- -> { struct.send(@method, 1) { } }.should.raise(ArgumentError)
- end
-
- it "returns a new array of elements for which block is true" do
- struct = StructClasses::Car.new("Toyota", "Tercel", "2000")
- struct.send(@method) { |i| i == "2000" }.should == [ "2000" ]
- end
-
- it "returns an instance of Array" do
- struct = StructClasses::Car.new("Ford", "Escort", "1995")
- struct.send(@method) { true }.should.instance_of?(Array)
- end
-
- describe "without block" do
- it "returns an instance of Enumerator" do
- struct = Struct.new(:foo).new
- struct.send(@method).should.instance_of?(Enumerator)
- end
- end
-end
diff --git a/spec/ruby/core/struct/size_spec.rb b/spec/ruby/core/struct/size_spec.rb
index 09f260cf20..5f07320bb9 100644
--- a/spec/ruby/core/struct/size_spec.rb
+++ b/spec/ruby/core/struct/size_spec.rb
@@ -3,8 +3,9 @@ require_relative 'fixtures/classes'
require_relative 'shared/accessor'
describe "Struct#size" do
- it "is a synonym for length" do
- StructClasses::Car.new.size.should == StructClasses::Car.new.length
+ it "returns the number of attributes" do
+ StructClasses::Car.new('Cadillac', 'DeVille').length.should == 3
+ StructClasses::Car.new.length.should == 3
end
it_behaves_like :struct_accessor, :size
diff --git a/spec/ruby/core/struct/to_s_spec.rb b/spec/ruby/core/struct/to_s_spec.rb
index 94c672d3d5..9648b8af9b 100644
--- a/spec/ruby/core/struct/to_s_spec.rb
+++ b/spec/ruby/core/struct/to_s_spec.rb
@@ -1,12 +1,43 @@
require_relative '../../spec_helper'
require_relative 'fixtures/classes'
-require_relative 'shared/inspect'
describe "Struct#to_s" do
- it "is a synonym for inspect" do
+ it "returns a string representation showing members and values" do
car = StructClasses::Car.new('Ford', 'Ranger')
- car.inspect.should == car.to_s
+ car.to_s.should == '#<struct StructClasses::Car make="Ford", model="Ranger", year=nil>'
end
- it_behaves_like :struct_inspect, :to_s
+ it "returns a string representation without the class name for anonymous structs" do
+ Struct.new(:a).new("").to_s.should == '#<struct a="">'
+ end
+
+ it "returns a string representation without the class name for structs nested in anonymous classes" do
+ c = Class.new
+ c.class_eval <<~DOC
+ class Foo < Struct.new(:a); end
+ DOC
+
+ c::Foo.new("").to_s.should == '#<struct a="">'
+ end
+
+ it "returns a string representation without the class name for structs nested in anonymous modules" do
+ m = Module.new
+ m.module_eval <<~DOC
+ class Foo < Struct.new(:a); end
+ DOC
+
+ m::Foo.new("").to_s.should == '#<struct a="">'
+ end
+
+ it "does not call #name method" do
+ struct = StructClasses::StructWithOverriddenName.new("")
+ struct.to_s.should == '#<struct StructClasses::StructWithOverriddenName a="">'
+ end
+
+ it "does not call #name method when struct is anonymous" do
+ struct = Struct.new(:a)
+ def struct.name; "A"; end
+
+ struct.new("").to_s.should == '#<struct a="">'
+ end
end
diff --git a/spec/ruby/core/struct/values_spec.rb b/spec/ruby/core/struct/values_spec.rb
index b2d11725b9..16583253d7 100644
--- a/spec/ruby/core/struct/values_spec.rb
+++ b/spec/ruby/core/struct/values_spec.rb
@@ -2,10 +2,7 @@ require_relative '../../spec_helper'
require_relative 'fixtures/classes'
describe "Struct#values" do
- it "is a synonym for to_a" do
- car = StructClasses::Car.new('Nissan', 'Maxima')
- car.values.should == car.to_a
-
- StructClasses::Car.new.values.should == StructClasses::Car.new.to_a
+ it "is an alias of Struct#to_a" do
+ StructClasses::Car.instance_method(:values).should == StructClasses::Car.instance_method(:to_a)
end
end