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.
Files changed (194) hide show
  1. data/CHANGES +60 -1
  2. data/EXAMPLES.rd +38 -19
  3. data/MIT-LICENSE +1 -1
  4. data/README +24 -17
  5. data/RELEASE-PLAN +117 -0
  6. data/Rakefile +24 -18
  7. data/TODO.0.8.0 +5 -0
  8. data/examples/auto_spec_name_generation_example.rb +18 -0
  9. data/examples/custom_expectation_matchers.rb +53 -0
  10. data/examples/dynamic_spec.rb +9 -0
  11. data/examples/io_processor_spec.rb +2 -2
  12. data/examples/mocking_example.rb +4 -4
  13. data/examples/partial_mock_example.rb +2 -2
  14. data/examples/predicate_example.rb +2 -2
  15. data/examples/stack_spec.rb +32 -36
  16. data/examples/stubbing_example.rb +19 -19
  17. data/examples/test_case_spec.rb +6 -6
  18. data/lib/spec.rb +3 -0
  19. data/lib/spec/callback.rb +8 -0
  20. data/lib/spec/callback/extensions/object.rb +4 -0
  21. data/lib/spec/deprecated.rb +3 -0
  22. data/lib/spec/expectations.rb +44 -17
  23. data/lib/spec/expectations/extensions.rb +1 -2
  24. data/lib/spec/expectations/extensions/object.rb +78 -130
  25. data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  26. data/lib/spec/expectations/handler.rb +47 -0
  27. data/lib/spec/expectations/should/base.rb +32 -29
  28. data/lib/spec/expectations/should/change.rb +1 -1
  29. data/lib/spec/expectations/should/have.rb +9 -17
  30. data/lib/spec/expectations/should/not.rb +54 -56
  31. data/lib/spec/expectations/should/should.rb +59 -65
  32. data/lib/spec/expectations/sugar.rb +27 -4
  33. data/lib/spec/matchers.rb +160 -0
  34. data/lib/spec/matchers/be.rb +161 -0
  35. data/lib/spec/matchers/be_close.rb +37 -0
  36. data/lib/spec/matchers/change.rb +120 -0
  37. data/lib/spec/matchers/eql.rb +43 -0
  38. data/lib/spec/matchers/equal.rb +43 -0
  39. data/lib/spec/matchers/has.rb +44 -0
  40. data/lib/spec/matchers/have.rb +140 -0
  41. data/lib/spec/matchers/include.rb +50 -0
  42. data/lib/spec/matchers/match.rb +41 -0
  43. data/lib/spec/matchers/raise_error.rb +100 -0
  44. data/lib/spec/matchers/respond_to.rb +35 -0
  45. data/lib/spec/matchers/satisfy.rb +47 -0
  46. data/lib/spec/matchers/throw_symbol.rb +75 -0
  47. data/lib/spec/mocks.rb +224 -1
  48. data/lib/spec/mocks/argument_expectation.rb +16 -2
  49. data/lib/spec/mocks/error_generator.rb +5 -3
  50. data/lib/spec/mocks/errors.rb +2 -2
  51. data/lib/spec/mocks/extensions/object.rb +1 -1
  52. data/lib/spec/mocks/message_expectation.rb +29 -19
  53. data/lib/spec/mocks/{mock_methods.rb → methods.rb} +5 -5
  54. data/lib/spec/mocks/mock.rb +2 -2
  55. data/lib/spec/mocks/mock_handler.rb +81 -68
  56. data/lib/spec/rake/spectask.rb +7 -12
  57. data/lib/spec/rake/verify_rcov.rb +1 -1
  58. data/lib/spec/runner.rb +117 -0
  59. data/lib/spec/runner/command_line.rb +8 -5
  60. data/lib/spec/runner/context.rb +13 -37
  61. data/lib/spec/runner/context_eval.rb +4 -3
  62. data/lib/spec/runner/context_runner.rb +7 -4
  63. data/lib/spec/runner/drb_command_line.rb +1 -1
  64. data/lib/spec/runner/execution_context.rb +3 -11
  65. data/lib/spec/runner/extensions/kernel.rb +7 -5
  66. data/lib/spec/runner/extensions/object.rb +4 -1
  67. data/lib/spec/runner/formatter/base_text_formatter.rb +11 -3
  68. data/lib/spec/runner/formatter/html_formatter.rb +21 -10
  69. data/lib/spec/runner/heckle_runner.rb +24 -8
  70. data/lib/spec/runner/heckle_runner_win.rb +10 -0
  71. data/lib/spec/runner/option_parser.rb +58 -13
  72. data/lib/spec/runner/spec_matcher.rb +22 -29
  73. data/lib/spec/runner/spec_parser.rb +1 -0
  74. data/lib/spec/runner/specification.rb +36 -22
  75. data/lib/spec/translator.rb +87 -0
  76. data/lib/spec/version.rb +16 -7
  77. data/spec/spec/callback/callback_container_spec.rb +27 -0
  78. data/spec/spec/callback/module_spec.rb +37 -0
  79. data/spec/spec/callback/object_spec.rb +90 -0
  80. data/spec/spec/callback/object_with_class_callback_spec.rb +19 -0
  81. data/spec/spec/expectations/differs/default_spec.rb +107 -0
  82. data/spec/spec/expectations/extensions/object_spec.rb +46 -0
  83. data/spec/spec/expectations/fail_with_spec.rb +71 -0
  84. data/spec/spec/expectations/should/should_==_spec.rb +19 -0
  85. data/spec/spec/expectations/should/should_=~_spec.rb +13 -0
  86. data/spec/spec/expectations/should/should_be_a_kind_of_spec.rb +21 -0
  87. data/spec/spec/expectations/should/should_be_an_instance_of_spec.rb +30 -0
  88. data/spec/spec/expectations/should/should_be_arbitrary_predicate_spec.rb +81 -0
  89. data/spec/spec/expectations/should/should_be_close_spec.rb +18 -0
  90. data/spec/spec/expectations/should/should_be_comparison_operator_spec.rb +44 -0
  91. data/spec/spec/expectations/should/should_be_false_spec.rb +39 -0
  92. data/spec/spec/expectations/should/should_be_spec.rb +11 -0
  93. data/spec/spec/expectations/should/should_be_true_spec.rb +27 -0
  94. data/spec/spec/expectations/should/should_change_spec.rb +184 -0
  95. data/spec/spec/expectations/should/should_eql_spec.rb +11 -0
  96. data/spec/spec/expectations/should/should_equal_spec.rb +11 -0
  97. data/spec/spec/expectations/should/should_have_at_least_spec.rb +53 -0
  98. data/spec/spec/expectations/should/should_have_at_most_spec.rb +45 -0
  99. data/spec/spec/expectations/should/should_have_key_spec.rb +21 -0
  100. data/spec/spec/expectations/should/should_have_spec.rb +64 -0
  101. data/spec/spec/expectations/should/should_include_spec.rb +59 -0
  102. data/spec/spec/expectations/should/should_match_spec.rb +25 -0
  103. data/spec/spec/expectations/should/should_not_==_spec.rb +15 -0
  104. data/spec/spec/expectations/should/should_not_be_a_kind_of_spec.rb +21 -0
  105. data/spec/spec/expectations/should/should_not_be_an_instance_of_spec.rb +11 -0
  106. data/spec/spec/expectations/should/should_not_be_arbitrary_predicate_spec.rb +68 -0
  107. data/spec/spec/expectations/should/should_not_be_spec.rb +11 -0
  108. data/spec/spec/expectations/should/should_not_change_spec.rb +24 -0
  109. data/spec/spec/expectations/should/should_not_eql_spec.rb +11 -0
  110. data/spec/spec/expectations/should/should_not_equal_spec.rb +11 -0
  111. data/spec/spec/expectations/should/should_not_have_key_spec.rb +15 -0
  112. data/spec/spec/expectations/should/should_not_include_spec.rb +58 -0
  113. data/spec/spec/expectations/should/should_not_match_spec.rb +11 -0
  114. data/spec/spec/expectations/should/should_not_raise_spec.rb +75 -0
  115. data/spec/spec/expectations/should/should_not_respond_to_spec.rb +15 -0
  116. data/spec/spec/expectations/should/should_not_throw_spec.rb +35 -0
  117. data/spec/spec/expectations/should/should_raise_spec.rb +66 -0
  118. data/spec/spec/expectations/should/should_respond_to_spec.rb +15 -0
  119. data/spec/spec/expectations/should/should_satisfy_spec.rb +35 -0
  120. data/spec/spec/expectations/should/should_throw_spec.rb +27 -0
  121. data/spec/spec/matchers/be_close_spec.rb +33 -0
  122. data/spec/spec/matchers/be_spec.rb +182 -0
  123. data/spec/spec/matchers/change_spec.rb +232 -0
  124. data/spec/spec/matchers/description_generation_spec.rb +147 -0
  125. data/spec/spec/matchers/eql_spec.rb +41 -0
  126. data/spec/spec/matchers/equal_spec.rb +41 -0
  127. data/spec/spec/matchers/handler_spec.rb +75 -0
  128. data/spec/spec/matchers/has_spec.rb +37 -0
  129. data/spec/spec/matchers/have_spec.rb +259 -0
  130. data/spec/spec/matchers/include_spec.rb +33 -0
  131. data/spec/spec/matchers/match_spec.rb +37 -0
  132. data/spec/spec/matchers/matcher_methods_spec.rb +85 -0
  133. data/spec/spec/matchers/raise_error_spec.rb +147 -0
  134. data/spec/spec/matchers/respond_to_spec.rb +30 -0
  135. data/spec/spec/matchers/satisfy_spec.rb +36 -0
  136. data/spec/spec/matchers/throw_symbol_spec.rb +59 -0
  137. data/spec/spec/mocks/any_number_of_times_spec.rb +34 -0
  138. data/spec/spec/mocks/at_least_spec.rb +97 -0
  139. data/spec/spec/mocks/at_most_spec.rb +97 -0
  140. data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
  141. data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
  142. data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
  143. data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
  144. data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +74 -0
  145. data/spec/spec/mocks/mock_ordering_spec.rb +80 -0
  146. data/spec/spec/mocks/mock_spec.rb +407 -0
  147. data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
  148. data/spec/spec/mocks/null_object_mock_spec.rb +40 -0
  149. data/spec/spec/mocks/once_counts_spec.rb +56 -0
  150. data/spec/spec/mocks/options_hash_spec.rb +31 -0
  151. data/spec/spec/mocks/partial_mock_spec.rb +52 -0
  152. data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +64 -0
  153. data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +92 -0
  154. data/spec/spec/mocks/precise_counts_spec.rb +56 -0
  155. data/spec/spec/mocks/record_messages_spec.rb +26 -0
  156. data/spec/spec/mocks/stub_spec.rb +159 -0
  157. data/spec/spec/mocks/twice_counts_spec.rb +67 -0
  158. data/spec/spec/runner/command_line_spec.rb +32 -0
  159. data/spec/spec/runner/context_matching_spec.rb +28 -0
  160. data/spec/spec/runner/context_runner_spec.rb +100 -0
  161. data/spec/spec/runner/context_spec.rb +405 -0
  162. data/spec/spec/runner/drb_command_line_spec.rb +74 -0
  163. data/spec/spec/runner/execution_context_spec.rb +52 -0
  164. data/spec/spec/runner/formatter/html_formatter_spec.rb +40 -0
  165. data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +21 -0
  166. data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +36 -0
  167. data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +78 -0
  168. data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +18 -0
  169. data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +41 -0
  170. data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +21 -0
  171. data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +46 -0
  172. data/spec/spec/runner/heckle_runner_spec.rb +63 -0
  173. data/spec/spec/runner/heckler_spec.rb +14 -0
  174. data/spec/spec/runner/kernel_ext_spec.rb +16 -0
  175. data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
  176. data/spec/spec/runner/object_ext_spec.rb +11 -0
  177. data/spec/spec/runner/option_parser_spec.rb +269 -0
  178. data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +47 -0
  179. data/spec/spec/runner/reporter_spec.rb +126 -0
  180. data/spec/spec/runner/spec_matcher_spec.rb +107 -0
  181. data/spec/spec/runner/spec_name_generation_spec.rb +102 -0
  182. data/spec/spec/runner/spec_parser_spec.rb +37 -0
  183. data/spec/spec/runner/specification_class_spec.rb +72 -0
  184. data/spec/spec/runner/specification_instance_spec.rb +160 -0
  185. data/spec/spec/runner/specification_should_raise_spec.rb +136 -0
  186. data/spec/spec/spec_classes.rb +102 -0
  187. data/spec/spec/translator_spec.rb +79 -0
  188. data/spec/spec_helper.rb +35 -0
  189. metadata +141 -9
  190. data/bin/drbspec +0 -3
  191. data/lib/spec/expectations/diff.rb +0 -28
  192. data/lib/spec/expectations/extensions/numeric.rb +0 -19
  193. data/lib/spec/expectations/extensions/string.rb +0 -22
  194. data/lib/spec/expectations/message_builder.rb +0 -13
