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
@@ -0,0 +1,39 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_be false" do
4
+ specify "should fail when target is true" do
5
+ lambda do
6
+ true.should_be false
7
+ end.should_fail_with "expected false, got true (using .equal?)"
8
+ end
9
+
10
+ specify "should fail when target is a number" do
11
+ lambda do
12
+ 5.should_be false
13
+ end.should_fail
14
+ end
15
+
16
+ specify "should fail when target is a some random object" do
17
+ lambda do
18
+ self.should_be false
19
+ end.should_fail
20
+ end
21
+
22
+ specify "should fail when target is a string" do
23
+ lambda do
24
+ "false".should_be false
25
+ end.should_fail
26
+ end
27
+
28
+ specify "should fail when target is nil" do
29
+ lambda do
30
+ nil.should_be false
31
+ end.should_raise
32
+ end
33
+
34
+ specify "should pass when target is false" do
35
+ lambda do
36
+ false.should_be false
37
+ end.should_not_raise
38
+ end
39
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_be" do
4
+ specify "should pass when objects are the same instance" do
5
+ :apple.should_be(:apple)
6
+ end
7
+
8
+ specify "should fail when objects are not the same instance" do
9
+ lambda { "apple".should_be("apple") }.should_fail
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_be true" do
4
+ specify "should fail when object is false" do
5
+ lambda { false.should_be(true) }.should_fail
6
+ end
7
+
8
+ specify "should fail when object is nil" do
9
+ lambda { nil.should_be(true) }.should_fail
10
+ end
11
+
12
+ specify "should fail when object is a number" do
13
+ lambda { 5.should_be(true) }.should_fail
14
+ end
15
+
16
+ specify "should fail when object is a some random object" do
17
+ lambda { self.should_be(true) }.should_fail
18
+ end
19
+
20
+ specify "should fail when object is a string" do
21
+ lambda { "true".should_be(true) }.should_raise
22
+ end
23
+
24
+ specify "should pass when object is true" do
25
+ true.should_be(true)
26
+ end
27
+ end
@@ -0,0 +1,184 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+ class SomethingExpected
3
+ attr_accessor :some_value
4
+ end
5
+
6
+ context "should_change(actual, message)" do
7
+ setup do
8
+ @instance = SomethingExpected.new
9
+ @instance.some_value = 5
10
+ end
11
+
12
+ specify "should pass when actual is modified by the block" do
13
+ lambda {@instance.some_value = 6}.should_change(@instance, :some_value)
14
+ end
15
+
16
+ specify "should fail when actual is not modified by the block" do
17
+ lambda do
18
+ lambda {}.should_change(@instance, :some_value)
19
+ end.should_fail_with "some_value should have changed, but is still 5"
20
+ end
21
+ end
22
+
23
+ context "should_change { block }" do
24
+ setup do
25
+ @instance = SomethingExpected.new
26
+ @instance.some_value = 5
27
+ end
28
+
29
+ specify "should pass when actual is modified by the block" do
30
+ lambda {@instance.some_value = 6}.should_change { @instance.some_value }
31
+ end
32
+
33
+ specify "should fail when actual is not modified by the block" do
34
+ lambda do
35
+ lambda {}.should_change{ @instance.some_value }
36
+ end.should_fail_with "result should have changed, but is still 5"
37
+ end
38
+ end
39
+
40
+ context "should_change(actual, message).by(expected)" do
41
+ setup do
42
+ @instance = SomethingExpected.new
43
+ @instance.some_value = 5
44
+ end
45
+
46
+ specify "should pass when attribute is changed by expected amount" do
47
+ lambda { @instance.some_value += 1 }.should_change(@instance, :some_value).by(1)
48
+ end
49
+
50
+ specify "should fail when the attribute is changed by unexpected amount" do
51
+ lambda do
52
+ lambda { @instance.some_value += 2 }.should_change(@instance, :some_value).by(1)
53
+ end.should_fail_with "some_value should have been changed by 1, but was changed by 2"
54
+ end
55
+
56
+ specify "should fail when the attribute is changed by unexpected amount in the opposite direction" do
57
+ lambda do
58
+ lambda { @instance.some_value -= 1 }.should_change(@instance, :some_value).by(1)
59
+ end.should_fail_with "some_value should have been changed by 1, but was changed by -1"
60
+ end
61
+ end
62
+
63
+ context "should_change{ block }.by(expected)" do
64
+ setup do
65
+ @instance = SomethingExpected.new
66
+ @instance.some_value = 5
67
+ end
68
+
69
+ specify "should pass when attribute is changed by expected amount" do
70
+ lambda { @instance.some_value += 1 }.should_change{@instance.some_value}.by(1)
71
+ end
72
+
73
+ specify "should fail when the attribute is changed by unexpected amount" do
74
+ lambda do
75
+ lambda { @instance.some_value += 2 }.should_change{@instance.some_value}.by(1)
76
+ end.should_fail_with "result should have been changed by 1, but was changed by 2"
77
+ end
78
+
79
+ specify "should fail when the attribute is changed by unexpected amount in the opposite direction" do
80
+ lambda do
81
+ lambda { @instance.some_value -= 1 }.should_change{@instance.some_value}.by(1)
82
+ end.should_fail_with "result should have been changed by 1, but was changed by -1"
83
+ end
84
+ end
85
+
86
+ context "should_change(actual, message).from(old)" do
87
+ setup do
88
+ @instance = SomethingExpected.new
89
+ @instance.some_value = 'string'
90
+ end
91
+
92
+ specify "should pass when attribute is == to expected value before executing block" do
93
+ lambda { @instance.some_value = "astring" }.should_change(@instance, :some_value).from("string")
94
+ end
95
+
96
+ specify "should fail when attribute is not == to expected value before executing block" do
97
+ lambda do
98
+ lambda { @instance.some_value = "knot" }.should_change(@instance, :some_value).from("cat")
99
+ end.should_fail_with "some_value should have initially been \"cat\", but was \"string\""
100
+ end
101
+ end
102
+
103
+ context "should_change{ block }.from(old)" do
104
+ setup do
105
+ @instance = SomethingExpected.new
106
+ @instance.some_value = 'string'
107
+ end
108
+
109
+ specify "should pass when attribute is == to expected value before executing block" do
110
+ lambda { @instance.some_value = "astring" }.should_change{@instance.some_value}.from("string")
111
+ end
112
+
113
+ specify "should fail when attribute is not == to expected value before executing block" do
114
+ lambda do
115
+ lambda { @instance.some_value = "knot" }.should_change{@instance.some_value}.from("cat")
116
+ end.should_fail_with "result should have initially been \"cat\", but was \"string\""
117
+ end
118
+ end
119
+
120
+ context "should_change(actual, message).to(new)" do
121
+ setup do
122
+ @instance = SomethingExpected.new
123
+ @instance.some_value = 'string'
124
+ end
125
+
126
+ specify "should pass when attribute is == to expected value after executing block" do
127
+ lambda { @instance.some_value = "cat" }.should_change(@instance, :some_value).to("cat")
128
+ end
129
+
130
+ specify "should fail when attribute is not == to expected value after executing block" do
131
+ lambda do
132
+ lambda { @instance.some_value = "cat" }.should_change(@instance, :some_value).from("string").to("dog")
133
+ end.should_fail_with "some_value should have been changed to \"dog\", but is now \"cat\""
134
+ end
135
+ end
136
+
137
+ context "should_change{ block }.to(new)" do
138
+ setup do
139
+ @instance = SomethingExpected.new
140
+ @instance.some_value = 'string'
141
+ end
142
+
143
+ specify "should pass when attribute is == to expected value after executing block" do
144
+ lambda { @instance.some_value = "cat" }.should_change{@instance.some_value}.to("cat")
145
+ end
146
+
147
+ specify "should fail when attribute is not == to expected value after executing block" do
148
+ lambda do
149
+ lambda { @instance.some_value = "cat" }.should_change{@instance.some_value}.from("string").to("dog")
150
+ end.should_fail_with "result should have been changed to \"dog\", but is now \"cat\""
151
+ end
152
+ end
153
+
154
+ context "should_change(actual, message).from(old).to(new)" do
155
+ setup do
156
+ @instance = SomethingExpected.new
157
+ @instance.some_value = 'string'
158
+ end
159
+
160
+ specify "should pass when #to comes before #from" do
161
+ lambda { @instance.some_value = "cat" }.should_change(@instance, :some_value).to("cat").from("string")
162
+ end
163
+
164
+ specify "should pass when #from comes before #to" do
165
+ lambda do
166
+ lambda { @instance.some_value = "cat" }.should_change(@instance, :some_value).from("string").to("cat")
167
+ end.should_pass
168
+ end
169
+ end
170
+
171
+ context "should_change{ block }.from(old).to(new)" do
172
+ setup do
173
+ @instance = SomethingExpected.new
174
+ @instance.some_value = 'string'
175
+ end
176
+
177
+ specify "should pass when #to comes before #from" do
178
+ lambda { @instance.some_value = "cat" }.should_change{@instance.some_value}.to("cat").from("string")
179
+ end
180
+
181
+ specify "should pass when #from comes before #to" do
182
+ lambda { @instance.some_value = "cat" }.should_change{@instance.some_value}.from("string").to("cat")
183
+ end
184
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_eql" do
4
+ specify "should pass when objects are equal (by value)" do
5
+ "apples".should_eql("apples")
6
+ end
7
+
8
+ specify "should fail when objects are not equal (by value)" do
9
+ lambda { "apples".should_eql("cadillacs") }.should_fail_with "expected \"cadillacs\", got \"apples\" (using .eql?)"
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_equal" do
4
+ specify "should pass when objects are the same instance" do
5
+ :apple.should_equal(:apple)
6
+ end
7
+
8
+ specify "should fail when objects are not the same instance" do
9
+ lambda { "apple".should_equal("apple") }.should_fail_with "expected \"apple\", got \"apple\" (using .equal?)"
10
+ end
11
+ end
@@ -0,0 +1,53 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Expectations
5
+ module Helper
6
+ context "should_have_at_least" do
7
+ setup do
8
+ @owner = CollectionOwner.new
9
+ (1..3).each do |n|
10
+ @owner.add_to_collection_with_length_method(n)
11
+ @owner.add_to_collection_with_size_method(n)
12
+ end
13
+ end
14
+
15
+ specify "should not raise when expecting actual length" do
16
+ lambda do
17
+ @owner.should_have_at_least(3).items_in_collection_with_length_method
18
+ end.should_pass
19
+ end
20
+
21
+ specify "should not raise when expecting actual size" do
22
+ lambda do
23
+ @owner.should_have_at_least(3).items_in_collection_with_size_method
24
+ end.should_pass
25
+ end
26
+
27
+ specify "should not raise when expecting less than actual length" do
28
+ lambda do
29
+ @owner.should_have_at_least(2).items_in_collection_with_length_method
30
+ end.should_pass
31
+ end
32
+
33
+ specify "should not raise when expecting less than actual size" do
34
+ lambda do
35
+ @owner.should_have_at_least(2).items_in_collection_with_size_method
36
+ end.should_pass
37
+ end
38
+
39
+ specify "should raise when expecting more than actual length" do
40
+ lambda do
41
+ @owner.should_have_at_least(4).items_in_collection_with_length_method
42
+ end.should_fail
43
+ end
44
+
45
+ specify "should raise when expecting more than actual size" do
46
+ lambda do
47
+ @owner.should_have_at_least(4).items_in_collection_with_size_method
48
+ end.should_fail
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,45 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Expectations
5
+ module Helper
6
+ context "should_have_at_most" do
7
+ setup do
8
+ @owner = CollectionOwner.new
9
+ (1..3).each do |n|
10
+ @owner.add_to_collection_with_length_method(n)
11
+ @owner.add_to_collection_with_size_method(n)
12
+ end
13
+ end
14
+
15
+ specify "should fail when expecting actual length" do
16
+ @owner.should_have_at_most(3).items_in_collection_with_length_method
17
+ end
18
+
19
+ specify "should fail when expecting actual size" do
20
+ @owner.should_have_at_most(3).items_in_collection_with_size_method
21
+ end
22
+
23
+ specify "should fail when expecting more than actual length" do
24
+ @owner.should_have_at_most(4).items_in_collection_with_length_method
25
+ end
26
+
27
+ specify "should fail when expecting more than actual size" do
28
+ @owner.should_have_at_most(4).items_in_collection_with_size_method
29
+ end
30
+
31
+ specify "should pass when expecting less than actual length" do
32
+ lambda do
33
+ @owner.should_have_at_most(2).items_in_collection_with_length_method
34
+ end.should_fail
35
+ end
36
+
37
+ specify "should pass when expecting less than actual size" do
38
+ lambda do
39
+ @owner.should_have_at_most(2).items_in_collection_with_size_method
40
+ end.should_fail
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_have_key" do
4
+ specify "should pass when key is present" do
5
+ lambda do
6
+ {"a" => 1}.should_have_key("a")
7
+ end.should_not_raise
8
+ end
9
+
10
+ specify "should fail when key is not present" do
11
+ lambda do
12
+ {"a" => 1}.should_have_key("b")
13
+ end.should_fail_with('expected #has_key?("b") to return true, got false')
14
+ end
15
+
16
+ specify "should fail when target does not respond to has_key?" do
17
+ lambda do
18
+ Object.new.should_have_key("b")
19
+ end.should_fail_with /target does not respond to #has_key\?/
20
+ end
21
+ end
@@ -0,0 +1,64 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Expectations
5
+ module Helper
6
+ context "should_have(n).items" do
7
+ setup do
8
+ @owner = CollectionOwner.new
9
+ (1..3).each do |n|
10
+ @owner.add_to_collection_with_length_method(n)
11
+ @owner.add_to_collection_with_size_method(n)
12
+ end
13
+ end
14
+
15
+ specify "should pass when expecting actual length" do
16
+ @owner.should_have(3).items_in_collection_with_length_method
17
+ @owner.should_have_exactly(3).items_in_collection_with_length_method
18
+ end
19
+
20
+ specify "should pass when expecting actual size" do
21
+ @owner.should_have(3).items_in_collection_with_size_method
22
+ @owner.should_have_exactly(3).items_in_collection_with_size_method
23
+ end
24
+
25
+ specify "should pass when expecting actual size with args" do
26
+ @owner.should_have(3).items_for("a")
27
+ @owner.should_have_exactly(3).items_for("a")
28
+ @owner.should_have(1).items_for("b")
29
+ @owner.should_have_exactly(1).items_for("b")
30
+ end
31
+
32
+ specify "should raise when expecting less than actual length" do
33
+ lambda do
34
+ @owner.should_have(2).items_in_collection_with_length_method
35
+ end.should_fail
36
+ end
37
+
38
+ specify "should raise when expecting less than actual length with exactly" do
39
+ lambda do
40
+ @owner.should_have_exactly(2).items_in_collection_with_length_method
41
+ end.should_fail
42
+ end
43
+
44
+ specify "should raise when expecting less than actual size" do
45
+ lambda do
46
+ @owner.should_have(2).items_in_collection_with_size_method
47
+ end.should_fail
48
+ end
49
+
50
+ specify "should raise when expecting more than actual length" do
51
+ lambda do
52
+ @owner.should_have(4).items_in_collection_with_length_method
53
+ end.should_fail
54
+ end
55
+
56
+ specify "should raise when expecting more than actual size" do
57
+ lambda do
58
+ @owner.should_have(4).items_in_collection_with_size_method
59
+ end.should_fail_with "expected 4 items_in_collection_with_size_method, got 3"
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end