rspec 0.6.4 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. data/CHANGES +90 -1
  2. data/EXAMPLES.rd +28 -6
  3. data/MIT-LICENSE +20 -0
  4. data/README +18 -12
  5. data/Rakefile +60 -54
  6. data/examples/custom_formatter.rb +4 -4
  7. data/examples/helper_method_example.rb +11 -0
  8. data/examples/mocking_example.rb +19 -2
  9. data/examples/partial_mock_example.rb +28 -0
  10. data/examples/stack_spec.rb +8 -8
  11. data/examples/stubbing_example.rb +50 -9
  12. data/examples/test_case_spec.rb +6 -6
  13. data/lib/spec.rb +1 -2
  14. data/lib/spec/callback.rb +0 -0
  15. data/lib/spec/expectations.rb +3 -6
  16. data/lib/spec/expectations/diff.rb +23 -47
  17. data/lib/spec/expectations/differs/default.rb +62 -0
  18. data/lib/spec/expectations/{exceptions.rb → errors.rb} +0 -0
  19. data/lib/spec/expectations/extensions.rb +4 -0
  20. data/lib/spec/expectations/extensions/inspect_for_expectation_not_met_error.rb +14 -0
  21. data/lib/spec/expectations/extensions/numeric.rb +5 -0
  22. data/lib/spec/expectations/{expectations.rb → extensions/object.rb} +3 -6
  23. data/lib/spec/expectations/extensions/symbol.rb +5 -0
  24. data/lib/spec/expectations/should.rb +4 -0
  25. data/lib/spec/expectations/should/base.rb +42 -0
  26. data/lib/spec/expectations/should/have.rb +79 -0
  27. data/lib/spec/expectations/should/not.rb +72 -0
  28. data/lib/spec/expectations/should/should.rb +83 -0
  29. data/lib/spec/expectations/sugar.rb +6 -25
  30. data/lib/spec/mocks.rb +5 -1
  31. data/lib/spec/mocks/argument_expectation.rb +15 -1
  32. data/lib/spec/mocks/error_generator.rb +72 -0
  33. data/lib/spec/mocks/{exceptions.rb → errors.rb} +0 -0
  34. data/lib/spec/mocks/extensions/object.rb +3 -0
  35. data/lib/spec/mocks/message_expectation.rb +80 -73
  36. data/lib/spec/mocks/mock.rb +4 -69
  37. data/lib/spec/mocks/mock_handler.rb +158 -0
  38. data/lib/spec/mocks/mock_methods.rb +44 -0
  39. data/lib/spec/mocks/order_group.rb +10 -2
  40. data/lib/spec/rake/spectask.rb +20 -18
  41. data/lib/spec/rake/{rcov_verify.rb → verify_rcov.rb} +2 -2
  42. data/lib/spec/runner.rb +3 -1
  43. data/lib/spec/runner/backtrace_tweaker.rb +2 -1
  44. data/lib/spec/runner/context.rb +10 -16
  45. data/lib/spec/runner/context_eval.rb +40 -40
  46. data/lib/spec/runner/execution_context.rb +1 -12
  47. data/lib/spec/runner/{kernel_ext.rb → extensions/kernel.rb} +2 -2
  48. data/lib/spec/runner/{instance_exec.rb → extensions/object.rb} +0 -0
  49. data/lib/spec/runner/formatter/base_text_formatter.rb +25 -18
  50. data/lib/spec/runner/formatter/html_formatter.rb +81 -101
  51. data/lib/spec/runner/formatter/progress_bar_formatter.rb +9 -9
  52. data/lib/spec/runner/formatter/rdoc_formatter.rb +6 -6
  53. data/lib/spec/runner/formatter/specdoc_formatter.rb +7 -6
  54. data/lib/spec/runner/option_parser.rb +41 -5
  55. data/lib/spec/runner/reporter.rb +3 -15
  56. data/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  57. data/lib/spec/runner/specification.rb +33 -14
  58. data/lib/spec/version.rb +6 -3
  59. data/vendor/watir/README.txt +1 -1
  60. metadata +34 -68
  61. data/bin/test2spec +0 -112
  62. data/examples/helper_method_spec.rb +0 -12
  63. data/lib/spec/expectations/have_helper.rb +0 -41
  64. data/lib/spec/expectations/helper.rb +0 -4
  65. data/lib/spec/expectations/should_base.rb +0 -52
  66. data/lib/spec/expectations/should_helper.rb +0 -93
  67. data/lib/spec/expectations/should_negator.rb +0 -71
  68. data/lib/spec/test_to_spec/ruby2ruby.rb +0 -492
  69. data/lib/spec/test_to_spec/sexp_transformer.rb +0 -196
  70. data/lib/spec/test_to_spec/test_case_ext.rb +0 -22
  71. data/lib/spec/test_to_spec/translation_test_runner.rb +0 -147
  72. data/test/spec/expectations/arbitrary_operator_test.rb +0 -55
  73. data/test/spec/expectations/arbitrary_predicate_test.rb +0 -163
  74. data/test/spec/expectations/containment_test.rb +0 -129
  75. data/test/spec/expectations/diff_test.rb +0 -62
  76. data/test/spec/expectations/identity_test.rb +0 -75
  77. data/test/spec/expectations/object_equality_test.rb +0 -65
  78. data/test/spec/expectations/raising_test.rb +0 -106
  79. data/test/spec/expectations/regex_matching_test.rb +0 -36
  80. data/test/spec/expectations/should_have_test.rb +0 -169
  81. data/test/spec/expectations/should_satisfy_test.rb +0 -37
  82. data/test/spec/expectations/sugar_test.rb +0 -93
  83. data/test/spec/expectations/supported_symbols_test.rb +0 -33
  84. data/test/spec/expectations/throwing_test.rb +0 -55
  85. data/test/spec/expectations/true_false_special_case_test.rb +0 -85
  86. data/test/spec/expectations/typing_test.rb +0 -108
  87. data/test/spec/mocks/mock_arg_constraints_test.rb +0 -113
  88. data/test/spec/mocks/mock_counts_test.rb +0 -431
  89. data/test/spec/mocks/mock_ordering_test.rb +0 -109
  90. data/test/spec/mocks/mock_test.rb +0 -220
  91. data/test/spec/mocks/null_object_test.rb +0 -37
  92. data/test/spec/runner/backtrace_tweaker_test.rb +0 -90
  93. data/test/spec/runner/context_matching_test.rb +0 -35
  94. data/test/spec/runner/context_runner_test.rb +0 -62
  95. data/test/spec/runner/context_test.rb +0 -191
  96. data/test/spec/runner/execution_context_test.rb +0 -45
  97. data/test/spec/runner/formatter/failure_dump_test.rb +0 -94
  98. data/test/spec/runner/formatter/html_formatter_test.rb +0 -48
  99. data/test/spec/runner/formatter/progress_bar_formatter_test.rb +0 -56
  100. data/test/spec/runner/formatter/rdoc_formatter_test.rb +0 -51
  101. data/test/spec/runner/formatter/specdoc_formatter_test.rb +0 -57
  102. data/test/spec/runner/kernel_ext_test.rb +0 -13
  103. data/test/spec/runner/option_parser_test.rb +0 -141
  104. data/test/spec/runner/reporter_test.rb +0 -128
  105. data/test/spec/runner/spec_matcher_test.rb +0 -47
  106. data/test/spec/runner/specification_test.rb +0 -121
  107. data/test/spec/test_to_spec/ruby_to_ruby_test.rb +0 -79
  108. data/test/spec/test_to_spec/sexp_transformer_assertion_test.rb +0 -207
  109. data/test/spec/test_to_spec/sexp_transformer_test.rb +0 -303
  110. data/test/spec/test_to_spec/test_case_ext_test.rb +0 -25
  111. data/test/spec/test_to_spec/testfiles/test_unit_api_spec.rb +0 -75
  112. data/test/spec/test_to_spec/testfiles/test_unit_api_test.rb +0 -70
  113. data/test/test_classes.rb +0 -102
  114. data/test/test_helper.rb +0 -32
