rspec-expectations 3.0.0.beta1 → 3.0.0.beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data.tar.gz.sig +2 -2
- data/.yardopts +1 -0
- data/Changelog.md +138 -0
- data/README.md +75 -8
- data/features/README.md +2 -2
- data/features/built_in_matchers/README.md +12 -9
- data/features/built_in_matchers/comparisons.feature +2 -2
- data/features/built_in_matchers/contain_exactly.feature +46 -0
- data/features/built_in_matchers/expect_change.feature +2 -2
- data/features/built_in_matchers/include.feature +0 -48
- data/features/built_in_matchers/output.feature +70 -0
- data/features/composing_matchers.feature +250 -0
- data/features/compound_expectations.feature +45 -0
- data/features/custom_matchers/access_running_example.feature +1 -1
- data/features/custom_matchers/define_matcher.feature +6 -6
- data/features/custom_matchers/define_matcher_outside_rspec.feature +4 -8
- data/features/test_frameworks/{test_unit.feature → minitest.feature} +11 -11
- data/lib/rspec/expectations.rb +31 -42
- data/lib/rspec/expectations/diff_presenter.rb +141 -0
- data/lib/rspec/expectations/differ.rb +22 -132
- data/lib/rspec/expectations/encoded_string.rb +56 -0
- data/lib/rspec/expectations/expectation_target.rb +0 -30
- data/lib/rspec/expectations/fail_with.rb +2 -2
- data/lib/rspec/expectations/handler.rb +128 -31
- data/lib/rspec/expectations/minitest_integration.rb +16 -0
- data/lib/rspec/expectations/syntax.rb +4 -58
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers.rb +298 -60
- data/lib/rspec/matchers/aliased_matcher.rb +35 -0
- data/lib/rspec/matchers/built_in.rb +37 -33
- data/lib/rspec/matchers/built_in/base_matcher.rb +25 -15
- data/lib/rspec/matchers/built_in/be.rb +23 -31
- data/lib/rspec/matchers/built_in/be_between.rb +55 -0
- data/lib/rspec/matchers/built_in/be_within.rb +15 -11
- data/lib/rspec/matchers/built_in/change.rb +198 -81
- data/lib/rspec/matchers/built_in/compound.rb +106 -0
- data/lib/rspec/matchers/built_in/contain_exactly.rb +245 -0
- data/lib/rspec/matchers/built_in/eq.rb +43 -4
- data/lib/rspec/matchers/built_in/eql.rb +2 -2
- data/lib/rspec/matchers/built_in/equal.rb +35 -18
- data/lib/rspec/matchers/built_in/has.rb +16 -15
- data/lib/rspec/matchers/built_in/include.rb +45 -23
- data/lib/rspec/matchers/built_in/match.rb +6 -3
- data/lib/rspec/matchers/built_in/operators.rb +103 -0
- data/lib/rspec/matchers/built_in/output.rb +108 -0
- data/lib/rspec/matchers/built_in/raise_error.rb +9 -15
- data/lib/rspec/matchers/built_in/respond_to.rb +5 -4
- data/lib/rspec/matchers/built_in/satisfy.rb +4 -3
- data/lib/rspec/matchers/built_in/start_and_end_with.rb +37 -16
- data/lib/rspec/matchers/built_in/throw_symbol.rb +6 -5
- data/lib/rspec/matchers/built_in/yield.rb +31 -29
- data/lib/rspec/matchers/composable.rb +138 -0
- data/lib/rspec/matchers/dsl.rb +330 -0
- data/lib/rspec/matchers/generated_descriptions.rb +6 -6
- data/lib/rspec/matchers/matcher_delegator.rb +33 -0
- data/lib/rspec/matchers/pretty.rb +13 -2
- data/spec/rspec/expectations/{differ_spec.rb → diff_presenter_spec.rb} +56 -36
- data/spec/rspec/expectations/encoded_string_spec.rb +74 -0
- data/spec/rspec/expectations/extensions/kernel_spec.rb +11 -11
- data/spec/rspec/expectations/fail_with_spec.rb +8 -8
- data/spec/rspec/expectations/handler_spec.rb +27 -49
- data/spec/rspec/expectations/minitest_integration_spec.rb +27 -0
- data/spec/rspec/expectations/syntax_spec.rb +17 -67
- data/spec/rspec/expectations_spec.rb +7 -52
- data/spec/rspec/matchers/aliased_matcher_spec.rb +48 -0
- data/spec/rspec/matchers/aliases_spec.rb +449 -0
- data/spec/rspec/matchers/{base_matcher_spec.rb → built_in/base_matcher_spec.rb} +24 -3
- data/spec/rspec/matchers/built_in/be_between_spec.rb +159 -0
- data/spec/rspec/matchers/{be_instance_of_spec.rb → built_in/be_instance_of_spec.rb} +0 -0
- data/spec/rspec/matchers/{be_kind_of_spec.rb → built_in/be_kind_of_spec.rb} +0 -0
- data/spec/rspec/matchers/{be_spec.rb → built_in/be_spec.rb} +76 -32
- data/spec/rspec/matchers/{be_within_spec.rb → built_in/be_within_spec.rb} +6 -2
- data/spec/rspec/matchers/{change_spec.rb → built_in/change_spec.rb} +310 -69
- data/spec/rspec/matchers/built_in/compound_spec.rb +292 -0
- data/spec/rspec/matchers/built_in/contain_exactly_spec.rb +441 -0
- data/spec/rspec/matchers/{cover_spec.rb → built_in/cover_spec.rb} +0 -0
- data/spec/rspec/matchers/built_in/eq_spec.rb +156 -0
- data/spec/rspec/matchers/{eql_spec.rb → built_in/eql_spec.rb} +2 -2
- data/spec/rspec/matchers/built_in/equal_spec.rb +106 -0
- data/spec/rspec/matchers/{exist_spec.rb → built_in/exist_spec.rb} +1 -1
- data/spec/rspec/matchers/{has_spec.rb → built_in/has_spec.rb} +39 -0
- data/spec/rspec/matchers/{include_spec.rb → built_in/include_spec.rb} +118 -109
- data/spec/rspec/matchers/{match_spec.rb → built_in/match_spec.rb} +30 -2
- data/spec/rspec/matchers/{operator_matcher_spec.rb → built_in/operators_spec.rb} +26 -26
- data/spec/rspec/matchers/built_in/output_spec.rb +165 -0
- data/spec/rspec/matchers/{raise_error_spec.rb → built_in/raise_error_spec.rb} +81 -11
- data/spec/rspec/matchers/{respond_to_spec.rb → built_in/respond_to_spec.rb} +0 -0
- data/spec/rspec/matchers/{satisfy_spec.rb → built_in/satisfy_spec.rb} +0 -0
- data/spec/rspec/matchers/{start_with_end_with_spec.rb → built_in/start_and_end_with_spec.rb} +82 -15
- data/spec/rspec/matchers/{throw_symbol_spec.rb → built_in/throw_symbol_spec.rb} +29 -10
- data/spec/rspec/matchers/{yield_spec.rb → built_in/yield_spec.rb} +90 -0
- data/spec/rspec/matchers/configuration_spec.rb +7 -39
- data/spec/rspec/matchers/description_generation_spec.rb +22 -6
- data/spec/rspec/matchers/dsl_spec.rb +838 -0
- data/spec/rspec/matchers/legacy_spec.rb +101 -0
- data/spec/rspec/matchers_spec.rb +74 -0
- data/spec/spec_helper.rb +35 -21
- data/spec/support/shared_examples.rb +26 -4
- metadata +172 -116
- metadata.gz.sig +3 -4
- checksums.yaml +0 -15
- checksums.yaml.gz.sig +0 -0
- data/features/built_in_matchers/match_array.feature +0 -37
- data/lib/rspec/expectations/errors.rb +0 -9
- data/lib/rspec/expectations/extensions.rb +0 -1
- data/lib/rspec/expectations/extensions/object.rb +0 -29
- data/lib/rspec/matchers/built_in/match_array.rb +0 -51
- data/lib/rspec/matchers/compatibility.rb +0 -14
- data/lib/rspec/matchers/matcher.rb +0 -301
- data/lib/rspec/matchers/method_missing.rb +0 -12
- data/lib/rspec/matchers/operator_matcher.rb +0 -99
- data/lib/rspec/matchers/test_unit_integration.rb +0 -11
- data/spec/rspec/matchers/eq_spec.rb +0 -60
- data/spec/rspec/matchers/equal_spec.rb +0 -78
- data/spec/rspec/matchers/include_matcher_integration_spec.rb +0 -30
- data/spec/rspec/matchers/match_array_spec.rb +0 -194
- data/spec/rspec/matchers/matcher_spec.rb +0 -706
- data/spec/rspec/matchers/matchers_spec.rb +0 -36
- data/spec/rspec/matchers/method_missing_spec.rb +0 -28
- data/spec/support/classes.rb +0 -56
- data/spec/support/in_sub_process.rb +0 -37
- data/spec/support/ruby_version.rb +0 -10
@@ -2,35 +2,36 @@ module RSpec
|
|
2
2
|
module Matchers
|
3
3
|
module BuiltIn
|
4
4
|
class Has
|
5
|
-
|
6
|
-
|
5
|
+
include Composable
|
6
|
+
|
7
|
+
def initialize(method_name, *args, &block)
|
8
|
+
@method_name, @args, @block = method_name, args, block
|
7
9
|
end
|
8
10
|
|
9
|
-
def matches?(actual)
|
10
|
-
actual.__send__(predicate
|
11
|
+
def matches?(actual, &block)
|
12
|
+
actual.__send__(predicate, *@args, &(@block || block))
|
11
13
|
end
|
12
|
-
alias == matches?
|
13
14
|
|
14
|
-
def
|
15
|
-
"expected ##{predicate
|
15
|
+
def failure_message
|
16
|
+
"expected ##{predicate}#{failure_message_args_description} to return true, got false"
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
-
"expected ##{predicate
|
19
|
+
def failure_message_when_negated
|
20
|
+
"expected ##{predicate}#{failure_message_args_description} to return false, got true"
|
20
21
|
end
|
21
22
|
|
22
23
|
def description
|
23
|
-
[method_description
|
24
|
+
[method_description, args_description].compact.join(' ')
|
24
25
|
end
|
25
26
|
|
26
|
-
|
27
|
+
private
|
27
28
|
|
28
|
-
def predicate
|
29
|
-
"#{
|
29
|
+
def predicate
|
30
|
+
@predicate ||= :"has_#{@method_name.to_s.match(Matchers::HAS_REGEX).captures.first}?"
|
30
31
|
end
|
31
32
|
|
32
|
-
def method_description
|
33
|
-
|
33
|
+
def method_description
|
34
|
+
@method_name.to_s.gsub('_', ' ')
|
34
35
|
end
|
35
36
|
|
36
37
|
def args_description
|
@@ -8,52 +8,74 @@ module RSpec
|
|
8
8
|
|
9
9
|
def matches?(actual)
|
10
10
|
@actual = actual
|
11
|
-
perform_match(:all?, :all
|
11
|
+
perform_match(:all?, :all?)
|
12
12
|
end
|
13
13
|
|
14
14
|
def does_not_match?(actual)
|
15
15
|
@actual = actual
|
16
|
-
perform_match(:none?, :any
|
16
|
+
perform_match(:none?, :any?)
|
17
17
|
end
|
18
18
|
|
19
19
|
def description
|
20
|
-
|
20
|
+
described_items = surface_descriptions_in(expected)
|
21
|
+
improve_hash_formatting "include#{to_sentence(described_items)}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def failure_message
|
25
|
+
improve_hash_formatting(super)
|
26
|
+
end
|
27
|
+
|
28
|
+
def failure_message_when_negated
|
29
|
+
improve_hash_formatting(super)
|
21
30
|
end
|
22
31
|
|
23
32
|
def diffable?
|
24
|
-
|
25
|
-
# output, which includes their instance variables and such.
|
26
|
-
@expected.none? { |e| RSpec::Matchers.is_a_matcher?(e) }
|
33
|
+
true
|
27
34
|
end
|
28
35
|
|
29
36
|
private
|
30
37
|
|
31
|
-
def perform_match(predicate,
|
32
|
-
|
33
|
-
if
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
elsif comparing_hash_keys?(
|
38
|
-
|
39
|
-
elsif comparing_with_matcher?(actual, expected)
|
40
|
-
actual.any? { |value| expected.matches?(value) }
|
38
|
+
def perform_match(predicate, hash_subset_predicate)
|
39
|
+
expected.__send__(predicate) do |expected_item|
|
40
|
+
if comparing_hash_to_a_subset?(expected_item)
|
41
|
+
expected_item.__send__(hash_subset_predicate) do |(key, value)|
|
42
|
+
actual_hash_includes?(key, value)
|
43
|
+
end
|
44
|
+
elsif comparing_hash_keys?(expected_item)
|
45
|
+
actual_hash_has_key?(expected_item)
|
41
46
|
else
|
42
|
-
|
47
|
+
actual_collection_includes?(expected_item)
|
43
48
|
end
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
47
|
-
def
|
48
|
-
actual.is_a?(Hash) &&
|
52
|
+
def comparing_hash_to_a_subset?(expected_item)
|
53
|
+
actual.is_a?(Hash) && expected_item.is_a?(Hash)
|
54
|
+
end
|
55
|
+
|
56
|
+
def actual_hash_includes?(expected_key, expected_value)
|
57
|
+
actual_value = actual.fetch(expected_key) { return false }
|
58
|
+
values_match?(expected_value, actual_value)
|
59
|
+
end
|
60
|
+
|
61
|
+
def comparing_hash_keys?(expected_item)
|
62
|
+
actual.is_a?(Hash) && !expected_item.is_a?(Hash)
|
49
63
|
end
|
50
64
|
|
51
|
-
def
|
52
|
-
|
65
|
+
def actual_hash_has_key?(expected_key)
|
66
|
+
# We check `has_key?` first for perf:
|
67
|
+
# has_key? is O(1), but `any?` is O(N).
|
68
|
+
actual.has_key?(expected_key) ||
|
69
|
+
actual.keys.any? { |key| values_match?(expected_key, key) }
|
53
70
|
end
|
54
71
|
|
55
|
-
def
|
56
|
-
|
72
|
+
def actual_collection_includes?(expected_item)
|
73
|
+
return true if actual.include?(expected_item)
|
74
|
+
|
75
|
+
# String lacks an `any?` method...
|
76
|
+
return false unless actual.respond_to?(:any?)
|
77
|
+
|
78
|
+
actual.any? { |value| values_match?(expected_item, value) }
|
57
79
|
end
|
58
80
|
end
|
59
81
|
end
|
@@ -2,15 +2,18 @@ module RSpec
|
|
2
2
|
module Matchers
|
3
3
|
module BuiltIn
|
4
4
|
class Match < BaseMatcher
|
5
|
-
|
6
5
|
def match(expected, actual)
|
7
|
-
|
6
|
+
return true if values_match?(expected, actual)
|
7
|
+
actual.match(expected) if actual.respond_to?(:match)
|
8
|
+
end
|
9
|
+
|
10
|
+
def description
|
11
|
+
"match #{surface_descriptions_in(expected).inspect}"
|
8
12
|
end
|
9
13
|
|
10
14
|
def diffable?
|
11
15
|
true
|
12
16
|
end
|
13
|
-
|
14
17
|
end
|
15
18
|
end
|
16
19
|
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'rspec/support'
|
2
|
+
|
3
|
+
module RSpec
|
4
|
+
module Matchers
|
5
|
+
module BuiltIn
|
6
|
+
class OperatorMatcher
|
7
|
+
class << self
|
8
|
+
def registry
|
9
|
+
@registry ||= {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def register(klass, operator, matcher)
|
13
|
+
registry[klass] ||= {}
|
14
|
+
registry[klass][operator] = matcher
|
15
|
+
end
|
16
|
+
|
17
|
+
def unregister(klass, operator)
|
18
|
+
registry[klass] && registry[klass].delete(operator)
|
19
|
+
end
|
20
|
+
|
21
|
+
def get(klass, operator)
|
22
|
+
klass.ancestors.each { |ancestor|
|
23
|
+
matcher = registry[ancestor] && registry[ancestor][operator]
|
24
|
+
return matcher if matcher
|
25
|
+
}
|
26
|
+
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
register Enumerable, '=~', BuiltIn::ContainExactly
|
32
|
+
|
33
|
+
def initialize(actual)
|
34
|
+
@actual = actual
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.use_custom_matcher_or_delegate(operator)
|
38
|
+
define_method(operator) do |expected|
|
39
|
+
if uses_generic_implementation_of?(operator) && matcher = OperatorMatcher.get(@actual.class, operator)
|
40
|
+
@actual.__send__(::RSpec::Matchers.last_expectation_handler.should_method, matcher.new(expected))
|
41
|
+
else
|
42
|
+
eval_match(@actual, operator, expected)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
negative_operator = operator.sub(/^=/, '!')
|
47
|
+
if negative_operator != operator && respond_to?(negative_operator)
|
48
|
+
define_method(negative_operator) do |expected|
|
49
|
+
opposite_should = ::RSpec::Matchers.last_expectation_handler.opposite_should_method
|
50
|
+
raise "RSpec does not support `#{::RSpec::Matchers.last_expectation_handler.should_method} #{negative_operator} expected`. " +
|
51
|
+
"Use `#{opposite_should} #{operator} expected` instead."
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
['==', '===', '=~', '>', '>=', '<', '<='].each do |operator|
|
57
|
+
use_custom_matcher_or_delegate operator
|
58
|
+
end
|
59
|
+
|
60
|
+
def fail_with_message(message)
|
61
|
+
RSpec::Expectations.fail_with(message, @expected, @actual)
|
62
|
+
end
|
63
|
+
|
64
|
+
def description
|
65
|
+
"#{@operator} #{@expected.inspect}"
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def uses_generic_implementation_of?(op)
|
71
|
+
Support.method_handle_for(@actual, op).owner == ::Kernel
|
72
|
+
rescue NameError
|
73
|
+
false
|
74
|
+
end
|
75
|
+
|
76
|
+
def eval_match(actual, operator, expected)
|
77
|
+
::RSpec::Matchers.last_matcher = self
|
78
|
+
@operator, @expected = operator, expected
|
79
|
+
__delegate_operator(actual, operator, expected)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class PositiveOperatorMatcher < OperatorMatcher
|
84
|
+
def __delegate_operator(actual, operator, expected)
|
85
|
+
if actual.__send__(operator, expected)
|
86
|
+
true
|
87
|
+
elsif ['==','===', '=~'].include?(operator)
|
88
|
+
fail_with_message("expected: #{expected.inspect}\n got: #{actual.inspect} (using #{operator})")
|
89
|
+
else
|
90
|
+
fail_with_message("expected: #{operator} #{expected.inspect}\n got: #{operator.gsub(/./, ' ')} #{actual.inspect}")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
class NegativeOperatorMatcher < OperatorMatcher
|
96
|
+
def __delegate_operator(actual, operator, expected)
|
97
|
+
return false unless actual.__send__(operator, expected)
|
98
|
+
return fail_with_message("expected not: #{operator} #{expected.inspect}\n got: #{operator.gsub(/./, ' ')} #{actual.inspect}")
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
3
|
+
module RSpec
|
4
|
+
module Matchers
|
5
|
+
module BuiltIn
|
6
|
+
class Output < BaseMatcher
|
7
|
+
def initialize(expected)
|
8
|
+
@expected = expected
|
9
|
+
@stream_capturer = NullCapture
|
10
|
+
end
|
11
|
+
|
12
|
+
def matches?(block)
|
13
|
+
@actual = @stream_capturer.capture(block)
|
14
|
+
|
15
|
+
@expected ? values_match?(@expected, @actual) : captured?
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_stdout
|
19
|
+
@stream_capturer = CaptureStdout
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_stderr
|
24
|
+
@stream_capturer = CaptureStderr
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
def failure_message
|
29
|
+
"expected block to #{description}, #{actual_description}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def failure_message_when_negated
|
33
|
+
"expected block to not #{description}, but did"
|
34
|
+
end
|
35
|
+
|
36
|
+
def description
|
37
|
+
if @expected
|
38
|
+
"output #{description_of @expected} to #{@stream_capturer.name}"
|
39
|
+
else
|
40
|
+
"output to #{@stream_capturer.name}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def diffable?
|
45
|
+
true
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def captured?
|
51
|
+
@actual.length > 0
|
52
|
+
end
|
53
|
+
|
54
|
+
def actual_description
|
55
|
+
@expected ? "but output #{captured? ? @actual.inspect : 'nothing'}" : "but did not"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
module NullCapture
|
60
|
+
def self.name
|
61
|
+
"some stream"
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.capture(block)
|
65
|
+
raise "You must chain `to_stdout` or `to_stderr` off of the `output(...)` matcher."
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
module CaptureStdout
|
70
|
+
def self.name
|
71
|
+
'stdout'
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.capture(block)
|
75
|
+
captured_stream = StringIO.new
|
76
|
+
|
77
|
+
original_stream = $stdout
|
78
|
+
$stdout = captured_stream
|
79
|
+
|
80
|
+
block.call
|
81
|
+
|
82
|
+
captured_stream.string
|
83
|
+
ensure
|
84
|
+
$stdout = original_stream
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
module CaptureStderr
|
89
|
+
def self.name
|
90
|
+
'stderr'
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.capture(block)
|
94
|
+
captured_stream = StringIO.new
|
95
|
+
|
96
|
+
original_stream = $stderr
|
97
|
+
$stderr = captured_stream
|
98
|
+
|
99
|
+
block.call
|
100
|
+
|
101
|
+
captured_stream.string
|
102
|
+
ensure
|
103
|
+
$stderr = original_stream
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -2,6 +2,8 @@ module RSpec
|
|
2
2
|
module Matchers
|
3
3
|
module BuiltIn
|
4
4
|
class RaiseError
|
5
|
+
include Composable
|
6
|
+
|
5
7
|
def initialize(expected_error_or_message=Exception, expected_message=nil, &block)
|
6
8
|
@block = block
|
7
9
|
@actual_error = nil
|
@@ -34,7 +36,7 @@ module RSpec
|
|
34
36
|
begin
|
35
37
|
given_proc.call
|
36
38
|
rescue Exception => @actual_error
|
37
|
-
if @
|
39
|
+
if values_match?(@expected_error, @actual_error)
|
38
40
|
@raised_expected_error = true
|
39
41
|
@with_expected_message = verify_message
|
40
42
|
end
|
@@ -47,8 +49,6 @@ module RSpec
|
|
47
49
|
expectation_matched?
|
48
50
|
end
|
49
51
|
|
50
|
-
alias == matches?
|
51
|
-
|
52
52
|
def expectation_matched?
|
53
53
|
error_and_message_match? && block_matches?
|
54
54
|
end
|
@@ -77,21 +77,15 @@ module RSpec
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def verify_message
|
80
|
-
|
81
|
-
|
82
|
-
true
|
83
|
-
when Regexp
|
84
|
-
@expected_message =~ @actual_error.message
|
85
|
-
else
|
86
|
-
@expected_message == @actual_error.message
|
87
|
-
end
|
80
|
+
return true if @expected_message.nil?
|
81
|
+
values_match?(@expected_message, @actual_error.message)
|
88
82
|
end
|
89
83
|
|
90
|
-
def
|
84
|
+
def failure_message
|
91
85
|
@eval_block ? @actual_error.message : "expected #{expected_error}#{given_error}"
|
92
86
|
end
|
93
87
|
|
94
|
-
def
|
88
|
+
def failure_message_when_negated
|
95
89
|
"expected no #{expected_error}#{given_error}"
|
96
90
|
end
|
97
91
|
|
@@ -118,11 +112,11 @@ module RSpec
|
|
118
112
|
def expected_error
|
119
113
|
case @expected_message
|
120
114
|
when nil
|
121
|
-
@expected_error
|
115
|
+
description_of(@expected_error)
|
122
116
|
when Regexp
|
123
117
|
"#{@expected_error} with message matching #{@expected_message.inspect}"
|
124
118
|
else
|
125
|
-
"#{@expected_error} with #{@expected_message
|
119
|
+
"#{@expected_error} with #{description_of @expected_message}"
|
126
120
|
end
|
127
121
|
end
|
128
122
|
|