diff options
Diffstat (limited to 'spec/ruby/core/struct')
| -rw-r--r-- | spec/ruby/core/struct/new_spec.rb | 43 | ||||
| -rw-r--r-- | spec/ruby/core/struct/shared/equal_value.rb | 7 |
2 files changed, 50 insertions, 0 deletions
diff --git a/spec/ruby/core/struct/new_spec.rb b/spec/ruby/core/struct/new_spec.rb index f43e764cb8..a77b3ac651 100644 --- a/spec/ruby/core/struct/new_spec.rb +++ b/spec/ruby/core/struct/new_spec.rb @@ -131,4 +131,47 @@ describe "Struct.new" do lambda { StructClasses::Ruby.new('2.0', 'i686', true) }.should raise_error(ArgumentError) end end + + ruby_version_is "2.5" do + context "keyword_init: true option" do + before :all do + @struct_with_kwa = Struct.new(:name, :legs, keyword_init: true) + @struct_without_kwa = Struct.new(:name, :legs, keyword_init: false) + end + + it "creates a class that accepts keyword arguments to initialize" do + obj = @struct_with_kwa.new(name: "elefant", legs: 4) + obj.name.should == "elefant" + obj.legs.should == 4 + end + + describe "new class instantiation" do + it "accepts arguments as hash as well" do + obj = @struct_with_kwa.new({name: "elefant", legs: 4}) + obj.name.should == "elefant" + obj.legs.should == 4 + end + + it "raises ArgumentError when passed not declared keyword argument" do + -> { + @struct_with_kwa.new(name: "elefant", legs: 4, foo: "bar") + }.should raise_error(ArgumentError, /unknown keywords: foo/) + end + + it "raises ArgumentError when passed a list of arguments" do + -> { + @struct_with_kwa.new("elefant", 4) + }.should raise_error(ArgumentError, /wrong number of arguments/) + end + end + end + + context "keyword_init: false option" do + it "behaves like it does without :keyword_init option" do + obj = @struct_without_kwa.new("elefant", 4) + obj.name.should == "elefant" + obj.legs.should == 4 + end + end + end end diff --git a/spec/ruby/core/struct/shared/equal_value.rb b/spec/ruby/core/struct/shared/equal_value.rb index 711862cb44..a7e0856df5 100644 --- a/spec/ruby/core/struct/shared/equal_value.rb +++ b/spec/ruby/core/struct/shared/equal_value.rb @@ -16,6 +16,13 @@ describe :struct_equal_value, shared: true do car.send(@method, different_car).should == false end + it "returns false if other is of a different class" do + car = StructClasses::Car.new("Honda", "Accord", "1998") + klass = Struct.new(:make, :model, :year) + clone = klass.new("Honda", "Accord", "1998") + car.send(@method, clone).should == false + end + it "handles recursive structures by returning false if a difference can be found" do x = StructClasses::Car.new("Honda", "Accord", "1998") x[:make] = x |
