diff options
Diffstat (limited to 'spec/mspec/lib/mspec/matchers')
-rw-r--r-- | spec/mspec/lib/mspec/matchers/base.rb | 30 | ||||
-rw-r--r-- | spec/mspec/lib/mspec/matchers/complain.rb | 2 | ||||
-rw-r--r-- | spec/mspec/lib/mspec/matchers/output.rb | 8 | ||||
-rw-r--r-- | spec/mspec/lib/mspec/matchers/raise_error.rb | 6 |
4 files changed, 32 insertions, 14 deletions
diff --git a/spec/mspec/lib/mspec/matchers/base.rb b/spec/mspec/lib/mspec/matchers/base.rb index 94d3b71e55..d9d7f6fec0 100644 --- a/spec/mspec/lib/mspec/matchers/base.rb +++ b/spec/mspec/lib/mspec/matchers/base.rb @@ -16,15 +16,24 @@ class SpecPositiveOperatorMatcher < BasicObject end def ==(expected) - method_missing(:==, expected) + result = @actual == expected + unless result + ::SpecExpectation.fail_single_arg_predicate(@actual, :==, expected, result, "to be truthy") + end end def !=(expected) - method_missing(:!=, expected) + result = @actual != expected + unless result + ::SpecExpectation.fail_single_arg_predicate(@actual, :!=, expected, result, "to be truthy") + end end def equal?(expected) - method_missing(:equal?, expected) + result = @actual.equal?(expected) + unless result + ::SpecExpectation.fail_single_arg_predicate(@actual, :equal?, expected, result, "to be truthy") + end end def method_missing(name, *args, &block) @@ -41,15 +50,24 @@ class SpecNegativeOperatorMatcher < BasicObject end def ==(expected) - method_missing(:==, expected) + result = @actual == expected + if result + ::SpecExpectation.fail_single_arg_predicate(@actual, :==, expected, result, "to be falsy") + end end def !=(expected) - method_missing(:!=, expected) + result = @actual != expected + if result + ::SpecExpectation.fail_single_arg_predicate(@actual, :!=, expected, result, "to be falsy") + end end def equal?(expected) - method_missing(:equal?, expected) + result = @actual.equal?(expected) + if result + ::SpecExpectation.fail_single_arg_predicate(@actual, :equal?, expected, result, "to be falsy") + end end def method_missing(name, *args, &block) diff --git a/spec/mspec/lib/mspec/matchers/complain.rb b/spec/mspec/lib/mspec/matchers/complain.rb index 887e72b4b0..19310c0bbb 100644 --- a/spec/mspec/lib/mspec/matchers/complain.rb +++ b/spec/mspec/lib/mspec/matchers/complain.rb @@ -19,7 +19,6 @@ class ComplainMatcher @verbose = $VERBOSE err = IOStub.new - Thread.current[:in_mspec_complain_matcher] = true $stderr = err $VERBOSE = @options.key?(:verbose) ? @options[:verbose] : false begin @@ -27,7 +26,6 @@ class ComplainMatcher ensure $VERBOSE = @verbose $stderr = @saved_err - Thread.current[:in_mspec_complain_matcher] = false end @warning = err.to_s diff --git a/spec/mspec/lib/mspec/matchers/output.rb b/spec/mspec/lib/mspec/matchers/output.rb index 20721df743..5bb5d55027 100644 --- a/spec/mspec/lib/mspec/matchers/output.rb +++ b/spec/mspec/lib/mspec/matchers/output.rb @@ -42,12 +42,12 @@ class OutputMatcher expected_out = "\n" actual_out = "\n" unless @out.nil? - expected_out += " $stdout: #{@out.inspect}\n" - actual_out += " $stdout: #{@stdout.inspect}\n" + expected_out += " $stdout: #{MSpec.format(@out)}\n" + actual_out += " $stdout: #{MSpec.format(@stdout.to_s)}\n" end unless @err.nil? - expected_out += " $stderr: #{@err.inspect}\n" - actual_out += " $stderr: #{@stderr.inspect}\n" + expected_out += " $stderr: #{MSpec.format(@err)}\n" + actual_out += " $stderr: #{MSpec.format(@stderr.to_s)}\n" end ["Expected:#{expected_out}", " got:#{actual_out}"] end diff --git a/spec/mspec/lib/mspec/matchers/raise_error.rb b/spec/mspec/lib/mspec/matchers/raise_error.rb index 0ee8953519..54378bb34c 100644 --- a/spec/mspec/lib/mspec/matchers/raise_error.rb +++ b/spec/mspec/lib/mspec/matchers/raise_error.rb @@ -1,4 +1,6 @@ class RaiseErrorMatcher + FAILURE_MESSAGE_FOR_EXCEPTION = {}.compare_by_identity + attr_writer :block def initialize(exception, message, &block) @@ -15,7 +17,7 @@ class RaiseErrorMatcher def matches?(proc) @result = proc.call return false - rescue Exception => actual + rescue Object => actual @actual = actual if matching_exception?(actual) @@ -23,7 +25,7 @@ class RaiseErrorMatcher @block[actual] if @block return true else - actual.instance_variable_set(:@mspec_raise_error_message, failure_message) + FAILURE_MESSAGE_FOR_EXCEPTION[actual] = failure_message raise actual end end |