@@ -1,4 +1,3 @@
1
1
  require 'spec/expectations/extensions/object'
2
2
  require 'spec/expectations/extensions/proc'
3
- require 'spec/expectations/extensions/numeric'
4
- require 'spec/expectations/extensions/string'
3
+ require 'spec/expectations/extensions/string_and_symbol'
@@ -1,153 +1,97 @@
1
1
  module Spec
2
2
  module Expectations
3
- # rspec adds all of these expectations to every Object (and,
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
- # Specify that the receiver should have a
53
- # specified number of items in a named collection. For example:
54
- #
55
- # team.should_have(40).players
7
+ # :call-seq:
8
+ # should(matcher)
9
+ # should == expected
10
+ # should =~ expected
56
11
  #
57
- # Passes if team.players.size == 40.
12
+ # receiver.should(matcher)
13
+ # => Passes if matcher.matches?(receiver)
58
14
  #
59
- # Works for collections with size() and/or length() methods.
60
- def should_have(expected)
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
- # team.should_have_at_least(10).players
18
+ # receiver.should =~ regexp
19
+ # => Passes if (receiver =~ regexp)
69
20
  #
70
- # Passes if team.players.size == 10 (or more)
21
+ # See Spec::Matchers for more information about matchers
71
22
  #
72
- # Fails if team.players.size == 9 (or less)
23
+ # == Warning
73
24
  #
