diff options
Diffstat (limited to 'spec/ruby/core/comparable')
| -rw-r--r-- | spec/ruby/core/comparable/between_spec.rb | 4 | ||||
| -rw-r--r-- | spec/ruby/core/comparable/clamp_spec.rb | 223 | ||||
| -rw-r--r-- | spec/ruby/core/comparable/equal_value_spec.rb | 45 | ||||
| -rw-r--r-- | spec/ruby/core/comparable/fixtures/classes.rb | 1 | ||||
| -rw-r--r-- | spec/ruby/core/comparable/gt_spec.rb | 6 | ||||
| -rw-r--r-- | spec/ruby/core/comparable/gte_spec.rb | 6 | ||||
| -rw-r--r-- | spec/ruby/core/comparable/lt_spec.rb | 12 | ||||
| -rw-r--r-- | spec/ruby/core/comparable/lte_spec.rb | 6 |
8 files changed, 229 insertions, 74 deletions
diff --git a/spec/ruby/core/comparable/between_spec.rb b/spec/ruby/core/comparable/between_spec.rb index ebeadb7569..fd79bb9b4c 100644 --- a/spec/ruby/core/comparable/between_spec.rb +++ b/spec/ruby/core/comparable/between_spec.rb @@ -1,5 +1,5 @@ -require File.expand_path('../../../spec_helper', __FILE__) -require File.expand_path('../fixtures/classes', __FILE__) +require_relative '../../spec_helper' +require_relative 'fixtures/classes' describe "Comparable#between?" do it "returns true if self is greater than or equal to the first and less than or equal to the second argument" do diff --git a/spec/ruby/core/comparable/clamp_spec.rb b/spec/ruby/core/comparable/clamp_spec.rb index 75868258b5..eb1dc1ff98 100644 --- a/spec/ruby/core/comparable/clamp_spec.rb +++ b/spec/ruby/core/comparable/clamp_spec.rb @@ -1,50 +1,223 @@ -require File.expand_path('../../../spec_helper', __FILE__) -require File.expand_path('../fixtures/classes', __FILE__) +require_relative '../../spec_helper' +require_relative 'fixtures/classes' -ruby_version_is '2.4' do - describe 'Comparable#clamp' do - it 'raises an Argument error unless given 2 parameters' do +describe 'Comparable#clamp' do + it 'raises an Argument error unless the 2 parameters are correctly ordered' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + two = ComparableSpecs::WithOnlyCompareDefined.new(2) + c = ComparableSpecs::Weird.new(3) + + -> { c.clamp(two, one) }.should.raise(ArgumentError) + one.should_receive(:<=>).any_number_of_times.and_return(nil) + -> { c.clamp(one, two) }.should.raise(ArgumentError) + end + + it 'returns self if within the given parameters' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + two = ComparableSpecs::WithOnlyCompareDefined.new(2) + three = ComparableSpecs::WithOnlyCompareDefined.new(3) + c = ComparableSpecs::Weird.new(2) + + c.clamp(one, two).should.equal?(c) + c.clamp(two, two).should.equal?(c) + c.clamp(one, three).should.equal?(c) + c.clamp(two, three).should.equal?(c) + end + + it 'returns the min parameter if less than it' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + two = ComparableSpecs::WithOnlyCompareDefined.new(2) + c = ComparableSpecs::Weird.new(0) + + c.clamp(one, two).should.equal?(one) + end + + it 'returns the max parameter if greater than it' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + two = ComparableSpecs::WithOnlyCompareDefined.new(2) + c = ComparableSpecs::Weird.new(3) + + c.clamp(one, two).should.equal?(two) + end + + context 'max is nil' do + it 'returns min if less than it' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) c = ComparableSpecs::Weird.new(0) - lambda { c.clamp(c) }.should raise_error(ArgumentError) - lambda { c.clamp(c, c, c) }.should raise_error(ArgumentError) + c.clamp(one, nil).should.equal?(one) end - it 'raises an Argument error unless the 2 parameters are correctly ordered' do + it 'always returns self if greater than min' do one = ComparableSpecs::WithOnlyCompareDefined.new(1) - two = ComparableSpecs::WithOnlyCompareDefined.new(2) - c = ComparableSpecs::Weird.new(3) + c = ComparableSpecs::Weird.new(2) + c.clamp(one, nil).should.equal?(c) + end + end - lambda { c.clamp(two, one) }.should raise_error(ArgumentError) - one.should_receive(:<=>).any_number_of_times.and_return(nil) - lambda { c.clamp(one, two) }.should raise_error(ArgumentError) + context 'min is nil' do + it 'returns max if greater than it' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + c = ComparableSpecs::Weird.new(2) + c.clamp(nil, one).should.equal?(one) end - it 'returns self if within the given parameters' do + it 'always returns self if less than max' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + c = ComparableSpecs::Weird.new(0) + c.clamp(nil, one).should.equal?(c) + end + end + + it 'always returns self when min is nil and max is nil' do + c = ComparableSpecs::Weird.new(1) + c.clamp(nil, nil).should.equal?(c) + end + + it 'returns self if within the given range parameters' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + two = ComparableSpecs::WithOnlyCompareDefined.new(2) + three = ComparableSpecs::WithOnlyCompareDefined.new(3) + c = ComparableSpecs::Weird.new(2) + + c.clamp(one..two).should.equal?(c) + c.clamp(two..two).should.equal?(c) + c.clamp(one..three).should.equal?(c) + c.clamp(two..three).should.equal?(c) + end + + it 'returns the minimum value of the range parameters if less than it' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + two = ComparableSpecs::WithOnlyCompareDefined.new(2) + c = ComparableSpecs::Weird.new(0) + + c.clamp(one..two).should.equal?(one) + end + + it 'returns the maximum value of the range parameters if greater than it' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + two = ComparableSpecs::WithOnlyCompareDefined.new(2) + c = ComparableSpecs::Weird.new(3) + + c.clamp(one..two).should.equal?(two) + end + + it 'raises an Argument error if the range parameter is exclusive' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + two = ComparableSpecs::WithOnlyCompareDefined.new(2) + c = ComparableSpecs::Weird.new(3) + + -> { c.clamp(one...two) }.should.raise(ArgumentError) + end + + context 'with nil as the max argument' do + it 'returns min argument if less than it' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + zero = ComparableSpecs::WithOnlyCompareDefined.new(0) + c = ComparableSpecs::Weird.new(0) + + c.clamp(one, nil).should.equal?(one) + c.clamp(zero, nil).should.equal?(c) + end + + it 'always returns self if greater than min argument' do one = ComparableSpecs::WithOnlyCompareDefined.new(1) two = ComparableSpecs::WithOnlyCompareDefined.new(2) - three = ComparableSpecs::WithOnlyCompareDefined.new(3) c = ComparableSpecs::Weird.new(2) - c.clamp(one, two).should equal(c) - c.clamp(two, two).should equal(c) - c.clamp(one, three).should equal(c) - c.clamp(two, three).should equal(c) + c.clamp(one, nil).should.equal?(c) + c.clamp(two, nil).should.equal?(c) end + end - it 'returns the min parameter if smaller than it' do + context 'with endless range' do + it 'returns minimum value of the range parameters if less than it' do one = ComparableSpecs::WithOnlyCompareDefined.new(1) - two = ComparableSpecs::WithOnlyCompareDefined.new(2) + zero = ComparableSpecs::WithOnlyCompareDefined.new(0) c = ComparableSpecs::Weird.new(0) - c.clamp(one, two).should equal(one) + c.clamp(one..).should.equal?(one) + c.clamp(zero..).should.equal?(c) end - it 'returns the max parameter if greater than it' do + it 'always returns self if greater than minimum value of the range parameters' do one = ComparableSpecs::WithOnlyCompareDefined.new(1) two = ComparableSpecs::WithOnlyCompareDefined.new(2) - c = ComparableSpecs::Weird.new(3) + c = ComparableSpecs::Weird.new(2) + + c.clamp(one..).should.equal?(c) + c.clamp(two..).should.equal?(c) + end + + it 'works with exclusive range' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + c = ComparableSpecs::Weird.new(2) + + c.clamp(one...).should.equal?(c) + end + end + + context 'with nil as the min argument' do + it 'returns max argument if greater than it' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + c = ComparableSpecs::Weird.new(2) + + c.clamp(nil, one).should.equal?(one) + end + + it 'always returns self if less than max argument' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + zero = ComparableSpecs::WithOnlyCompareDefined.new(0) + c = ComparableSpecs::Weird.new(0) + + c.clamp(nil, one).should.equal?(c) + c.clamp(nil, zero).should.equal?(c) + end + end + + context 'with beginless range' do + it 'returns maximum value of the range parameters if greater than it' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + c = ComparableSpecs::Weird.new(2) + + c.clamp(..one).should.equal?(one) + end + + it 'always returns self if less than maximum value of the range parameters' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + zero = ComparableSpecs::WithOnlyCompareDefined.new(0) + c = ComparableSpecs::Weird.new(0) + + c.clamp(..one).should.equal?(c) + c.clamp(..zero).should.equal?(c) + end + + it 'raises an Argument error if the range parameter is exclusive' do + one = ComparableSpecs::WithOnlyCompareDefined.new(1) + c = ComparableSpecs::Weird.new(0) + + -> { c.clamp(...one) }.should.raise(ArgumentError) + end + end + + context 'with nil as the min and the max argument' do + it 'always returns self' do + c = ComparableSpecs::Weird.new(1) + + c.clamp(nil, nil).should.equal?(c) + end + end + + context 'with beginless-and-endless range' do + it 'always returns self' do + c = ComparableSpecs::Weird.new(1) + + c.clamp(nil..nil).should.equal?(c) + end + + it 'works with exclusive range' do + c = ComparableSpecs::Weird.new(2) - c.clamp(one, two).should equal(two) + c.clamp(nil...nil).should.equal?(c) end end end diff --git a/spec/ruby/core/comparable/equal_value_spec.rb b/spec/ruby/core/comparable/equal_value_spec.rb index 2bc22771b4..3af40d1c7e 100644 --- a/spec/ruby/core/comparable/equal_value_spec.rb +++ b/spec/ruby/core/comparable/equal_value_spec.rb @@ -1,5 +1,5 @@ -require File.expand_path('../../../spec_helper', __FILE__) -require File.expand_path('../fixtures/classes', __FILE__) +require_relative '../../spec_helper' +require_relative 'fixtures/classes' describe "Comparable#==" do a = b = nil @@ -39,7 +39,7 @@ describe "Comparable#==" do end it "returns false" do - (a == b).should be_false + (a == b).should == false end end @@ -48,16 +48,8 @@ describe "Comparable#==" do a.should_receive(:<=>).once.and_return("abc") end - ruby_version_is ""..."2.3" do - it "returns false" do - (a == b).should be_false - end - end - - ruby_version_is "2.3" do - it "raises an ArgumentError" do - lambda { (a == b) }.should raise_error(ArgumentError) - end + it "raises an ArgumentError" do + -> { (a == b) }.should.raise(ArgumentError) end end @@ -67,17 +59,8 @@ describe "Comparable#==" do a.should_receive(:<=>).once.and_raise(StandardError) end - ruby_version_is ""..."2.3" do - # Behaviour confirmed by MRI test suite - it "returns false" do - (a == b).should be_false - end - end - - ruby_version_is "2.3" do - it "lets it go through" do - lambda { (a == b) }.should raise_error(StandardError) - end + it "lets it go through" do + -> { (a == b) }.should.raise(StandardError) end end @@ -87,22 +70,14 @@ describe "Comparable#==" do a.should_receive(:<=>).once.and_raise(TypeError) end - ruby_version_is ""..."2.3" do - it "returns false" do - (a == b).should be_false - end - end - - ruby_version_is "2.3" do - it "lets it go through" do - lambda { (a == b) }.should raise_error(TypeError) - end + it "lets it go through" do + -> { (a == b) }.should.raise(TypeError) end end it "lets it go through if it is not a StandardError" do a.should_receive(:<=>).once.and_raise(Exception) - lambda { (a == b) }.should raise_error(Exception) + -> { (a == b) }.should.raise(Exception) end end diff --git a/spec/ruby/core/comparable/fixtures/classes.rb b/spec/ruby/core/comparable/fixtures/classes.rb index 4239a47d2f..2bdabbf014 100644 --- a/spec/ruby/core/comparable/fixtures/classes.rb +++ b/spec/ruby/core/comparable/fixtures/classes.rb @@ -7,6 +7,7 @@ module ComparableSpecs end def <=>(other) + return nil if other.nil? self.value <=> other.value end end diff --git a/spec/ruby/core/comparable/gt_spec.rb b/spec/ruby/core/comparable/gt_spec.rb index c4739bcf2a..cebb5464ad 100644 --- a/spec/ruby/core/comparable/gt_spec.rb +++ b/spec/ruby/core/comparable/gt_spec.rb @@ -1,5 +1,5 @@ -require File.expand_path('../../../spec_helper', __FILE__) -require File.expand_path('../fixtures/classes', __FILE__) +require_relative '../../spec_helper' +require_relative 'fixtures/classes' describe "Comparable#>" do it "calls #<=> on self with other and returns true if #<=> returns any Integer greater than 0" do @@ -38,6 +38,6 @@ describe "Comparable#>" do b = ComparableSpecs::Weird.new(20) a.should_receive(:<=>).any_number_of_times.and_return(nil) - lambda { (a > b) }.should raise_error(ArgumentError) + -> { (a > b) }.should.raise(ArgumentError) end end diff --git a/spec/ruby/core/comparable/gte_spec.rb b/spec/ruby/core/comparable/gte_spec.rb index c9d8264ee6..16da81b3ea 100644 --- a/spec/ruby/core/comparable/gte_spec.rb +++ b/spec/ruby/core/comparable/gte_spec.rb @@ -1,5 +1,5 @@ -require File.expand_path('../fixtures/classes', __FILE__) -require File.expand_path('../../../spec_helper', __FILE__) +require_relative 'fixtures/classes' +require_relative '../../spec_helper' describe "Comparable#>=" do it "calls #<=> on self with other and returns true if #<=> returns 0 or any Integer greater than 0" do @@ -42,6 +42,6 @@ describe "Comparable#>=" do b = ComparableSpecs::Weird.new(20) a.should_receive(:<=>).any_number_of_times.and_return(nil) - lambda { (a >= b) }.should raise_error(ArgumentError) + -> { (a >= b) }.should.raise(ArgumentError) end end diff --git a/spec/ruby/core/comparable/lt_spec.rb b/spec/ruby/core/comparable/lt_spec.rb index e9e76360b9..175646d0d7 100644 --- a/spec/ruby/core/comparable/lt_spec.rb +++ b/spec/ruby/core/comparable/lt_spec.rb @@ -1,5 +1,5 @@ -require File.expand_path('../../../spec_helper', __FILE__) -require File.expand_path('../fixtures/classes', __FILE__) +require_relative '../../spec_helper' +require_relative 'fixtures/classes' describe "Comparable#<" do it "calls #<=> on self with other and returns true if #<=> returns any Integer less than 0" do @@ -38,6 +38,12 @@ describe "Comparable#<" do b = ComparableSpecs::Weird.new(20) a.should_receive(:<=>).any_number_of_times.and_return(nil) - lambda { (a < b) }.should raise_error(ArgumentError) + -> { (a < b) }.should.raise(ArgumentError) + end + + it "raises an argument error with a message containing the value" do + -> { ("foo" < 7) }.should.raise(ArgumentError) { |e| + e.message.should.include? "String with 7 failed" + } end end diff --git a/spec/ruby/core/comparable/lte_spec.rb b/spec/ruby/core/comparable/lte_spec.rb index 96ed38ecd5..8cbbd5ebb4 100644 --- a/spec/ruby/core/comparable/lte_spec.rb +++ b/spec/ruby/core/comparable/lte_spec.rb @@ -1,5 +1,5 @@ -require File.expand_path('../../../spec_helper', __FILE__) -require File.expand_path('../fixtures/classes', __FILE__) +require_relative '../../spec_helper' +require_relative 'fixtures/classes' describe "Comparable#<=" do it "calls #<=> on self with other and returns true if #<=> returns 0 or any Integer less than 0" do @@ -41,6 +41,6 @@ describe "Comparable#<=" do b = ComparableSpecs::Weird.new(20) a.should_receive(:<=>).any_number_of_times.and_return(nil) - lambda { (a <= b) }.should raise_error(ArgumentError) + -> { (a <= b) }.should.raise(ArgumentError) end end |
