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,97 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Mocks
5
+ context "at_least" do
6
+ setup do
7
+ @mock = Mock.new("test mock", :auto_verify => false)
8
+ end
9
+
10
+ specify "should fail if method is never called" do
11
+ @mock.should_receive(:random_call).at_least(4).times
12
+ lambda do
13
+ @mock.__verify
14
+ end.should_raise(MockExpectationError)
15
+ end
16
+
17
+ specify "should fail when called less than n times" do
18
+ @mock.should_receive(:random_call).at_least(4).times
19
+ @mock.random_call
20
+ @mock.random_call
21
+ @mock.random_call
22
+ lambda do
23
+ @mock.__verify
24
+ end.should_raise(MockExpectationError)
25
+ end
26
+
27
+ specify "should fail when at least once method is never called" do
28
+ @mock.should_receive(:random_call).at_least(:once)
29
+ lambda do
30
+ @mock.__verify
31
+ end.should_raise(MockExpectationError)
32
+ end
33
+
34
+ specify "should fail when at least twice method is called once" do
35
+ @mock.should_receive(:random_call).at_least(:twice)
36
+ @mock.random_call
37
+ lambda do
38
+ @mock.__verify
39
+ end.should_raise(MockExpectationError)
40
+ end
41
+
42
+ specify "should fail when at least twice method is never called" do
43
+ @mock.should_receive(:random_call).at_least(:twice)
44
+ lambda do
45
+ @mock.__verify
46
+ end.should_raise(MockExpectationError)
47
+ end
48
+
49
+ specify "should pass when at least n times method is called exactly n times" do
50
+ @mock.should_receive(:random_call).at_least(4).times
51
+ @mock.random_call
52
+ @mock.random_call
53
+ @mock.random_call
54
+ @mock.random_call
55
+ @mock.__verify
56
+ end
57
+
58
+ specify "should pass when at least n times method is called n plus 1 times" do
59
+ @mock.should_receive(:random_call).at_least(4).times
60
+ @mock.random_call
61
+ @mock.random_call
62
+ @mock.random_call
63
+ @mock.random_call
64
+ @mock.random_call
65
+ @mock.__verify
66
+ end
67
+
68
+ specify "should pass when at least once method is called once" do
69
+ @mock.should_receive(:random_call).at_least(:once)
70
+ @mock.random_call
71
+ @mock.__verify
72
+ end
73
+
74
+ specify "should pass when at least once method is called twice" do
75
+ @mock.should_receive(:random_call).at_least(:once)
76
+ @mock.random_call
77
+ @mock.random_call
78
+ @mock.__verify
79
+ end
80
+
81
+ specify "should pass when at least twice method is called three times" do
82
+ @mock.should_receive(:random_call).at_least(:twice)
83
+ @mock.random_call
84
+ @mock.random_call
85
+ @mock.random_call
86
+ @mock.__verify
87
+ end
88
+
89
+ specify "should pass when at least twice method is called twice" do
90
+ @mock.should_receive(:random_call).at_least(:twice)
91
+ @mock.random_call
92
+ @mock.random_call
93
+ @mock.__verify
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,97 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Mocks
5
+ context "AtMost" do
6
+ setup do
7
+ @mock = Mock.new("test mock", {
8
+ :auto_verify => false
9
+ })
10
+
11
+ end
12
+ specify "should fail when at most n times method is called n plus 1 times" do
13
+ @mock.should_receive(:random_call).at_most(4).times
14
+ @mock.random_call
15
+ @mock.random_call
16
+ @mock.random_call
17
+ @mock.random_call
18
+ @mock.random_call
19
+ lambda do
20
+ @mock.__verify
21
+ end.should_raise(MockExpectationError)
22
+
23
+ end
24
+ specify "should fail when at most once method is called twice" do
25
+ @mock.should_receive(:random_call).at_most(:once)
26
+ @mock.random_call
27
+ @mock.random_call
28
+ lambda do
29
+ @mock.__verify
30
+ end.should_raise(MockExpectationError)
31
+
32
+ end
33
+ specify "should fail when at most twice method is called three times" do
34
+ @mock.should_receive(:random_call).at_most(:twice)
35
+ @mock.random_call
36
+ @mock.random_call
37
+ @mock.random_call
38
+ lambda do
39
+ @mock.__verify
40
+ end.should_raise(MockExpectationError)
41
+
42
+ end
43
+ specify "should pass when at most n times method is called exactly n times" do
44
+ @mock.should_receive(:random_call).at_most(4).times
45
+ @mock.random_call
46
+ @mock.random_call
47
+ @mock.random_call
48
+ @mock.random_call
49
+ @mock.__verify
50
+
51
+ end
52
+ specify "should pass when at most n times method is called less than n times" do
53
+ @mock.should_receive(:random_call).at_most(4).times
54
+ @mock.random_call
55
+ @mock.random_call
56
+ @mock.random_call
57
+ @mock.__verify
58
+
59
+ end
60
+ specify "should pass when at most n times method is never called" do
61
+ @mock.should_receive(:random_call).at_most(4).times
62
+ @mock.__verify
63
+
64
+ end
65
+ specify "should pass when at most once method is called once" do
66
+ @mock.should_receive(:random_call).at_most(:once)
67
+ @mock.random_call
68
+ @mock.__verify
69
+
70
+ end
71
+ specify "should pass when at most once method is never called" do
72
+ @mock.should_receive(:random_call).at_most(:once)
73
+ @mock.__verify
74
+
75
+ end
76
+ specify "should pass when at most twice method is called once" do
77
+ @mock.should_receive(:random_call).at_most(:twice)
78
+ @mock.random_call
79
+ @mock.__verify
80
+
81
+ end
82
+ specify "should pass when at most twice method is called twice" do
83
+ @mock.should_receive(:random_call).at_most(:twice)
84
+ @mock.random_call
85
+ @mock.random_call
86
+ @mock.__verify
87
+
88
+ end
89
+ specify "should pass when at most twice method is never called" do
90
+ @mock.should_receive(:random_call).at_most(:twice)
91
+ @mock.__verify
92
+
93
+ end
94
+
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Bug7611
4
+ class Foo
5
+ end
6
+
7
+ class Bar < Foo
8
+ end
9
+
10
+ context "A Partial Mock" do
11
+ specify "should respect subclasses" do
12
+ Foo.stub!(:new).and_return(Object.new)
13
+ end
14
+
15
+ specify "should" do
16
+ Bar.new.class.should == Bar
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Bug7805
4
+ #This is really a duplicate of 8302
5
+
6
+ context "Stubs should correctly restore module methods" do
7
+ specify "1 - stub the open method" do
8
+ File.stub!(:open).and_return("something")
9
+ File.open.should == "something"
10
+ end
11
+ specify "2 - use File.open to create example.txt" do
12
+ filename = "#{File.dirname(__FILE__)}/example-#{Time.new.to_i}.txt"
13
+ File.exist?(filename).should be_false
14
+ file = File.open(filename,'w')
15
+ file.close
16
+ File.exist?(filename).should be_true
17
+ File.delete(filename)
18
+ File.exist?(filename).should be_false
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ context "An object where respond_to? is true and does not have method" do
4
+ # When should_receive(:sym) is sent to any object, the MockHandler sends
5
+ # respond_to?(:sym) to that object to see if the method should be proxied.
6
+ #
7
+ # If respond_to? itself is proxied, then when the MockHandler sends respond_to?
8
+ # to the object, the proxy is invoked and responds yes (if so set in the spec).
9
+ # When the object does NOT actually respond to :sym, an exception is thrown
10
+ # when trying to proxy it.
11
+ #
12
+ # The fix was to keep track of whether :respond_to? had been proxied and, if
13
+ # so, call the munged copy of :respond_to? on the object.
14
+
15
+ specify "should not raise an exception" do
16
+ obj = Object.new
17
+ obj.should_receive(:respond_to?).with(:foobar).and_return(true)
18
+ obj.should_receive(:foobar).and_return(:baz)
19
+ obj.respond_to?(:foobar).should be_true
20
+ obj.foobar.should == :baz
21
+ end
22
+
23
+ specify "should not raise an exception" do
24
+ obj = mock("obj")
25
+ obj.should_receive(:respond_to?).with(:foobar).and_return(true)
26
+ obj.should_receive(:foobar).and_return(:baz)
27
+ obj.respond_to?(:foobar).should be_true
28
+ obj.foobar.should == :baz
29
+ end
30
+
31
+ end
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Bug8302
4
+ class Foo
5
+ def Foo.class_method(arg)
6
+ end
7
+
8
+ def instance_bar(arg)
9
+ end
10
+ end
11
+
12
+ context "Bug report 8302:" do
13
+ specify "class method is not restored correctly when proxied" do
14
+ Foo.should_not_receive(:class_method).with(Array.new)
15
+ Foo.__verify
16
+ Foo.class_method(Array.new)
17
+ end
18
+
19
+ specify "instance method is not restored correctly when proxied" do
20
+ foo = Foo.new
21
+ foo.should_not_receive(:instance_bar).with(Array.new)
22
+ foo.__verify
23
+ foo.instance_bar(Array.new)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,74 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper.rb'
2
+
3
+ module Spec
4
+ module Mocks
5
+ context "FailingMockArgumentConstraints" do
6
+ setup do
7
+ @mock = Mock.new("test mock", {
8
+ :auto_verify => false
9
+ })
10
+ @reporter = Mock.new("reporter", {
11
+ :null_object => true,
12
+ :auto_verify => false
13
+ })
14
+ end
15
+
16
+ specify "should reject goose when expecting a duck" do
17
+ @mock.should_receive(:random_call).with(DuckTypeArgConstraint.new(:abs, :div))
18
+ lambda { @mock.random_call("I don't respond to :abs or :div") }.should_raise(MockExpectationError)
19
+ end
20
+
21
+ specify "should reject non boolean" do
22
+ @mock.should_receive(:random_call).with(:boolean)
23
+ lambda do
24
+ @mock.random_call("false")
25
+ end.should_raise(MockExpectationError)
26
+ end
27
+
28
+ specify "should reject non numeric" do
29
+ @mock.should_receive(:random_call).with(:numeric)
30
+ lambda do
31
+ @mock.random_call("1")
32
+ end.should_raise(MockExpectationError)
33
+ end
34
+
35
+ specify "should reject non string" do
36
+ @mock.should_receive(:random_call).with(:string)
37
+ lambda do
38
+ @mock.random_call(123)
39
+ end.should_raise(MockExpectationError)
40
+ end
41
+
42
+ specify "should fail if regexp does not match submitted string" do
43
+ @mock.should_receive(:random_call).with(/bcd/)
44
+ lambda { @mock.random_call("abc") }.should_raise(MockExpectationError)
45
+ end
46
+
47
+ specify "should fail if regexp does not match submitted regexp" do
48
+ @mock.should_receive(:random_call).with(/bcd/)
49
+ lambda { @mock.random_call(/bcde/) }.should_raise(MockExpectationError)
50
+ end
51
+
52
+ specify "should fail for a hash w/ wrong values" do
53
+ @mock.should_receive(:random_call).with(:a => "b", :c => "d")
54
+ lambda do
55
+ @mock.random_call(:a => "b", :c => "e")
56
+ end.should_raise(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(:a=>\"b\", :c=>\"e\"|:c=>\"e\", :a=>\"b\")\}\)/)
57
+ end
58
+
59
+ specify "should fail for a hash w/ wrong keys" do
60
+ @mock.should_receive(:random_call).with(:a => "b", :c => "d")
61
+ lambda do
62
+ @mock.random_call("a" => "b", "c" => "d")
63
+ end.should_raise(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(\"a\"=>\"b\", \"c\"=>\"d\"|\"c\"=>\"d\", \"a\"=>\"b\")\}\)/)
64
+ end
65
+
66
+ specify "should match against a Matcher" do
67
+ lambda do
68
+ @mock.should_receive(:msg).with(equal(3))
69
+ @mock.msg(37)
70
+ end.should_raise(MockExpectationError, "Mock 'test mock' expected :msg with (equal 3) but received it with (37)")
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,80 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Mocks
5
+
6
+ context "Mock ordering" do
7
+
8
+ setup do
9
+ @mock = Mock.new("test mock", :auto_verify => false)
10
+ end
11
+
12
+ specify "should pass two calls in order" do
13
+ @mock.should_receive(:one).ordered
14
+ @mock.should_receive(:two).ordered
15
+ @mock.one
16
+ @mock.two
17
+ @mock.__verify
18
+ end
19
+
20
+ specify "should pass three calls in order" do
21
+ @mock.should_receive(:one).ordered
22
+ @mock.should_receive(:two).ordered
23
+ @mock.should_receive(:three).ordered
24
+ @mock.one
25
+ @mock.two
26
+ @mock.three
27
+ @mock.__verify
28
+ end
29
+
30
+ specify "should fail if second call comes first" do
31
+ @mock.should_receive(:one).ordered
32
+ @mock.should_receive(:two).ordered
33
+ lambda do
34
+ @mock.two
35
+ end.should_raise(MockExpectationError, "Mock 'test mock' received :two out of order")
36
+ end
37
+
38
+ specify "should fail if third call comes first" do
39
+ @mock.should_receive(:one).ordered
40
+ @mock.should_receive(:two).ordered
41
+ @mock.should_receive(:three).ordered
42
+ @mock.one
43
+ lambda do
44
+ @mock.three
45
+ end.should_raise(MockExpectationError, "Mock 'test mock' received :three out of order")
46
+ end
47
+
48
+ specify "should fail if third call comes second" do
49
+ @mock.should_receive(:one).ordered
50
+ @mock.should_receive(:two).ordered
51
+ @mock.should_receive(:three).ordered
52
+ @mock.one
53
+ lambda do
54
+ @mock.three
55
+ end.should_raise(MockExpectationError, "Mock 'test mock' received :three out of order")
56
+ end
57
+
58
+ specify "should ignore order of non ordered calls" do
59
+ @mock.should_receive(:ignored_0)
60
+ @mock.should_receive(:ordered_1).ordered
61
+ @mock.should_receive(:ignored_1)
62
+ @mock.should_receive(:ordered_2).ordered
63
+ @mock.should_receive(:ignored_2)
64
+ @mock.should_receive(:ignored_3)
65
+ @mock.should_receive(:ordered_3).ordered
66
+ @mock.should_receive(:ignored_4)
67
+ @mock.ignored_3
68
+ @mock.ordered_1
69
+ @mock.ignored_0
70
+ @mock.ordered_2
71
+ @mock.ignored_4
72
+ @mock.ignored_2
73
+ @mock.ordered_3
74
+ @mock.ignored_1
75
+ @mock.__verify
76
+ end
77
+
78
+ end
79
+ end
80
+ end