74
- # Works for collections with size() and/or length() methods.
75
- def should_have_at_least(expected)
76
- should.have.at_least(expected)
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
- # Specify that the receiver should have at most a
80
- # specified number of items in a named collection. For example:
32
+ # :call-seq:
33
+ # should_not(matcher)
34
+ # should_not == expected
35
+ # should_not =~ expected
81
36
  #
82
- # team.should_have_at_most(10).players
37
+ # receiver.should_not(matcher)
38
+ # => Passes unless matcher.matches?(receiver)
83
39
  #
84
- # Passes if team.players.size == 10 (or less)
40
+ # receiver.should_not == expected
41
+ # => Passes unless (receiver == expected)
85
42
  #
86
- # Fails if team.players.size == 11 (or more)
43
+ # receiver.should_not =~ regexp
44
+ # => Passes unless (receiver =~ regexp)
87
45
  #
88
- # Works for collections with size() and/or length() methods.
89
- def should_have_at_most(expected)
90
- should.have.at_most(expected)
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
- # Passes if receiver.include?(expected)
94
- def should_include(expected)
95
- should.include(expected)
96
- end
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
- # Passes unless receiver.include?(expected)
99
- def should_not_include(expected)
100
- should.not.include(expected)
101
- end
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
- def should_respond_to(message)
146
- should.respond_to(message)
147
- end
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
- def should_not_respond_to(message)
150
- should.not.respond_to(message)
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
- include Spec::Expectations::UnderscoreSugar
102
+ deprecated do
103
+ include Spec::Expectations::UnderscoreSugar
104
+ end
159
105
  end
