Class: Loupe::Expectation
- Inherits:
-
Object
- Object
- Loupe::Expectation
- Defined in:
- lib/loupe/expectation.rb
Overview
Expectation
This class is responsible for instantiating a target so that expectations can be invoked on it.
Example:
expectation = Expectation.new(target, test)
expectation.to_be_empty
The goal of ths class is so that expectations can be written in such a way that they read in plain English. E.g.: expect(something).to_be_truthy
Defined Under Namespace
Classes: ExpectationFailed
Instance Method Summary collapse
- #initialize(target, test) ⇒ Loupe::Expectation constructor
-
#to_be(predicate) ⇒ Loupe::Expectation
expect(target).to_be(predicate).
-
#to_be_a_kind_of(klass) ⇒ Loupe::Expectation
expect(target).to_be_a_kind_of(klass).
-
#to_be_an_existing_path ⇒ Loupe::Expectation
expect(target).to_be_an_existing_path.
-
#to_be_an_instance_of(klass) ⇒ Loupe::Expectation
expect(target).to_be_an_instance_of(klass).
-
#to_be_empty ⇒ Loupe::Expectation
expect(target).to_be_empty.
-
#to_be_equal_to(value) ⇒ Loupe::Expectation
expect(target).to_be_equal_to(value).
-
#to_be_falsey ⇒ Loupe::Expectation
expect(target).to_be_falsey.
-
#to_be_in_delta_of(value, delta = 0.001) ⇒ Loupe::Expectation
expect(target).to_be_in_delta_of(value, delta = 0.001).
-
#to_be_in_epsilon_of(value, epsilon = 0.001) ⇒ Loupe::Expectation
expect(target).to_be_in_epsilon_of(value, epsilon = 0.001).
-
#to_be_nil ⇒ Loupe::Expectation
expect(target).to_be_nil.
-
#to_be_the_same_as(object) ⇒ Loupe::Expectation
expect(target).to_be_the_same_as(object).
-
#to_be_truthy ⇒ Loupe::Expectation
expect(target).to_be_truthy.
-
#to_include(object) ⇒ Loupe::Expectation
expect(target).to_include(object).
-
#to_match(object) ⇒ Loupe::Expectation
expect(target).to_match(object).
-
#to_not_be(predicate) ⇒ Loupe::Expectation
expect(target).to_not_be(predicate).
-
#to_not_be_a_kind_of(klass) ⇒ Loupe::Expectation
expect(target).to_not_be_a_kind_of(klass).
-
#to_not_be_an_existing_path ⇒ Loupe::Expectation
expect(target).to_not_be_an_existing_path.
-
#to_not_be_an_instance_of(klass) ⇒ Loupe::Expectation
expect(target).to_not_be_an_instance_of(klass).
-
#to_not_be_empty ⇒ Loupe::Expectation
expect(target).to_not_be_empty.
-
#to_not_be_equal_to(value) ⇒ Loupe::Expectation
expect(target).to_not_be_equal_to(value).
-
#to_not_be_in_delta_of(value, delta = 0.001) ⇒ Loupe::Expectation
expect(target).to_not_be_in_delta_of(value, delta = 0.001).
-
#to_not_be_in_epsilon_of(value, epsilon = 0.001) ⇒ Loupe::Expectation
expect(target).to_not_be_in_epsilon_of(value, epsilon = 0.001).
-
#to_not_be_nil ⇒ Loupe::Expectation
expect(target).to_not_be_nil.
-
#to_not_be_the_same_as(object) ⇒ Loupe::Expectation
expect(target).to_not_be_the_same_as(object).
-
#to_not_include(object) ⇒ Loupe::Expectation
expect(target).to_not_include(object).
-
#to_not_match(object) ⇒ Loupe::Expectation
expect(target).to_not_match(object).
-
#to_not_respond_to(method) ⇒ Loupe::Expectation
expect(target).to_not_respond_to(method).
-
#to_not_satisfy_operator(operator, other) ⇒ Loupe::Expectation
expect(target).to_not_satisfy_operator(operator, other).
-
#to_respond_to(method) ⇒ Loupe::Expectation
expect(target).to_respond_to(method).
-
#to_satisfy_operator(operator, other) ⇒ Loupe::Expectation
expect(target).to_satisfy_operator(operator, other).
Constructor Details
#initialize(target, test) ⇒ Loupe::Expectation
69 70 71 72 73 |
# File 'lib/loupe/expectation.rb', line 69 def initialize(target, test) @target = target @color = test.color @test = test end |
Instance Method Details
#to_be(predicate) ⇒ Loupe::Expectation
expect(target).to_be(predicate)
Expects target to return true for a given predicate. In this expectation, predicate is a method name and
the expectation will pass if invoking the method on target returns true.
Example:
Verify if the result of a calculation is an odd number. The `target` is the calculation result
and the `predicate` is the method `odd?`.
calculation_result = a_complex_math_operation
expect(calculation_result).to_be(:odd?)
281 282 283 284 285 286 |
# File 'lib/loupe/expectation.rb', line 281 def to_be(predicate) assert( @target.public_send(predicate), "Expected #{@color.p(@target.inspect, :red)} to be #{@color.p(predicate, :green)}." ) end |
#to_be_a_kind_of(klass) ⇒ Loupe::Expectation
expect(target).to_be_a_kind_of(klass)
Expects target to be a kind of klass. Which means that if target.is_a?(klass) returns true,
the expectation will pass.
246 247 248 249 250 251 |
# File 'lib/loupe/expectation.rb', line 246 def to_be_a_kind_of(klass) = "Expected #{@color.p(@target.inspect, :red)} to be a kind of " \ "#{@color.p(klass, :green)}, not #{@color.p(@target.inspect.class, :red)}." assert(@target.is_a?(klass), ) end |
#to_be_an_existing_path ⇒ Loupe::Expectation
expect(target).to_be_an_existing_path
Expects target to be an existing path in the file system. That means, invoking File.exist?(target)
must return true for this expectation to pass.
384 385 386 |
# File 'lib/loupe/expectation.rb', line 384 def to_be_an_existing_path assert(File.exist?(@target), "Expected path '#{@color.p(@target.inspect, :red)}' to exist.") end |
#to_be_an_instance_of(klass) ⇒ Loupe::Expectation
expect(target).to_be_an_instance_of(klass)
Expects target to be an instance of klass. For example, "ruby is awesome" is
an instance of String and will pass the expectation.
218 219 220 221 222 223 |
# File 'lib/loupe/expectation.rb', line 218 def to_be_an_instance_of(klass) = "Expected #{@color.p(@target.inspect, :red)} to be an instance " \ "of #{@color.p(klass, :green)}, not #{@color.p(@target.inspect.class, :red)}." assert(@target.instance_of?(klass), ) end |
#to_be_empty ⇒ Loupe::Expectation
expect(target).to_be_empty
Expects target to be empty. Which means invoking empty? must return true.
126 127 128 |
# File 'lib/loupe/expectation.rb', line 126 def to_be_empty assert(@target.empty?, "Expected #{@color.p(@target.inspect, :red)} to be empty.") end |
#to_be_equal_to(value) ⇒ Loupe::Expectation
expect(target).to_be_equal_to(value)
Expects target to be equal to value. Compares if the objects are equal in terms of values
but not if the objects are the exact same instance. For comparing identity, use #to_be_the_same_as.
100 101 102 103 104 105 |
# File 'lib/loupe/expectation.rb', line 100 def to_be_equal_to(value) assert( @target == value, "Expected #{@color.p(@target.inspect, :red)} to be equal to #{@color.p(value.inspect, :green)}." ) end |
#to_be_falsey ⇒ Loupe::Expectation
expect(target).to_be_falsey
Expects target to be a falsey value (nil or false).
89 90 91 |
# File 'lib/loupe/expectation.rb', line 89 def to_be_falsey assert(!@target, "Expected #{@color.p(@target.inspect, :red)} to be #{@color.p('falsey', :green)}.") end |
#to_be_in_delta_of(value, delta = 0.001) ⇒ Loupe::Expectation
expect(target).to_be_in_delta_of(value, delta = 0.001)
Expects target to be within delta of value. This means that the absolute difference between
target and value cannot be bigger than delta.
Example:
expect(5.0).to_be_in_delta_of(5.1, 0.2)
409 410 411 412 413 414 415 416 |
# File 'lib/loupe/expectation.rb', line 409 def to_be_in_delta_of(value, delta = 0.001) difference = (@target - value).abs = "Expected |#{@target} - #{value}| " \ "(#{@color.p(difference, :red)}) to be <= #{@color.p(delta, :green)}." assert(delta >= difference, ) end |
#to_be_in_epsilon_of(value, epsilon = 0.001) ⇒ Loupe::Expectation
expect(target).to_be_in_epsilon_of(value, epsilon = 0.001)
Expects target to be within epsilon times the smallest absolute value between value and target.
This expectation simply invokes #to_be_in_delta_of,
where the delta is epsilon * [@target.abs, value.abs].min.
Example:
The minimum absolute value between 5.0 and 5.1 is equal to 5.0.
The delta is equal to 5.0 * 0.1, which is 0.5.
The absolute difference 5.1 - 5.0 is 0.1.
0.1 is smaller than 0.5, therefore the expectation passes.
expect(5.0).to_be_in_epsilon_of(5.1, 0.1)
455 456 457 |
# File 'lib/loupe/expectation.rb', line 455 def to_be_in_epsilon_of(value, epsilon = 0.001) to_be_in_delta_of(value, [@target.abs, value.abs].min * epsilon) end |
#to_be_nil ⇒ Loupe::Expectation
expect(target).to_be_nil
Expects target to be nil.
198 199 200 |
# File 'lib/loupe/expectation.rb', line 198 def to_be_nil assert(@target.nil?, "Expected #{@color.p(@target.inspect, :red)} to be nil.") end |
#to_be_the_same_as(object) ⇒ Loupe::Expectation
expect(target).to_be_the_same_as(object)
Expects target to be the same as object. This means, target and object must be the exact same
object, with the same object_id.
354 355 356 357 358 359 |
# File 'lib/loupe/expectation.rb', line 354 def to_be_the_same_as(object) = "Expected #{@color.p(@target.inspect, :red)} (#{@color.p(@target.inspect.object_id, :red)}) " \ "to be the same as #{@color.p(object, :green)} (#{@color.p(object.object_id, :green)})." assert(@target.equal?(object), ) end |
#to_be_truthy ⇒ Loupe::Expectation
expect(target).to_be_truthy
Expects target to be a truthy value (not nil or false).
80 81 82 |
# File 'lib/loupe/expectation.rb', line 80 def to_be_truthy assert(@target, "Expected #{@color.p(@target.inspect, :red)} to be #{@color.p('truthy', :green)}.") end |
#to_include(object) ⇒ Loupe::Expectation
expect(target).to_include(object)
Expects target to include object. In this expectation, target is typically a collection
or another object that responds to include?. The expectation passes if target includes object.
172 173 174 175 176 177 |
# File 'lib/loupe/expectation.rb', line 172 def to_include(object) assert( @target.include?(object), "Expected #{@color.p(@target.inspect, :red)} to include #{@color.p(object, :green)}." ) end |
#to_match(object) ⇒ Loupe::Expectation
expect(target).to_match(object)
Expects target to match object. In this expectation, target is a matcher (string or a regex)
that must match object. The matcher needs to respond to =~ and needs to return true when it is
invoked with object.
Example:
expect(/ruby .*/).to_match("ruby is awesome")
expect("awesome").to_match("ruby is awesome")
321 322 323 324 325 326 |
# File 'lib/loupe/expectation.rb', line 321 def to_match(object) to_respond_to(:=~) @target = Regexp.new(Regexp.escape(@target)) if @target.is_a?(String) assert(@target =~ object, "Expected #{@color.p(@target.inspect, :red)} to match #{@color.p(object, :green)}.") end |
#to_not_be(predicate) ⇒ Loupe::Expectation
expect(target).to_not_be(predicate)
Expects target to return false for a given predicate. In this expectation, predicate is a method name and
the expectation will pass if invoking the method on target returns false.
Example:
Verify if the result of a calculation is not zero. The `target` is the calculation result
and the `predicate` is the method `zero?`.
calculation_result = a_complex_math_operation
expect(calculation_result).to_not_be(:zero?)
302 303 304 305 306 307 |
# File 'lib/loupe/expectation.rb', line 302 def to_not_be(predicate) assert( !@target.public_send(predicate), "Expected #{@color.p(@target.inspect, :red)} to not be #{@color.p(predicate, :green)}." ) end |
#to_not_be_a_kind_of(klass) ⇒ Loupe::Expectation
expect(target).to_not_be_a_kind_of(klass)
Expects target to not be a kind of klass. Which means that if target.is_a?(klass) returns false,
the expectation will pass.
260 261 262 263 264 265 |
# File 'lib/loupe/expectation.rb', line 260 def to_not_be_a_kind_of(klass) = "Expected #{@color.p(@target.inspect, :red)} to not be a kind of " \ "#{@color.p(klass, :green)}, not #{@color.p(@target.inspect.class, :red)}." assert(!@target.is_a?(klass), ) end |
#to_not_be_an_existing_path ⇒ Loupe::Expectation
expect(target).to_not_be_an_existing_path
Expects target to not be an existing path in the file system. That means, invoking File.exist?(target)
must return false for this expectation to pass.
394 395 396 |
# File 'lib/loupe/expectation.rb', line 394 def to_not_be_an_existing_path assert(!File.exist?(@target), "Expected path '#{@color.p(@target.inspect, :red)}' to not exist.") end |
#to_not_be_an_instance_of(klass) ⇒ Loupe::Expectation
expect(target).to_not_be_an_instance_of(klass)
Expects target to not be an instance of klass. For example, "ruby is awesome" is
not an instance of Integer and will not pass the expectation.
232 233 234 235 236 237 |
# File 'lib/loupe/expectation.rb', line 232 def to_not_be_an_instance_of(klass) = "Expected #{@color.p(@target.inspect, :red)} to not be an instance of " \ "#{@color.p(klass, :green)}, not #{@color.p(@target.inspect.class, :red)}." assert(!@target.instance_of?(klass), ) end |
#to_not_be_empty ⇒ Loupe::Expectation
expect(target).to_not_be_empty
Expects target to not be empty. Which means invoking empty? must return false.
135 136 137 |
# File 'lib/loupe/expectation.rb', line 135 def to_not_be_empty assert(!@target.empty?, "Expected #{@color.p(@target.inspect, :red)} to not be empty.") end |
#to_not_be_equal_to(value) ⇒ Loupe::Expectation
expect(target).to_not_be_equal_to(value)
Expects target to not be equal to value. Compares if the objects are different in terms of values,
but not if the objects are the different instances. For comparing identity, use #to_not_be_the_same_as.
114 115 116 117 118 119 |
# File 'lib/loupe/expectation.rb', line 114 def to_not_be_equal_to(value) assert( @target != value, "Expected #{@color.p(@target.inspect, :red)} to not be equal to #{@color.p(value.inspect, :green)}." ) end |
#to_not_be_in_delta_of(value, delta = 0.001) ⇒ Loupe::Expectation
expect(target).to_not_be_in_delta_of(value, delta = 0.001)
Expects target to not be within delta of value. This means that the absolute difference between
target and value must be bigger than delta.
Example:
expect(5.0).to_not_be_in_delta_of(5.1, 0.01)
429 430 431 432 433 434 435 436 |
# File 'lib/loupe/expectation.rb', line 429 def to_not_be_in_delta_of(value, delta = 0.001) difference = (@target - value).abs = "Expected |#{@target} - #{value}| " \ "(#{@color.p(difference, :red)}) to not be <= #{@color.p(delta, :green)}." assert(delta <= difference, ) end |
#to_not_be_in_epsilon_of(value, epsilon = 0.001) ⇒ Loupe::Expectation
expect(target).to_not_be_in_epsilon_of(value, epsilon = 0.001)
Expects target to not be within epsilon times the smallest absolute value between value and target.
This expectation simply invokes #to_not_be_in_delta_of,
where the delta is epsilon * [@target.abs, value.abs].min.
Example:
The minimum absolute value between 5.0 and 5.1 is equal to 5.0.
The delta is equal to 5.0 * 0.01, which is 0.05.
The absolute difference 5.1 - 5.0 is 0.1.
0.1 is not smaller than 0.05, therefore the expectation passes.
expect(5.0).to_not_be_in_epsilon_of(5.1, 0.01)
476 477 478 |
# File 'lib/loupe/expectation.rb', line 476 def to_not_be_in_epsilon_of(value, epsilon = 0.001) to_not_be_in_delta_of(value, [@target.abs, value.abs].min * epsilon) end |
#to_not_be_nil ⇒ Loupe::Expectation
expect(target).to_not_be_nil
Expects target not to be nil.
207 208 209 |
# File 'lib/loupe/expectation.rb', line 207 def to_not_be_nil assert(!@target.nil?, "Expected #{@color.p(@target.inspect, :red)} to not be nil.") end |
#to_not_be_the_same_as(object) ⇒ Loupe::Expectation
expect(target).to_not_be_the_same_as(object)
Expects target to not be the same as object. This means, target and object are not the exact
same object with the same object_id.
Note: this is an identity comparison. If the values of both objects are the same, but the object IDs are different, this expectation will pass.
371 372 373 374 375 376 |
# File 'lib/loupe/expectation.rb', line 371 def to_not_be_the_same_as(object) = "Expected #{@color.p(@target.inspect, :red)} (#{@color.p(@target.inspect.object_id, :red)}) " \ "to not be the same as #{@color.p(object, :green)} (#{@color.p(object.object_id, :green)})." assert(!@target.equal?(object), ) end |
#to_not_include(object) ⇒ Loupe::Expectation
expect(target).to_not_include(object)
Expects target to not include object. In this expectation, target is typically a collection
or another object that responds to include?. The expectation passes if target does not include object.
186 187 188 189 190 191 |
# File 'lib/loupe/expectation.rb', line 186 def to_not_include(object) assert( !@target.include?(object), "Expected #{@color.p(@target.inspect, :red)} to not include #{@color.p(object, :green)}." ) end |
#to_not_match(object) ⇒ Loupe::Expectation
expect(target).to_not_match(object)
Expects target to not match object. In this expectation, target is a matcher (string or a regex)
that must not match object. The matcher needs to respond to =~ and needs to return false when it is
invoked with object.
Example:
expect(/python .*/).to_not_match("ruby is awesome")
expect("terrible").to_not_match("ruby is awesome")
340 341 342 343 344 345 |
# File 'lib/loupe/expectation.rb', line 340 def to_not_match(object) to_respond_to(:=~) @target = Regexp.new(Regexp.escape(@target)) if @target.is_a?(String) assert(@target !~ object, "Expected #{@color.p(@target.inspect, :red)} to not match #{@color.p(object, :green)}.") end |
#to_not_respond_to(method) ⇒ Loupe::Expectation
expect(target).to_not_respond_to(method)
Expects target to not respond to method. This expectation passes if method does not exist in target.
158 159 160 161 162 163 |
# File 'lib/loupe/expectation.rb', line 158 def to_not_respond_to(method) assert( !@target.respond_to?(method.to_sym), "Expected #{@color.p(@target.inspect, :red)} to not respond to #{@color.p(method, :green)}." ) end |
#to_not_satisfy_operator(operator, other) ⇒ Loupe::Expectation
expect(target).to_not_satisfy_operator(operator, other)
Expects target to return false when the operator is applied on other.
This expectation is used to verify operations between two objects.
Example:
expect(5.0).to_not_satisfy_operator(:<, 4.9)
513 514 515 516 517 518 519 520 |
# File 'lib/loupe/expectation.rb', line 513 def to_not_satisfy_operator(operator, other) return to_not_be(operator) unless other = "Expected #{@color.p(@target.inspect, :red)} to not be #{operator}" \ " #{@color.p(other, :green)}." assert(!@target.public_send(operator, other), ) end |
#to_respond_to(method) ⇒ Loupe::Expectation
expect(target).to_respond_to(method)
Expects target to respond to method. This expectation passes if method exists in target.
145 146 147 148 149 150 |
# File 'lib/loupe/expectation.rb', line 145 def to_respond_to(method) assert( @target.respond_to?(method.to_sym), "Expected #{@color.p(@target.inspect, :red)} to respond to #{@color.p(method, :green)}." ) end |
#to_satisfy_operator(operator, other) ⇒ Loupe::Expectation
expect(target).to_satisfy_operator(operator, other)
Expects target to return true when the operator is applied on other.
This expectation is used to verify operations between two objects.
Example:
expect(5.0).to_satisfy_operator(:>, 4.9)
492 493 494 495 496 497 498 499 |
# File 'lib/loupe/expectation.rb', line 492 def to_satisfy_operator(operator, other) return to_be(operator) unless other = "Expected #{@color.p(@target.inspect, :red)} to be #{operator}" \ " #{@color.p(other, :green)}." assert(@target.public_send(operator, other), ) end |