@@ -1,109 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../test_helper'
2
-
3
- module Spec
4
- module Mocks
5
-
6
- class MockTest < Test::Unit::TestCase
7
-
8
- def setup
9
- @mock = Mock.new("test mock")
10
- end
11
-
12
- def test_should_pass_two_calls_in_order
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
- def test_should_pass_three_calls_in_order
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
- def test_should_fail_if_second_call_comes_first
31
- @mock.should_receive(:one).ordered
32
- @mock.should_receive(:two).ordered
33
- assert_raise(MockExpectationError) do
34
- @mock.two
35
- end
36
- end
37
-
38
- def test_should_fail_if_third_call_comes_first
39
- @mock.should_receive(:one).ordered
40
- @mock.should_receive(:two).ordered
41
- @mock.should_receive(:three).ordered
42
- @mock.one
43
- assert_raise(MockExpectationError) do
44
- @mock.three
45
- end
46
- end
47
-
48
- def test_should_fail_if_third_call_comes_second
49
- @mock.should_receive(:one).ordered
50
- @mock.should_receive(:two).ordered
51
- @mock.should_receive(:three).ordered
52
- @mock.one
53
- assert_raise(MockExpectationError) do
54
- @mock.one
55
- @mock.three
56
- end
57
- end
58
-
59
- def test_should_ignore_order_of_non_ordered_calls
60
- @mock.should_receive(:ignored_0)
61
- @mock.should_receive(:ordered_1).ordered
62
- @mock.should_receive(:ignored_1)
63
- @mock.should_receive(:ordered_2).ordered
64
- @mock.should_receive(:ignored_2)
65
- @mock.should_receive(:ignored_3)
66
- @mock.should_receive(:ordered_3).ordered
67
- @mock.should_receive(:ignored_4)
68
- @mock.ignored_3
69
- @mock.ordered_1
70
- @mock.ignored_0
71
- @mock.ordered_2
72
- @mock.ignored_4
73
- @mock.ignored_2
74
- @mock.ordered_3
75
- @mock.ignored_1
76
- @mock.__verify
77
- end
78
-
79
- def FIXME_test_two_in_order_calls_with_block
80
- @mock.should_receive(:doit).ordered do |a, b|
81
- a.should_equal "a1"
82
- a.should_equal "b1"
83
- end
84
- @mock.should_receive(:doit).ordered do |a, b|
85
- a.should_equal "a2"
86
- a.should_equal "b2"
87
- end
88
- @mock.doit "a1", "b1"
89
- @mock.doit "b1", "b2"
90
- @mock.__verify
91
- end
92
-
93
- def FIXME_test_two_out_of_order_calls_with_block
94
- @mock.should_receive(:doit).ordered do |a, b|
95
- a.should_equal "a1"
96
- a.should_equal "b1"
97
- end
98
- @mock.should_receive(:doit).ordered do |a, b|
99
- a.should_equal "a2"
100
- a.should_equal "b2"
101
- end
102
- @mock.doit "b1", "b2"
103
- @mock.doit "a1", "b1"
104
- @mock.__verify
105
- end
106
-
107
- end
108
- end
109
- end
@@ -1,220 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../test_helper'
2
-
3
- module Spec
4
- module Mocks
5
- class MockTest < Test::Unit::TestCase
6
-
7
- def setup
8
- @mock = Mock.new("test mock")
9
- end
10
-
11
- def test_should_report_line_number_of_expectation_of_unreceived_message
12
- @mock.should_receive(:wont_happen).with("x", 3)
13
- #NOTE - this test is quite ticklish because it specifies that
14
- #the above statement appears on line 12 of this file.
15
-
16
- begin
17
- @mock.__verify
18
- rescue MockExpectationError => e
19
- e.backtrace[0].should_match(/mock_test\.rb:12:in .test_should_report_line/)
20
- end
21
-
22
- end
23
-
24
- def test_should_pass_when_not_receiving_message_specified_as_not_to_be_received
25
- @mock.should_not_receive(:not_expected)
26
- @mock.__verify
27
- end
28
-
29
- def test_should_pass_when_receiving_message_specified_as_not_to_be_received_with_different_args
30
- @mock.should_not_receive(:message).with("unwanted text")
31
- @mock.should_receive(:message).with("other text")
32
- @mock.message "other text"
33
- @mock.__verify
34
- end
35
-
36
- def test_should_fail_when_receiving_message_specified_as_not_to_be_received
37
- @mock.should_not_receive(:not_expected)
38
- @mock.not_expected
39
- assert_raise(MockExpectationError) do
40
- @mock.__verify
41
- end
42
- end
43
-
44
- def test_should_fail_when_receiving_message_specified_as_not_to_be_received_with_args
45
- @mock.should_not_receive(:not_expected).with("unexpected text")
46
- @mock.not_expected "unexpected text"
47
- assert_raise(MockExpectationError) do
48
- @mock.__verify
49
- end
50
- end
51
-
52
- def test_should_allow_block_to_calculate_return_values
53
- @mock.should_receive(:random_call).with("a","b","c").and_return { |a,b,c| c+b+a }
54
- assert_equal "cba", @mock.random_call("a","b","c")
55
- @mock.__verify
56
- end
57
-
58
- def test_should_allow_parameter_as_return_value
59
- @mock.should_receive(:random_call).with("a","b","c").and_return("booh")
60
- assert_equal "booh", @mock.random_call("a","b","c")
61
- @mock.__verify
62
- end
63
-
64
- def test_return_nil_if_no_return_value_set
65
- @mock.should_receive(:random_call).with("a","b","c")
66
- assert_nil @mock.random_call("a","b","c")
67
- @mock.__verify
68
- end
69
-
70
- def test_should_raise_exception_if_parameters_dont_match_when_method_called
71
- @mock.should_receive(:random_call).with("a","b","c").and_return("booh")
72
- assert_raise(MockExpectationError) {
73
- @mock.random_call("a","d","c")
74
- }
75
- end
76
-
77
- def test_should_fail_if_unexpected_method_called
78
- assert_raise(MockExpectationError) {
79
- @mock.random_call("a","d","c")
80
- }
81
- end
82
-
83
- def test_should_use_block_for_expectation_if_provided
84
- @mock.should_receive(:random_call) do | a, b |
85
- a.should_equal "a"
86
- b.should_equal "b"
87
- "booh"
88
- end
89
- assert_equal("booh", @mock.random_call("a", "b"))
90
- @mock.__verify
91
- end
92
-
93
- def test_should_fail_if_expectation_block_fails
94
- @mock.should_receive(:random_call).with(true)# {| a | a.should_be true}
95
- assert_raise(MockExpectationError) do
96
- @mock.random_call false
97
- end
98
- end
99
-
100
- def test_should_fail_when_method_defined_as_never_is_received
101
- @mock.should_receive(:random_call).never
102
- assert_raise(MockExpectationError) do
103
- @mock.random_call
104
- @mock.__verify
105
- end
106
- end
107
-
108
- def test_should_raise_when_told_to
109
- @mock.should_receive(:random_call).and_raise(RuntimeError)
110
- assert_raise(RuntimeError) do
111
- @mock.random_call
112
- end
113
- end
114
-
115
- def test_should_not_raise_when_told_to_if_args_dont_match
116
- @mock.should_receive(:random_call).with(2).and_raise(RuntimeError)
117
- assert_raise(MockExpectationError) do
118
- @mock.random_call 1
119
- end
120
- end
121
-
122
- def test_should_throw_when_told_to
123
- @mock.should_receive(:random_call).and_throw(:blech)
124
- assert_throws(:blech) do
125
- @mock.random_call
126
- end
127
- end
128
-
129
- def test_should_raise_when_explicit_return_and_block_constrained
130
- assert_raise(AmbiguousReturnError) {
131
- @mock.should_receive(:fruit) {|colour|
132
- :strawberry
133
- }.and_return :apple
134
- }
135
- end
136
-
137
- def TODO_test_should_use_past_tense
138
- @mock.should_have_received(:hello)
139
- end
140
-
141
- def TODO_test_should_sent
142
- cut.should_have_sent(:hello)
143
- cut.should_have_sent(:hello).to(@mock)
144
- end
145
-
146
- def test_should_ignore_args_on_any_args
147
- @mock.should_receive(:random_call).at_least(:once).with(:any_args)
148
- @mock.random_call
149
- @mock.random_call 1
150
- @mock.random_call "a", 2
151
- @mock.random_call [], {}, "joe", 7
152
- @mock.__verify
153
- end
154
-
155
- def test_should_fail_on_no_args_if_any_args_received
156
- @mock.should_receive(:random_call).with(:no_args)
157
- assert_raise(MockExpectationError) do
158
- @mock.random_call 1
159
- end
160
- end
161
-
162
- def test_should_yield_single_value
163
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield(99)
164
- a = nil
165
- @mock.yield_back {|a|}
166
- a.should_equal 99
167
- @mock.__verify
168
- end
169
-
170
- def test_should_yield_two_values
171
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield('wha', 'zup')
172
- a, b = nil
173
- @mock.yield_back {|a,b|}
174
- a.should_equal 'wha'
175
- b.should_equal 'zup'
176
- @mock.__verify
177
- end
178
-
179
- def test_should_fail_when_calling_yielding_method_with_wrong_arity
180
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield('wha', 'zup')
181
- assert_raise(MockExpectationError) do
182
- @mock.yield_back {|a|}
183
- end
184
- end
185
-
186
- def test_should_fail_when_calling_yielding_method_without_block
187
- @mock.should_receive(:yield_back).with(:no_args).once.and_yield('wha', 'zup')
188
- assert_raise(MockExpectationError) do
189
- @mock.yield_back
190
- end
191
- end
192
-
193
- def test_should_be_able_to_mock_send
194
- @mock.should_receive(:send).with(:any_args)
195
- @mock.send 'hi'
196
- @mock.__verify
197
- end
198
-
199
- def test_should_be_able_to_raise_from_method_calling_yielding_mock
200
- @mock.should_receive(:yield_me).and_yield 44
201
-
202
- lambda do
203
- @mock.yield_me do |x|
204
- raise "Bang"
205
- end
206
- end.should_raise(StandardError)
207
-
208
- @mock.__verify
209
- end
210
-
211
- def test_should_use_a_list_of_return_values_for_successive_calls
212
- @mock.should_receive(:multi_call).twice.with(:no_args).and_return([8, 12])
213
- assert_equal(8, @mock.multi_call)
214
- assert_equal(12, @mock.multi_call)
215
- @mock.__verify
216
- end
217
-
218
- end
219
- end
220
- end
@@ -1,37 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../test_helper'
2
-
3
- module Spec
4
- module Mocks
5
-
6
- class NullObjectMockTest < Test::Unit::TestCase
7
-
8
- def setup
9
- @mock = Mock.new("null_object", :null_object=>true)
10
- end
11
-
12
- def test_should_ignore_unexpected_methods
13
- @mock.random_call("a","d","c")
14
- @mock.__verify
15
- end
16
-
17
- def test_should_allow_explicit_expectation
18
- @mock.should_receive(:something)
19
- @mock.something
20
- @mock.__verify
21
- end
22
-
23
- def test_should_fail_verification_when_explicit_exception_not_met
24
- assert_raises(MockExpectationError) do
25
- @mock.should_receive(:something)
26
- @mock.__verify
27
- end
28
- end
29
-
30
- def test_should_pass_when_receiving_message_specified_as_not_to_be_received_with_different_args
31
- @mock.should_not_receive(:message).with("unwanted text")
32
- @mock.message "other text"
33
- @mock.__verify
34
- end
35
- end
36
- end
37
- end
@@ -1,90 +0,0 @@
1
- require File.dirname(__FILE__) + '/../../test_helper'
2
- module Spec
3
- module Runner
4
- class NoisyBacktraceTweakerTest < Test::Unit::TestCase
5
- def setup
6
- @error = RuntimeError.new
7
- @tweaker = NoisyBacktraceTweaker.new
8
- end
9
-
10
- def test_should_not_barf_on_nil_backtrace
11
- proc { @tweaker.tweak_backtrace @error, 'spec name' }.should_not_raise
12
- end
13
-
14
- def test_should_replace___instance_exec_with_spec_name
15
- @error.set_backtrace ["./examples/airport_spec.rb:28:in `__instance_exec_1014688_1661744'"]
16
- @tweaker.tweak_backtrace @error, 'spec name'
17
- @error.backtrace[0].should_equal "./examples/airport_spec.rb:28:in `spec name'"
18
- end
19
-
20
- def test_should_leave_anything_in_spec_dir
21
- @error.set_backtrace ["/lib/spec/expectations/anything.rb"]
22
- @tweaker.tweak_backtrace @error, 'spec name'
23
- @error.backtrace.should_not_be_empty
24
- end
25
-
26
- def test_should_leave_anything_in_lib_spec_dir
27
- ['expectations', 'mocks', 'runner', 'stubs'].each do |child|
28
- @error.set_backtrace ["/lib/spec/#{child}/anything.rb"]
29
- @tweaker.tweak_backtrace @error, 'spec name'
30
- @error.backtrace.should_not_be_empty
31
- end
32
- end
33
-
34
- def test_should_leave_bin_spec
35
- @error.set_backtrace ["bin/spec:"]
36
- @tweaker.tweak_backtrace @error, 'spec name'
37
- @error.backtrace.should_not_be_empty
38
- end
39
-
40
- end
41
-
42
- class QuietBacktraceTweakerTest < Test::Unit::TestCase
43
- def setup
44
- @error = RuntimeError.new
45
- @tweaker = QuietBacktraceTweaker.new
46
- end
47
-
48
- def test_should_not_barf_on_nil_backtrace
49
- proc { @tweaker.tweak_backtrace @error, 'spec name' }.should_not_raise
50
- end
51
-
52
- def test_should_replace___instance_exec_with_spec_name
53
- @error.set_backtrace ["./examples/airport_spec.rb:28:in `__instance_exec_1014688_1661744'"]
54
- @tweaker.tweak_backtrace @error, 'spec name'
55
- @error.backtrace[0].should_equal "./examples/airport_spec.rb:28:in `spec name'"
56
- end
57
-
58
- def test_should_remove_anything_in_lib_spec_dir
59
- element = nil # Workaround to make test2spec work for our own tests
60
- ['expectations', 'mocks', 'runner', 'stubs'].each do |child|
61
- element = "/lib/spec/#{child}/anything.rb"
62
- @error.set_backtrace [element]
63
- @tweaker.tweak_backtrace @error, 'spec name'
64
- if !@error.backtrace.empty?
65
- raise "Should have tweaked away '#{element}'"
66
- end
67
- end
68
- end
69
-
70
- def test_should_remove_bin_spec
71
- @error.set_backtrace ["bin/spec:"]
72
- @tweaker.tweak_backtrace @error, 'spec name'
73
- @error.backtrace.should_be_empty
74
- end
75
-
76
- def test_should_remove_anything_from_textmate_ruby_bundle
77
- @error.set_backtrace ["/Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/tmruby.rb:147"]
78
- @tweaker.tweak_backtrace @error, 'spec name'
79
- @error.backtrace.should_be_empty
80
- end
81
-
82
- def test_should_remove_anything_from_rspec_on_rails
83
- @error.set_backtrace ["/usr/local/lib/ruby/gems/1.8/gems/rspec_generator-0.5.12/lib/rspec_on_rails.rb:33:in `run'"]
84
- @tweaker.tweak_backtrace @error, 'spec name'
85
- @error.backtrace.should_be_empty
86
- end
87
-
88
- end
89
- end
90
- end