160
106
 
161
- Object.handle_underscores_for_rspec!
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
- def <(expected)
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
- def >=(expected)
23
- __delegate_method_missing_to_target ">=", ">=", expected
24
- end
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
- def >(expected)
27
- __delegate_method_missing_to_target ">", ">", expected
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
- Spec::Expectations.build_message(@target, expectation, expected)
32
- end
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
- def method_missing(original_sym, *args, &block)
46
- if original_sym.to_s =~ /^not_/
47
- return Not.new(@target).__send__(original_sym.to_s[4..-1].to_sym, *args, &block)
48
- end
49
- if original_sym.to_s =~ /^be_/
50
- @be_seen = true
51
- return __send__(original_sym.to_s[3..-1].to_sym, *args, &block)
52
- end
53
- if original_sym.to_s =~ /^have_/
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 is now #{@after_change.inspect}"
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
- raise NoMethodError.new("#{@target.inspect} does not respond to `#{sym}' or `has_#{sym}?'")
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 = "#{@target.inspect} should have"
75
+ message = "expected"
76
76
  message += " at least" if @at_least
77
77
  message += " at most" if @at_most
78
- message += " #{@expected} #{sym} (has #{actual_size_of(collection(sym, args))})"
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(build_message(sym, args)) unless @target.send("has_#{sym}?", *args)
118
- end
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(build_message(sym, args)) if @target.send("has_#{sym}?", *args)
128
- end
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