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,35 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_not_throw" do
4
+ specify "should fail when expected symbol is actually thrown" do
5
+ lambda do
6
+ lambda do
7
+ throw(:foo)
8
+ end.should_not_throw(:foo)
9
+ end.should_fail
10
+ end
11
+
12
+ specify "should pass when expected symbol is thrown" do
13
+ lambda do
14
+ lambda do
15
+ throw(:bar)
16
+ end.should_not_throw(:foo)
17
+ end.should_not_raise
18
+ end
19
+
20
+ specify "should pass when no symbol is thrown" do
21
+ lambda do
22
+ lambda do
23
+ "".to_s
24
+ end.should_not_throw(:foo)
25
+ end.should_not_raise
26
+ end
27
+
28
+ specify "should pass when no symbol is thrown and none is specified" do
29
+ lambda do
30
+ lambda do
31
+ "".to_s
32
+ end.should_not_throw
33
+ end.should_not_raise
34
+ end
35
+ end
@@ -0,0 +1,66 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_raise" do
4
+ specify "should fail when exact exception is raised with wrong message" do
5
+ lambda do
6
+ lambda do
7
+ raise(StandardError.new("chunky bacon"))
8
+ end.should_raise(StandardError, "rotten tomatoes")
9
+ end.should_raise(Spec::Expectations::ExpectationNotMetError)
10
+ end
11
+
12
+ specify "should fail when exact exception is raised with message not matching regexp" do
13
+ lambda do
14
+ lambda do
15
+ raise(StandardError.new("chunky bacon"))
16
+ end.should_raise(StandardError, /lean/)
17
+ end.should_raise(Spec::Expectations::ExpectationNotMetError)
18
+ end
19
+
20
+ specify "should fail when no exception is raised" do
21
+ lambda do
22
+ lambda {}.should_raise(SyntaxError)
23
+ end.should_raise(Spec::Expectations::ExpectationNotMetError, "expected SyntaxError but nothing was raised")
24
+ end
25
+
26
+ specify "should fail when wrong exception is raised" do
27
+ lambda do
28
+ lambda do
29
+ "".nonexistent_method
30
+ end.should_raise(SyntaxError)
31
+ end.should_raise(Spec::Expectations::ExpectationNotMetError, /expected SyntaxError, got #<NoMethodError: undefined method/)
32
+ end
33
+
34
+ specify "should pass when exact exception is raised" do
35
+ lambda do
36
+ lambda do
37
+ "".nonexistent_method
38
+ end.should_raise(NoMethodError)
39
+ end.should_not_raise
40
+ end
41
+
42
+ specify "should pass when exact exception is raised with message" do
43
+ lambda do
44
+ lambda do
45
+ raise(StandardError.new("this is standard"))
46
+ end.should_raise(StandardError, "this is standard")
47
+ end.should_not_raise
48
+ end
49
+
50
+ specify "should pass when exact exception is raised with message matching regexp" do
51
+ lambda do
52
+ lambda do
53
+ raise(StandardError.new("this is standard"))
54
+ end.should_raise(StandardError, /standard$/)
55
+ end.should_not_raise
56
+ end
57
+
58
+ specify "should pass when subclass exception is raised" do
59
+ lambda do
60
+ lambda do
61
+ "".nonexistent_method
62
+ end.should_raise
63
+ end.should_not_raise
64
+ end
65
+
66
+ end
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_respond_to" do
4
+ specify "should fail when target doesnt respond to" do
5
+ lambda do
6
+ "".should_respond_to(:connect)
7
+ end.should_fail
8
+ end
9
+
10
+ specify "should pass when target responds to" do
11
+ lambda do
12
+ "".should_respond_to(:length)
13
+ end.should_not_raise
14
+ end
15
+ end
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_satisfy" do
4
+ specify "should not raise exception when block yields true" do
5
+ lambda do
6
+ 5.should_satisfy do |target|
7
+ true
8
+ end
9
+ end.should_not_raise
10
+ end
11
+
12
+ specify "should not raise exception when block yields true again" do
13
+ lambda do
14
+ 5.should_not_satisfy do |target|
15
+ false
16
+ end
17
+ end.should_not_raise
18
+ end
19
+
20
+ specify "should raise exception when block yields false" do
21
+ lambda do
22
+ 5.should_satisfy do |target|
23
+ false
24
+ end
25
+ end.should_fail
26
+ end
27
+
28
+ specify "should raise exception when block yields false again" do
29
+ lambda do
30
+ 5.should_not_satisfy do |target|
31
+ true
32
+ end
33
+ end.should_fail
34
+ end
35
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper.rb'
2
+
3
+ context "should_throw" do
4
+
5
+ specify "should fail when no symbol is thrown" do
6
+ lambda do
7
+ lambda {}.should_throw(:foo)
8
+ end.should_fail
9
+ end
10
+
11
+ specify "should fail when wrong symbol is thrown" do
12
+ lambda do
13
+ lambda do
14
+ throw(:bar)
15
+ end.should_throw(:foo)
16
+ end.should_fail
17
+ end
18
+
19
+ specify "should pass when proper symbol is thrown" do
20
+ lambda do
21
+ lambda do
22
+ throw(:foo)
23
+ end.should_throw(:foo)
24
+ end.should_not_raise
25
+ end
26
+
27
+ end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ context "should be_close(expected, delta)" do
4
+ specify "should pass if target == expected" do
5
+ 5.0.should be_close(5.0, 0.5)
6
+ end
7
+ specify "should pass if target < expected + delta" do
8
+ 5.49.should be_close(5.0, 0.5)
9
+ end
10
+ specify "should pass if target > expected - delta" do
11
+ 4.51.should be_close(5.0, 0.5)
12
+ end
13
+ specify "should fail if target == expected - delta" do
14
+ lambda {
15
+ 4.5.should be_close(5.0, 0.5)
16
+ }.should fail_with("expected 5.0 +/- (<0.5), got 4.5")
17
+ end
18
+ specify "should fail if target < expected - delta" do
19
+ lambda {
20
+ 4.49.should be_close(5.0, 0.5)
21
+ }.should fail_with("expected 5.0 +/- (<0.5), got 4.49")
22
+ end
23
+ specify "should fail if target == expected + delta" do
24
+ lambda {
25
+ 5.5.should be_close(5.0, 0.5)
26
+ }.should fail_with("expected 5.0 +/- (<0.5), got 5.5")
27
+ end
28
+ specify "should fail if target > expected + delta" do
29
+ lambda {
30
+ 5.51.should be_close(5.0, 0.5)
31
+ }.should fail_with("expected 5.0 +/- (<0.5), got 5.51")
32
+ end
33
+ end
@@ -0,0 +1,182 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ context "should be_predicate" do
4
+ specify "should pass when actual returns true for :predicate?" do
5
+ actual = stub("actual", :happy? => true)
6
+ actual.should be_happy
7
+ end
8
+
9
+ specify "should pass when actual returns true for :predicates? (present tense)" do
10
+ actual = stub("actual", :exists? => true)
11
+ actual.should be_exist
12
+ end
13
+
14
+ specify "should fail when actual returns false for :predicate?" do
15
+ actual = stub("actual", :happy? => false)
16
+ lambda {
17
+ actual.should be_happy
18
+ }.should fail_with("expected happy? to return true, got false")
19
+ end
20
+
21
+ specify "should fail when actual does not respond to :predicate?" do
22
+ lambda {
23
+ Object.new.should be_happy
24
+ }.should raise_error(NameError)
25
+ end
26
+ end
27
+
28
+ context "should_not be_predicate" do
29
+ specify "should pass when actual returns false for :sym?" do
30
+ actual = stub("actual", :happy? => false)
31
+ actual.should_not be_happy
32
+ end
33
+
34
+ specify "should fail when actual returns true for :sym?" do
35
+ actual = stub("actual", :happy? => true)
36
+ lambda {
37
+ actual.should_not be_happy
38
+ }.should fail_with("expected happy? to return false, got true")
39
+ end
40
+
41
+ specify "should fail when actual does not respond to :sym?" do
42
+ lambda {
43
+ Object.new.should_not be_happy
44
+ }.should raise_error(NameError)
45
+ end
46
+ end
47
+
48
+ context "should be_predicate(*args)" do
49
+ specify "should pass when actual returns true for :predicate?(*args)" do
50
+ actual = mock("actual")
51
+ actual.should_receive(:older_than?).with(3).and_return(true)
52
+ actual.should be_older_than(3)
53
+ end
54
+
55
+ specify "should fail when actual returns false for :predicate?(*args)" do
56
+ actual = mock("actual")
57
+ actual.should_receive(:older_than?).with(3).and_return(false)
58
+ lambda {
59
+ actual.should be_older_than(3)
60
+ }.should fail_with("expected older_than?(3) to return true, got false")
61
+ end
62
+
63
+ specify "should fail when actual does not respond to :predicate?" do
64
+ lambda {
65
+ Object.new.should be_older_than(3)
66
+ }.should raise_error(NameError)
67
+ end
68
+ end
69
+
70
+ context "should_not be_predicate(*args)" do
71
+ specify "should pass when actual returns false for :predicate?(*args)" do
72
+ actual = mock("actual")
73
+ actual.should_receive(:older_than?).with(3).and_return(false)
74
+ actual.should_not be_older_than(3)
75
+ end
76
+
77
+ specify "should fail when actual returns true for :predicate?(*args)" do
78
+ actual = mock("actual")
79
+ actual.should_receive(:older_than?).with(3).and_return(true)
80
+ lambda {
81
+ actual.should_not be_older_than(3)
82
+ }.should fail_with("expected older_than?(3) to return false, got true")
83
+ end
84
+
85
+ specify "should fail when actual does not respond to :predicate?" do
86
+ lambda {
87
+ Object.new.should_not be_older_than(3)
88
+ }.should raise_error(NameError)
89
+ end
90
+ end
91
+
92
+ context "should be_true" do
93
+ specify "should pass when actual equal(true)" do
94
+ true.should be_true
95
+ end
96
+
97
+ specify "should fail when actual equal(false)" do
98
+ lambda {
99
+ false.should be_true
100
+ }.should fail_with("expected true, got false")
101
+ end
102
+ end
103
+
104
+ context "should be_false" do
105
+ specify "should pass when actual equal(false)" do
106
+ false.should be_false
107
+ end
108
+
109
+ specify "should fail when actual equal(true)" do
110
+ lambda {
111
+ true.should be_false
112
+ }.should fail_with("expected false, got true")
113
+ end
114
+ end
115
+
116
+ context "should be_nil" do
117
+ specify "should pass when actual is nil" do
118
+ nil.should be_nil
119
+ end
120
+
121
+ specify "should fail when actual is not nil" do
122
+ lambda {
123
+ :not_nil.should be_nil
124
+ }.should fail_with("expected nil, got :not_nil")
125
+ end
126
+ end
127
+
128
+ context "should_not be_nil" do
129
+ specify "should pass when actual is not nil" do
130
+ :not_nil.should_not be_nil
131
+ end
132
+
133
+ specify "should fail when actual is nil" do
134
+ lambda {
135
+ nil.should_not be_nil
136
+ }.should fail_with("expected not nil, got nil")
137
+ end
138
+ end
139
+
140
+ context "should be <" do
141
+ specify "should pass when < operator returns true" do
142
+ 3.should be < 4
143
+ end
144
+
145
+ specify "should fail when < operator returns false" do
146
+ lambda { 3.should be < 3 }.should fail_with("expected < 3, got 3")
147
+ end
148
+ end
149
+
150
+ context "should be <=" do
151
+ specify "should pass when <= operator returns true" do
152
+ 3.should be <= 4
153
+ 4.should be <= 4
154
+ end
155
+
156
+ specify "should fail when <= operator returns false" do
157
+ lambda { 3.should be <= 2 }.should fail_with("expected <= 2, got 3")
158
+ end
159
+ end
160
+
161
+ context "should be >=" do
162
+ specify "should pass when >= operator returns true" do
163
+ 4.should be >= 4
164
+ 5.should be >= 4
165
+ end
166
+
167
+ specify "should fail when >= operator returns false" do
168
+ lambda { 3.should be >= 4 }.should fail_with("expected >= 4, got 3")
169
+ end
170
+ end
171
+
172
+ context "should be >" do
173
+ specify "should pass when > operator returns true" do
174
+ 5.should be > 4
175
+ end
176
+
177
+ specify "should fail when > operator returns false" do
178
+ lambda { 3.should be > 4 }.should fail_with("expected > 4, got 3")
179
+ end
180
+ end
181
+
182
+
@@ -0,0 +1,232 @@
1
+ #Based on patch from Wilson Bilkovich
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
4
+ class SomethingExpected
5
+ attr_accessor :some_value
6
+ end
7
+
8
+ context "should change(actual, message)" do
9
+ setup do
10
+ @instance = SomethingExpected.new
11
+ @instance.some_value = 5
12
+ end
13
+
14
+ specify "should pass when actual is modified by the block" do
15
+ lambda {@instance.some_value = 6}.should change(@instance, :some_value)
16
+ end
17
+
18
+ specify "should fail when actual is not modified by the block" do
19
+ lambda do
20
+ lambda {}.should change(@instance, :some_value)
21
+ end.should fail_with("some_value should have changed, but is still 5")
22
+ end
23
+ end
24
+
25
+ context "should_not change(actual, message)" do
26
+ setup do
27
+ @instance = SomethingExpected.new
28
+ @instance.some_value = 5
29
+ end
30
+
31
+ specify "should pass when actual is not modified by the block" do
32
+ lambda { }.should_not change(@instance, :some_value)
33
+ end
34
+
35
+ specify "should fail when actual is not modified by the block" do
36
+ lambda do
37
+ lambda {@instance.some_value = 6}.should_not change(@instance, :some_value)
38
+ end.should fail_with("some_value should not have changed, but did change from 5 to 6")
39
+ end
40
+ end
41
+
42
+ context "should change { block }" do
43
+ setup do
44
+ @instance = SomethingExpected.new
45
+ @instance.some_value = 5
46
+ end
47
+
48
+ specify "should pass when actual is modified by the block" do
49
+ lambda {@instance.some_value = 6}.should change { @instance.some_value }
50
+ end
51
+
52
+ specify "should fail when actual is not modified by the block" do
53
+ lambda do
54
+ lambda {}.should change{ @instance.some_value }
55
+ end.should fail_with("result should have changed, but is still 5")
56
+ end
57
+
58
+ specify "should warn if passed a block using do/end" do
59
+ lambda do
60
+ lambda {}.should change do
61
+ end
62
+ end.should_raise(Spec::Matchers::MatcherError, /block passed to should or should_not/)
63
+ end
64
+ end
65
+
66
+ context "should_not change { block }" do
67
+ setup do
68
+ @instance = SomethingExpected.new
69
+ @instance.some_value = 5
70
+ end
71
+
72
+ specify "should pass when actual is modified by the block" do
73
+ lambda {}.should_not change{ @instance.some_value }
74
+ end
75
+
76
+ specify "should fail when actual is not modified by the block" do
77
+ lambda do
78
+ lambda {@instance.some_value = 6}.should_not change { @instance.some_value }
79
+ end.should fail_with("result should not have changed, but did change from 5 to 6")
80
+ end
81
+
82
+ specify "should warn if passed a block using do/end" do
83
+ lambda do
84
+ lambda {}.should_not change do
85
+ end
86
+ end.should_raise(Spec::Matchers::MatcherError, /block passed to should or should_not/)
87
+ end
88
+ end
89
+
90
+ context "should change(actual, message).by(expected)" do
91
+ setup do
92
+ @instance = SomethingExpected.new
93
+ @instance.some_value = 5
94
+ end
95
+
96
+ specify "should pass when attribute is changed by expected amount" do
97
+ lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by(1)
98
+ end
99
+
100
+ specify "should fail when the attribute is changed by unexpected amount" do
101
+ lambda do
102
+ lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by(1)
103
+ end.should fail_with("some_value should have been changed by 1, but was changed by 2")
104
+ end
105
+
106
+ specify "should fail when the attribute is changed by unexpected amount in the opposite direction" do
107
+ lambda do
108
+ lambda { @instance.some_value -= 1 }.should change(@instance, :some_value).by(1)
109
+ end.should fail_with("some_value should have been changed by 1, but was changed by -1")
110
+ end
111
+ end
112
+
113
+ context "should change{ block }.by(expected)" do
114
+ setup do
115
+ @instance = SomethingExpected.new
116
+ @instance.some_value = 5
117
+ end
118
+
119
+ specify "should pass when attribute is changed by expected amount" do
120
+ lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by(1)
121
+ end
122
+
123
+ specify "should fail when the attribute is changed by unexpected amount" do
124
+ lambda do
125
+ lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by(1)
126
+ end.should fail_with("result should have been changed by 1, but was changed by 2")
127
+ end
128
+
129
+ specify "should fail when the attribute is changed by unexpected amount in the opposite direction" do
130
+ lambda do
131
+ lambda { @instance.some_value -= 1 }.should change{@instance.some_value}.by(1)
132
+ end.should fail_with("result should have been changed by 1, but was changed by -1")
133
+ end
134
+ end
135
+
136
+ context "should change(actual, message).from(old)" do
137
+ setup do
138
+ @instance = SomethingExpected.new
139
+ @instance.some_value = 'string'
140
+ end
141
+
142
+ specify "should pass when attribute is == to expected value before executing block" do
143
+ lambda { @instance.some_value = "astring" }.should change(@instance, :some_value).from("string")
144
+ end
145
+
146
+ specify "should fail when attribute is not == to expected value before executing block" do
147
+ lambda do
148
+ lambda { @instance.some_value = "knot" }.should change(@instance, :some_value).from("cat")
149
+ end.should fail_with("some_value should have initially been \"cat\", but was \"string\"")
150
+ end
151
+ end
152
+
153
+ context "should change{ block }.from(old)" do
154
+ setup do
155
+ @instance = SomethingExpected.new
156
+ @instance.some_value = 'string'
157
+ end
158
+
159
+ specify "should pass when attribute is == to expected value before executing block" do
160
+ lambda { @instance.some_value = "astring" }.should change{@instance.some_value}.from("string")
161
+ end
162
+
163
+ specify "should fail when attribute is not == to expected value before executing block" do
164
+ lambda do
165
+ lambda { @instance.some_value = "knot" }.should change{@instance.some_value}.from("cat")
166
+ end.should fail_with("result should have initially been \"cat\", but was \"string\"")
167
+ end
168
+ end
169
+
170
+ context "should change(actual, message).to(new)" do
171
+ setup do
172
+ @instance = SomethingExpected.new
173
+ @instance.some_value = 'string'
174
+ end
175
+
176
+ specify "should pass when attribute is == to expected value after executing block" do
177
+ lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat")
178
+ end
179
+
180
+ specify "should fail when attribute is not == to expected value after executing block" do
181
+ lambda do
182
+ lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("dog")
183
+ end.should fail_with("some_value should have been changed to \"dog\", but is now \"cat\"")
184
+ end
185
+ end
186
+
187
+ context "should change{ block }.to(new)" do
188
+ setup do
189
+ @instance = SomethingExpected.new
190
+ @instance.some_value = 'string'
191
+ end
192
+
193
+ specify "should pass when attribute is == to expected value after executing block" do
194
+ lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat")
195
+ end
196
+
197
+ specify "should fail when attribute is not == to expected value after executing block" do
198
+ lambda do
199
+ lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("dog")
200
+ end.should fail_with("result should have been changed to \"dog\", but is now \"cat\"")
201
+ end
202
+ end
203
+
204
+ context "should change(actual, message).from(old).to(new)" do
205
+ setup do
206
+ @instance = SomethingExpected.new
207
+ @instance.some_value = 'string'
208
+ end
209
+
210
+ specify "should pass when #to comes before #from" do
211
+ lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat").from("string")
212
+ end
213
+
214
+ specify "should pass when #from comes before #to" do
215
+ lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("cat")
216
+ end
217
+ end
218
+
219
+ context "should change{ block }.from(old).to(new)" do
220
+ setup do
221
+ @instance = SomethingExpected.new
222
+ @instance.some_value = 'string'
223
+ end
224
+
225
+ specify "should pass when #to comes before #from" do
226
+ lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat").from("string")
227
+ end
228
+
229
+ specify "should pass when #from comes before #to" do
230
+ lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("cat")
231
+ end
232
+ end