rspec 0.7.5.1 → 0.8.0
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/CHANGES +60 -1
- data/EXAMPLES.rd +38 -19
- data/MIT-LICENSE +1 -1
- data/README +24 -17
- data/RELEASE-PLAN +117 -0
- data/Rakefile +24 -18
- data/TODO.0.8.0 +5 -0
- data/examples/auto_spec_name_generation_example.rb +18 -0
- data/examples/custom_expectation_matchers.rb +53 -0
- data/examples/dynamic_spec.rb +9 -0
- data/examples/io_processor_spec.rb +2 -2
- data/examples/mocking_example.rb +4 -4
- data/examples/partial_mock_example.rb +2 -2
- data/examples/predicate_example.rb +2 -2
- data/examples/stack_spec.rb +32 -36
- data/examples/stubbing_example.rb +19 -19
- data/examples/test_case_spec.rb +6 -6
- data/lib/spec.rb +3 -0
- data/lib/spec/callback.rb +8 -0
- data/lib/spec/callback/extensions/object.rb +4 -0
- data/lib/spec/deprecated.rb +3 -0
- data/lib/spec/expectations.rb +44 -17
- data/lib/spec/expectations/extensions.rb +1 -2
- data/lib/spec/expectations/extensions/object.rb +78 -130
- data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
- data/lib/spec/expectations/handler.rb +47 -0
- data/lib/spec/expectations/should/base.rb +32 -29
- data/lib/spec/expectations/should/change.rb +1 -1
- data/lib/spec/expectations/should/have.rb +9 -17
- data/lib/spec/expectations/should/not.rb +54 -56
- data/lib/spec/expectations/should/should.rb +59 -65
- data/lib/spec/expectations/sugar.rb +27 -4
- data/lib/spec/matchers.rb +160 -0
- data/lib/spec/matchers/be.rb +161 -0
- data/lib/spec/matchers/be_close.rb +37 -0
- data/lib/spec/matchers/change.rb +120 -0
- data/lib/spec/matchers/eql.rb +43 -0
- data/lib/spec/matchers/equal.rb +43 -0
- data/lib/spec/matchers/has.rb +44 -0
- data/lib/spec/matchers/have.rb +140 -0
- data/lib/spec/matchers/include.rb +50 -0
- data/lib/spec/matchers/match.rb +41 -0
- data/lib/spec/matchers/raise_error.rb +100 -0
- data/lib/spec/matchers/respond_to.rb +35 -0
- data/lib/spec/matchers/satisfy.rb +47 -0
- data/lib/spec/matchers/throw_symbol.rb +75 -0
- data/lib/spec/mocks.rb +224 -1
- data/lib/spec/mocks/argument_expectation.rb +16 -2
- data/lib/spec/mocks/error_generator.rb +5 -3
- data/lib/spec/mocks/errors.rb +2 -2
- data/lib/spec/mocks/extensions/object.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +29 -19
- data/lib/spec/mocks/{mock_methods.rb → methods.rb} +5 -5
- data/lib/spec/mocks/mock.rb +2 -2
- data/lib/spec/mocks/mock_handler.rb +81 -68
- data/lib/spec/rake/spectask.rb +7 -12
- data/lib/spec/rake/verify_rcov.rb +1 -1
- data/lib/spec/runner.rb +117 -0
- data/lib/spec/runner/command_line.rb +8 -5
- data/lib/spec/runner/context.rb +13 -37
- data/lib/spec/runner/context_eval.rb +4 -3
- data/lib/spec/runner/context_runner.rb +7 -4
- data/lib/spec/runner/drb_command_line.rb +1 -1
- data/lib/spec/runner/execution_context.rb +3 -11
- data/lib/spec/runner/extensions/kernel.rb +7 -5
- data/lib/spec/runner/extensions/object.rb +4 -1
- data/lib/spec/runner/formatter/base_text_formatter.rb +11 -3
- data/lib/spec/runner/formatter/html_formatter.rb +21 -10
- data/lib/spec/runner/heckle_runner.rb +24 -8
- data/lib/spec/runner/heckle_runner_win.rb +10 -0
- data/lib/spec/runner/option_parser.rb +58 -13
- data/lib/spec/runner/spec_matcher.rb +22 -29
- data/lib/spec/runner/spec_parser.rb +1 -0
- data/lib/spec/runner/specification.rb +36 -22
- data/lib/spec/translator.rb +87 -0
- data/lib/spec/version.rb +16 -7
- data/spec/spec/callback/callback_container_spec.rb +27 -0
- data/spec/spec/callback/module_spec.rb +37 -0
- data/spec/spec/callback/object_spec.rb +90 -0
- data/spec/spec/callback/object_with_class_callback_spec.rb +19 -0
- data/spec/spec/expectations/differs/default_spec.rb +107 -0
- data/spec/spec/expectations/extensions/object_spec.rb +46 -0
- data/spec/spec/expectations/fail_with_spec.rb +71 -0
- data/spec/spec/expectations/should/should_==_spec.rb +19 -0
- data/spec/spec/expectations/should/should_=~_spec.rb +13 -0
- data/spec/spec/expectations/should/should_be_a_kind_of_spec.rb +21 -0
- data/spec/spec/expectations/should/should_be_an_instance_of_spec.rb +30 -0
- data/spec/spec/expectations/should/should_be_arbitrary_predicate_spec.rb +81 -0
- data/spec/spec/expectations/should/should_be_close_spec.rb +18 -0
- data/spec/spec/expectations/should/should_be_comparison_operator_spec.rb +44 -0
- data/spec/spec/expectations/should/should_be_false_spec.rb +39 -0
- data/spec/spec/expectations/should/should_be_spec.rb +11 -0
- data/spec/spec/expectations/should/should_be_true_spec.rb +27 -0
- data/spec/spec/expectations/should/should_change_spec.rb +184 -0
- data/spec/spec/expectations/should/should_eql_spec.rb +11 -0
- data/spec/spec/expectations/should/should_equal_spec.rb +11 -0
- data/spec/spec/expectations/should/should_have_at_least_spec.rb +53 -0
- data/spec/spec/expectations/should/should_have_at_most_spec.rb +45 -0
- data/spec/spec/expectations/should/should_have_key_spec.rb +21 -0
- data/spec/spec/expectations/should/should_have_spec.rb +64 -0
- data/spec/spec/expectations/should/should_include_spec.rb +59 -0
- data/spec/spec/expectations/should/should_match_spec.rb +25 -0
- data/spec/spec/expectations/should/should_not_==_spec.rb +15 -0
- data/spec/spec/expectations/should/should_not_be_a_kind_of_spec.rb +21 -0
- data/spec/spec/expectations/should/should_not_be_an_instance_of_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_be_arbitrary_predicate_spec.rb +68 -0
- data/spec/spec/expectations/should/should_not_be_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_change_spec.rb +24 -0
- data/spec/spec/expectations/should/should_not_eql_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_equal_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_have_key_spec.rb +15 -0
- data/spec/spec/expectations/should/should_not_include_spec.rb +58 -0
- data/spec/spec/expectations/should/should_not_match_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_raise_spec.rb +75 -0
- data/spec/spec/expectations/should/should_not_respond_to_spec.rb +15 -0
- data/spec/spec/expectations/should/should_not_throw_spec.rb +35 -0
- data/spec/spec/expectations/should/should_raise_spec.rb +66 -0
- data/spec/spec/expectations/should/should_respond_to_spec.rb +15 -0
- data/spec/spec/expectations/should/should_satisfy_spec.rb +35 -0
- data/spec/spec/expectations/should/should_throw_spec.rb +27 -0
- data/spec/spec/matchers/be_close_spec.rb +33 -0
- data/spec/spec/matchers/be_spec.rb +182 -0
- data/spec/spec/matchers/change_spec.rb +232 -0
- data/spec/spec/matchers/description_generation_spec.rb +147 -0
- data/spec/spec/matchers/eql_spec.rb +41 -0
- data/spec/spec/matchers/equal_spec.rb +41 -0
- data/spec/spec/matchers/handler_spec.rb +75 -0
- data/spec/spec/matchers/has_spec.rb +37 -0
- data/spec/spec/matchers/have_spec.rb +259 -0
- data/spec/spec/matchers/include_spec.rb +33 -0
- data/spec/spec/matchers/match_spec.rb +37 -0
- data/spec/spec/matchers/matcher_methods_spec.rb +85 -0
- data/spec/spec/matchers/raise_error_spec.rb +147 -0
- data/spec/spec/matchers/respond_to_spec.rb +30 -0
- data/spec/spec/matchers/satisfy_spec.rb +36 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +59 -0
- data/spec/spec/mocks/any_number_of_times_spec.rb +34 -0
- data/spec/spec/mocks/at_least_spec.rb +97 -0
- data/spec/spec/mocks/at_most_spec.rb +97 -0
- data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
- data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
- data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
- data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +74 -0
- data/spec/spec/mocks/mock_ordering_spec.rb +80 -0
- data/spec/spec/mocks/mock_spec.rb +407 -0
- data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
- data/spec/spec/mocks/null_object_mock_spec.rb +40 -0
- data/spec/spec/mocks/once_counts_spec.rb +56 -0
- data/spec/spec/mocks/options_hash_spec.rb +31 -0
- data/spec/spec/mocks/partial_mock_spec.rb +52 -0
- data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +64 -0
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +92 -0
- data/spec/spec/mocks/precise_counts_spec.rb +56 -0
- data/spec/spec/mocks/record_messages_spec.rb +26 -0
- data/spec/spec/mocks/stub_spec.rb +159 -0
- data/spec/spec/mocks/twice_counts_spec.rb +67 -0
- data/spec/spec/runner/command_line_spec.rb +32 -0
- data/spec/spec/runner/context_matching_spec.rb +28 -0
- data/spec/spec/runner/context_runner_spec.rb +100 -0
- data/spec/spec/runner/context_spec.rb +405 -0
- data/spec/spec/runner/drb_command_line_spec.rb +74 -0
- data/spec/spec/runner/execution_context_spec.rb +52 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +40 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +21 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +36 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +78 -0
- data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +18 -0
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +41 -0
- data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +21 -0
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +46 -0
- data/spec/spec/runner/heckle_runner_spec.rb +63 -0
- data/spec/spec/runner/heckler_spec.rb +14 -0
- data/spec/spec/runner/kernel_ext_spec.rb +16 -0
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
- data/spec/spec/runner/object_ext_spec.rb +11 -0
- data/spec/spec/runner/option_parser_spec.rb +269 -0
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +47 -0
- data/spec/spec/runner/reporter_spec.rb +126 -0
- data/spec/spec/runner/spec_matcher_spec.rb +107 -0
- data/spec/spec/runner/spec_name_generation_spec.rb +102 -0
- data/spec/spec/runner/spec_parser_spec.rb +37 -0
- data/spec/spec/runner/specification_class_spec.rb +72 -0
- data/spec/spec/runner/specification_instance_spec.rb +160 -0
- data/spec/spec/runner/specification_should_raise_spec.rb +136 -0
- data/spec/spec/spec_classes.rb +102 -0
- data/spec/spec/translator_spec.rb +79 -0
- data/spec/spec_helper.rb +35 -0
- metadata +141 -9
- data/bin/drbspec +0 -3
- data/lib/spec/expectations/diff.rb +0 -28
- data/lib/spec/expectations/extensions/numeric.rb +0 -19
- data/lib/spec/expectations/extensions/string.rb +0 -22
- data/lib/spec/expectations/message_builder.rb +0 -13
@@ -1,153 +1,97 @@
|
|
1
1
|
module Spec
|
2
2
|
module Expectations
|
3
|
-
# rspec adds
|
3
|
+
# rspec adds #should and #should_not to every Object (and,
|
4
4
|
# implicitly, every Class).
|
5
5
|
module ObjectExpectations
|
6
|
-
|
7
|
-
# Supports the following expectations:
|
8
|
-
# receiver.should == expected #any value
|
9
|
-
# Passes if (receiver == expected)
|
10
|
-
#
|
11
|
-
# receiver.should =~ expected #a regexp
|
12
|
-
# Passes if (receiver =~ expected), where expected
|
13
|
-
# is a Regexp.
|
14
|
-
#
|
15
|
-
# NOTE that this does NOT support receiver.should != expected.
|
16
|
-
# Instead, use receiver.should_not == expected
|
17
|
-
def should
|
18
|
-
Should::Should.new self
|
19
|
-
end
|
20
|
-
|
21
|
-
# Supports the following expectations:
|
22
|
-
# receiver.should_not == expected #any value
|
23
|
-
# Passes unless (receiver == expected)
|
24
|
-
#
|
25
|
-
# receiver.should_not =~ expected #a regexp
|
26
|
-
# Passes unless (receiver =~ expected), where expected
|
27
|
-
# is a Regexp.
|
28
|
-
def should_not
|
29
|
-
should.not
|
30
|
-
end
|
31
|
-
|
32
|
-
# Passes if receiver.equal?(expected)
|
33
|
-
def should_equal(expected)
|
34
|
-
should.equal(expected)
|
35
|
-
end
|
36
|
-
|
37
|
-
# Passes unless receiver.equal?(expected)
|
38
|
-
def should_not_equal(expected)
|
39
|
-
should.not.equal(expected)
|
40
|
-
end
|
41
|
-
|
42
|
-
# Passes if receiver.eql?(expected)
|
43
|
-
def should_eql(expected)
|
44
|
-
should.eql(expected)
|
45
|
-
end
|
46
|
-
|
47
|
-
# Passes unless receiver.eql?(expected)
|
48
|
-
def should_not_eql(expected)
|
49
|
-
should.not.eql(expected)
|
50
|
-
end
|
51
6
|
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
7
|
+
# :call-seq:
|
8
|
+
# should(matcher)
|
9
|
+
# should == expected
|
10
|
+
# should =~ expected
|
56
11
|
#
|
57
|
-
#
|
12
|
+
# receiver.should(matcher)
|
13
|
+
# => Passes if matcher.matches?(receiver)
|
58
14
|
#
|
59
|
-
#
|
60
|
-
|
61
|
-
should.have(expected)
|
62
|
-
end
|
63
|
-
alias_method :should_have_exactly, :should_have
|
64
|
-
|
65
|
-
# Specify that the receiver should have at least a
|
66
|
-
# specified number of items in a named collection. For example:
|
15
|
+
# receiver.should == expected #any value
|
16
|
+
# => Passes if (receiver == expected)
|
67
17
|
#
|
68
|
-
#
|
18
|
+
# receiver.should =~ regexp
|
19
|
+
# => Passes if (receiver =~ regexp)
|
69
20
|
#
|
70
|
-
#
|
21
|
+
# See Spec::Matchers for more information about matchers
|
71
22
|
#
|
72
|
-
#
|
23
|
+
# == Warning
|
73
24
|
#
|
74
|
-
#
|
75
|
-
|
76
|
-
|
25
|
+
# NOTE that this does NOT support receiver.should != expected.
|
26
|
+
# Instead, use receiver.should_not == expected
|
27
|
+
def should(matcher=nil, &block)
|
28
|
+
return ExpectationMatcherHandler.handle_matcher(self, matcher, &block) if matcher
|
29
|
+
Should::Should.new(self)
|
77
30
|
end
|
78
31
|
|
79
|
-
#
|
80
|
-
#
|
32
|
+
# :call-seq:
|
33
|
+
# should_not(matcher)
|
34
|
+
# should_not == expected
|
35
|
+
# should_not =~ expected
|
81
36
|
#
|
82
|
-
#
|
37
|
+
# receiver.should_not(matcher)
|
38
|
+
# => Passes unless matcher.matches?(receiver)
|
83
39
|
#
|
84
|
-
#
|
40
|
+
# receiver.should_not == expected
|
41
|
+
# => Passes unless (receiver == expected)
|
85
42
|
#
|
86
|
-
#
|
43
|
+
# receiver.should_not =~ regexp
|
44
|
+
# => Passes unless (receiver =~ regexp)
|
87
45
|
#
|
88
|
-
#
|
89
|
-
def
|
90
|
-
|
46
|
+
# See Spec::Matchers for more information about matchers
|
47
|
+
def should_not(matcher=nil, &block)
|
48
|
+
return NegativeExpectationMatcherHandler.handle_matcher(self, matcher, &block) if matcher
|
49
|
+
should.not
|
91
50
|
end
|
92
51
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
52
|
+
deprecated do
|
53
|
+
# Deprecated: use should have(n).items (see Spec::Matchers)
|
54
|
+
# This will be removed in 0.9
|
55
|
+
def should_have(expected)
|
56
|
+
should.have(expected)
|
57
|
+
end
|
58
|
+
alias_method :should_have_exactly, :should_have
|
97
59
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
def should_be(expected = :___no_arg)
|
104
|
-
should.be(expected)
|
105
|
-
end
|
106
|
-
|
107
|
-
def should_not_be(expected = :___no_arg)
|
108
|
-
should.not.be(expected)
|
109
|
-
end
|
110
|
-
|
111
|
-
# Passes if &block returns true
|
112
|
-
def should_satisfy(&block)
|
113
|
-
should.satisfy(&block)
|
114
|
-
end
|
115
|
-
|
116
|
-
# Passes unless &block returns true
|
117
|
-
def should_not_satisfy(&block)
|
118
|
-
should.not.satisfy(&block)
|
119
|
-
end
|
120
|
-
|
121
|
-
# Passes if receiver is an instance of expected_class
|
122
|
-
def should_be_an_instance_of(expected_class)
|
123
|
-
should.be.an_instance_of(expected_class)
|
124
|
-
end
|
125
|
-
alias_method :should_be_instance_of, :should_be_an_instance_of
|
126
|
-
|
127
|
-
# Passes unless receiver is an instance of expected_class
|
128
|
-
def should_not_be_an_instance_of(expected_class)
|
129
|
-
should.not.be.an_instance_of(expected_class)
|
130
|
-
end
|
131
|
-
|
132
|
-
# Passes if receiver is an instance of either expected_class
|
133
|
-
# or a subclass of expected_class
|
134
|
-
def should_be_a_kind_of(expected_class)
|
135
|
-
should.be.a_kind_of(expected_class)
|
136
|
-
end
|
137
|
-
alias_method :should_be_kind_of, :should_be_a_kind_of
|
138
|
-
|
139
|
-
# Passes unless receiver is an instance of either expected_class
|
140
|
-
# or a subclass of expected_class
|
141
|
-
def should_not_be_a_kind_of(expected_class)
|
142
|
-
should.not.be.a_kind_of(expected_class)
|
143
|
-
end
|
60
|
+
# Deprecated: use should have_at_least(n).items (see Spec::Matchers)
|
61
|
+
# This will be removed in 0.9
|
62
|
+
def should_have_at_least(expected)
|
63
|
+
should.have.at_least(expected)
|
64
|
+
end
|
144
65
|
|
145
|
-
|
146
|
-
|
147
|
-
|
66
|
+
# Deprecated: use should have_at_most(n).items (see Spec::Matchers)
|
67
|
+
# This will be removed in 0.9
|
68
|
+
def should_have_at_most(expected)
|
69
|
+
should.have.at_most(expected)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Deprecated: use should include(expected) (see Spec::Matchers)
|
73
|
+
# This will be removed in 0.9
|
74
|
+
def should_include(expected)
|
75
|
+
should.include(expected)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Deprecated: use should_not include(expected) (see Spec::Matchers)
|
79
|
+
# This will be removed in 0.9
|
80
|
+
def should_not_include(expected)
|
81
|
+
should.not.include(expected)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Deprecated: use should be(expected) (see Spec::Matchers)
|
85
|
+
# This will be removed in 0.9
|
86
|
+
def should_be(expected = :___no_arg)
|
87
|
+
should.be(expected)
|
88
|
+
end
|
148
89
|
|
149
|
-
|
150
|
-
|
90
|
+
# Deprecated: use should_not be(expected) (see Spec::Matchers)
|
91
|
+
# This will be removed in 0.9
|
92
|
+
def should_not_be(expected = :___no_arg)
|
93
|
+
should_not.be(expected)
|
94
|
+
end
|
151
95
|
end
|
152
96
|
end
|
153
97
|
end
|
@@ -155,7 +99,11 @@ end
|
|
155
99
|
|
156
100
|
class Object
|
157
101
|
include Spec::Expectations::ObjectExpectations
|
158
|
-
|
102
|
+
deprecated do
|
103
|
+
include Spec::Expectations::UnderscoreSugar
|
104
|
+
end
|
159
105
|
end
|
160
106
|
|
161
|
-
|
107
|
+
deprecated do
|
108
|
+
Object.handle_underscores_for_rspec!
|
109
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Spec
|
2
|
+
module Expectations
|
3
|
+
module StringHelpers
|
4
|
+
def starts_with?(prefix)
|
5
|
+
to_s[0..(prefix.length - 1)] == prefix
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class String
|
12
|
+
include Spec::Expectations::StringHelpers
|
13
|
+
end
|
14
|
+
|
15
|
+
class Symbol
|
16
|
+
include Spec::Expectations::StringHelpers
|
17
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Spec
|
2
|
+
module Expectations
|
3
|
+
|
4
|
+
module MatcherHandlerHelper
|
5
|
+
def describe(matcher)
|
6
|
+
matcher.respond_to?(:description) ? matcher.description : "[#{matcher.class.name} does not provide a description]"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class ExpectationMatcherHandler
|
11
|
+
class << self
|
12
|
+
include MatcherHandlerHelper
|
13
|
+
def handle_matcher(actual, matcher, &block)
|
14
|
+
unless matcher.nil?
|
15
|
+
match = matcher.matches?(actual, &block)
|
16
|
+
::Spec::Matchers.generated_description = "should #{describe(matcher)}"
|
17
|
+
Spec::Expectations.fail_with(matcher.failure_message) unless match
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class NegativeExpectationMatcherHandler
|
24
|
+
class << self
|
25
|
+
include MatcherHandlerHelper
|
26
|
+
def handle_matcher(actual, matcher, &block)
|
27
|
+
unless matcher.nil?
|
28
|
+
unless matcher.respond_to?(:negative_failure_message)
|
29
|
+
Spec::Expectations.fail_with(
|
30
|
+
<<-EOF
|
31
|
+
Matcher does not support should_not.
|
32
|
+
See Spec::Matchers for more information
|
33
|
+
about matchers.
|
34
|
+
EOF
|
35
|
+
)
|
36
|
+
end
|
37
|
+
match = matcher.matches?(actual, &block)
|
38
|
+
::Spec::Matchers.generated_description = "should not #{describe(matcher)}"
|
39
|
+
Spec::Expectations.fail_with(matcher.negative_failure_message) if match
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -3,14 +3,7 @@ module Spec
|
|
3
3
|
module Should
|
4
4
|
class Base
|
5
5
|
|
6
|
-
|
7
|
-
__delegate_method_missing_to_target "<", "<", expected
|
8
|
-
end
|
9
|
-
|
10
|
-
def <=(expected)
|
11
|
-
__delegate_method_missing_to_target "<=", "<=", expected
|
12
|
-
end
|
13
|
-
|
6
|
+
#== and =~ will stay after the new syntax
|
14
7
|
def ==(expected)
|
15
8
|
__delegate_method_missing_to_target "==", "==", expected
|
16
9
|
end
|
@@ -19,41 +12,51 @@ module Spec
|
|
19
12
|
__delegate_method_missing_to_target "=~", "=~", expected
|
20
13
|
end
|
21
14
|
|
22
|
-
|
23
|
-
|
24
|
-
|
15
|
+
#<, <=, >=, > are all implemented in Spec::Matchers::Be
|
16
|
+
# and will be removed with 0.9
|
17
|
+
deprecated do
|
18
|
+
def <(expected)
|
19
|
+
__delegate_method_missing_to_target "<", "<", expected
|
20
|
+
end
|
21
|
+
|
22
|
+
def <=(expected)
|
23
|
+
__delegate_method_missing_to_target "<=", "<=", expected
|
24
|
+
end
|
25
|
+
|
26
|
+
def >=(expected)
|
27
|
+
__delegate_method_missing_to_target ">=", ">=", expected
|
28
|
+
end
|
25
29
|
|
26
|
-
|
27
|
-
|
30
|
+
def >(expected)
|
31
|
+
__delegate_method_missing_to_target ">", ">", expected
|
32
|
+
end
|
28
33
|
end
|
29
34
|
|
30
35
|
def default_message(expectation, expected=nil)
|
31
|
-
|
32
|
-
|
36
|
+
return "expected #{expected.inspect}, got #{@target.inspect} (using #{expectation})" if expectation == '=='
|
37
|
+
"expected #{expectation} #{expected.inspect}, got #{@target.inspect}" unless expectation == '=='
|
38
|
+
end
|
33
39
|
|
34
|
-
def fail_with_message(message)
|
35
|
-
Spec::Expectations.fail_with(message)
|
40
|
+
def fail_with_message(message, expected=nil, target=nil)
|
41
|
+
Spec::Expectations.fail_with(message, expected, target)
|
36
42
|
end
|
37
43
|
|
38
44
|
def find_supported_sym(original_sym)
|
39
45
|
["#{original_sym}?", "#{original_sym}s?"].each do |alternate_sym|
|
40
46
|
return alternate_sym.to_s if @target.respond_to?(alternate_sym.to_s)
|
41
47
|
end
|
42
|
-
return ["<","<=",">=",">","==","=~"].include?(original_sym) ? original_sym : "#{original_sym}?"
|
43
48
|
end
|
44
49
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
return have.__send__(original_sym.to_s[5..-1].to_sym, *args, &block)
|
50
|
+
deprecated do
|
51
|
+
def method_missing(original_sym, *args, &block)
|
52
|
+
if original_sym.to_s =~ /^not_/
|
53
|
+
return Not.new(@target).__send__(sym, *args, &block)
|
54
|
+
end
|
55
|
+
if original_sym.to_s =~ /^have_/
|
56
|
+
return have.__send__(original_sym.to_s[5..-1].to_sym, *args, &block)
|
57
|
+
end
|
58
|
+
__delegate_method_missing_to_target original_sym, find_supported_sym(original_sym), *args
|
55
59
|
end
|
56
|
-
__delegate_method_missing_to_target original_sym, find_supported_sym(original_sym), *args
|
57
60
|
end
|
58
61
|
end
|
59
62
|
end
|
@@ -58,7 +58,7 @@ module Spec
|
|
58
58
|
class NotChange < Change
|
59
59
|
def evaluate_change
|
60
60
|
if @before_change != @after_change
|
61
|
-
fail_with_message "#{@message} should not have changed, but
|
61
|
+
fail_with_message "#{@message} should not have changed, but did change from #{@before_change.inspect} to #{@after_change.inspect}"
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
@@ -22,7 +22,7 @@ module Spec
|
|
22
22
|
elsif @item_handler.wants_to_handle(sym)
|
23
23
|
@item_handler.handle_message(sym, *args)
|
24
24
|
else
|
25
|
-
|
25
|
+
Spec::Expectations.fail_with("target does not respond to #has_#{sym}?")
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -72,10 +72,10 @@ module Spec
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def build_message(sym, args)
|
75
|
-
message = "
|
75
|
+
message = "expected"
|
76
76
|
message += " at least" if @at_least
|
77
77
|
message += " at most" if @at_most
|
78
|
-
message += " #{@expected} #{sym}
|
78
|
+
message += " #{@expected} #{sym}, got #{actual_size_of(collection(sym, args))}"
|
79
79
|
end
|
80
80
|
|
81
81
|
def as_specified?(sym, args)
|
@@ -103,10 +103,6 @@ module Spec
|
|
103
103
|
@target = target
|
104
104
|
end
|
105
105
|
|
106
|
-
def build_message(sym, args)
|
107
|
-
"#{@target.inspect} #{item_expectation} #{sym}: #{args.collect{|arg| arg.inspect}.join(', ')}"
|
108
|
-
end
|
109
|
-
|
110
106
|
def fail_with(message)
|
111
107
|
Spec::Expectations.fail_with(message)
|
112
108
|
end
|
@@ -114,21 +110,17 @@ module Spec
|
|
114
110
|
|
115
111
|
class PositiveItemHandler < ItemHandler
|
116
112
|
def handle_message(sym, *args)
|
117
|
-
fail_with(
|
118
|
-
|
119
|
-
|
120
|
-
def item_expectation
|
121
|
-
"should have"
|
113
|
+
fail_with(
|
114
|
+
"expected #has_#{sym}?(#{args.collect{|arg| arg.inspect}.join(', ')}) to return true, got false"
|
115
|
+
) unless @target.send("has_#{sym}?", *args)
|
122
116
|
end
|
123
117
|
end
|
124
118
|
|
125
119
|
class NegativeItemHandler < ItemHandler
|
126
120
|
def handle_message(sym, *args)
|
127
|
-
fail_with(
|
128
|
-
|
129
|
-
|
130
|
-
def item_expectation
|
131
|
-
"should not have"
|
121
|
+
fail_with(
|
122
|
+
"expected #has_#{sym}?(#{args.collect{|arg| arg.inspect}.join(', ')}) to return false, got true"
|
123
|
+
) if @target.send("has_#{sym}?", *args)
|
132
124
|
end
|
133
125
|
end
|
134
126
|
end
|