MacSpec 0.3.1
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.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +20 -0
- data/Rakefile +53 -0
- data/lib/mac_spec.rb +59 -0
- data/lib/mac_spec/matcher_system.rb +19 -0
- data/lib/mac_spec/matcher_system/built_in/change_expectations.rb +36 -0
- data/lib/mac_spec/matcher_system/built_in/enumerable_expectations.rb +43 -0
- data/lib/mac_spec/matcher_system/built_in/error_expectations.rb +68 -0
- data/lib/mac_spec/matcher_system/built_in/operator_expectations.rb +45 -0
- data/lib/mac_spec/matcher_system/built_in/truth_expectations.rb +148 -0
- data/lib/mac_spec/matcher_system/core/def_matcher.rb +14 -0
- data/lib/mac_spec/matcher_system/core/exceptions.rb +7 -0
- data/lib/mac_spec/matcher_system/core/expectation_builder.rb +11 -0
- data/lib/mac_spec/matcher_system/core/matcher_builder.rb +53 -0
- data/lib/mac_spec/matcher_system/core/modals.rb +36 -0
- data/lib/mac_spec/mocking_framework.rb +13 -0
- data/lib/mac_spec/mocking_framework/extensions/kernel_extension.rb +14 -0
- data/lib/mac_spec/mocking_framework/extensions/object_extension.rb +74 -0
- data/lib/mac_spec/mocking_framework/message_expectation.rb +127 -0
- data/lib/mac_spec/mocking_framework/mock.rb +20 -0
- data/lib/mac_spec/testing_framework.rb +13 -0
- data/lib/mac_spec/testing_framework/core/functions.rb +26 -0
- data/lib/mac_spec/testing_framework/core/kernel_extension.rb +27 -0
- data/lib/mac_spec/testing_framework/core/test_case_class_methods.rb +90 -0
- data/lib/mac_spec/version.rb +3 -0
- data/test/all.rb +6 -0
- data/test/mac_spec/matcher_system/built_in/change_expectations_test.rb +68 -0
- data/test/mac_spec/matcher_system/built_in/enumerable_expectations_test.rb +91 -0
- data/test/mac_spec/matcher_system/built_in/error_expectations_test.rb +144 -0
- data/test/mac_spec/matcher_system/built_in/operator_expectations_test.rb +136 -0
- data/test/mac_spec/matcher_system/built_in/truth_expectations_test.rb +373 -0
- data/test/mac_spec/matcher_system/core/def_matcher_test.rb +100 -0
- data/test/mac_spec/matcher_system/core/expectation_builder_test.rb +34 -0
- data/test/mac_spec/matcher_system/core/matcher_builder_test.rb +72 -0
- data/test/mac_spec/matcher_system/core/modals_test.rb +39 -0
- data/test/mac_spec/matcher_system/script.rb +29 -0
- data/test/mac_spec/matcher_system/test_helper.rb +2 -0
- data/test/mac_spec/mocking_framework/extensions/kernel_extension_test.rb +37 -0
- data/test/mac_spec/mocking_framework/extensions/object_extension_test.rb +9 -0
- data/test/mac_spec/mocking_framework/message_expectation_test.rb +9 -0
- data/test/mac_spec/mocking_framework/mock_test.rb +9 -0
- data/test/mac_spec/mocking_framework/regression/mocking_class_methods_test.rb +96 -0
- data/test/mac_spec/mocking_framework/regression/negative_expectation_test.rb +33 -0
- data/test/mac_spec/mocking_framework/regression/stub_test.rb +19 -0
- data/test/mac_spec/mocking_framework/test_helper.rb +1 -0
- data/test/mac_spec/test_helper.rb +1 -0
- data/test/mac_spec/testing_framework/performance/x_test_performance.rb +125 -0
- data/test/mac_spec/testing_framework/regression/before_test.rb +32 -0
- data/test/mac_spec/testing_framework/regression/deep_nested_example_groups_test.rb +20 -0
- data/test/mac_spec/testing_framework/regression/description_string_test.rb +13 -0
- data/test/mac_spec/testing_framework/regression/example_name_test.rb +11 -0
- data/test/mac_spec/testing_framework/regression/inherit_not_double_test.rb +39 -0
- data/test/mac_spec/testing_framework/regression/surrounding_module_scope_test.rb +31 -0
- data/test/mac_spec/testing_framework/regression/testing_functions_test.rb +66 -0
- data/test/mac_spec/testing_framework/test_helper.rb +1 -0
- data/test/test_helper.rb +1 -0
- metadata +150 -0
@@ -0,0 +1,373 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
class Exister
|
4
|
+
def initialize(what)
|
5
|
+
@what = what
|
6
|
+
end
|
7
|
+
|
8
|
+
def exist?
|
9
|
+
@what
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "Truth Expectations" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
@obj = Object.new
|
17
|
+
end
|
18
|
+
|
19
|
+
it "equal" do
|
20
|
+
3.should equal(3)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "negative equal" do
|
24
|
+
instance = String.new
|
25
|
+
|
26
|
+
instance.should_not equal(String.new)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "equal fail" do
|
30
|
+
lambda {
|
31
|
+
3.should equal(4)
|
32
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "negative equal fail" do
|
36
|
+
lambda {
|
37
|
+
3.should_not equal(3)
|
38
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "eql" do
|
42
|
+
3.should eql(3)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "eql array" do
|
46
|
+
[1,2,3].should eql([1,2,3])
|
47
|
+
end
|
48
|
+
|
49
|
+
it "negative eql" do
|
50
|
+
3.should_not eql(9)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "eql fail" do
|
54
|
+
lambda {
|
55
|
+
3.should eql(13)
|
56
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "negative eql fail" do
|
60
|
+
lambda {
|
61
|
+
3.should_not eql(3)
|
62
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "exists" do
|
66
|
+
thing = Exister.new(true)
|
67
|
+
thing.should exist
|
68
|
+
end
|
69
|
+
|
70
|
+
it "negative exists" do
|
71
|
+
thing = Exister.new(false)
|
72
|
+
thing.should_not exist
|
73
|
+
end
|
74
|
+
|
75
|
+
it "exists fail" do
|
76
|
+
lambda {
|
77
|
+
thing = Exister.new(false)
|
78
|
+
thing.should exist
|
79
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "negative exists fail" do
|
83
|
+
lambda {
|
84
|
+
thing = Exister.new(true)
|
85
|
+
thing.should_not exist
|
86
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "be" do
|
90
|
+
true.should be(true)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "be array" do
|
94
|
+
[1,2,3].should be([1,2,3])
|
95
|
+
end
|
96
|
+
|
97
|
+
it "negative be" do
|
98
|
+
true.should_not be(false)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "be fail" do
|
102
|
+
lambda {
|
103
|
+
true.should be(false)
|
104
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "be close" do
|
108
|
+
(5.0 - 2.0).should be_close(3.0)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "be close with delta" do
|
112
|
+
(5.0 - 2.0).should be_close(3.0, 0.2)
|
113
|
+
end
|
114
|
+
|
115
|
+
it "be close fail" do
|
116
|
+
lambda {
|
117
|
+
(19.0 - 13.0).should be_close(33.04)
|
118
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
119
|
+
end
|
120
|
+
|
121
|
+
it "be close with delta fail" do
|
122
|
+
lambda {
|
123
|
+
(19.0 - 13.0).should be_close(6.0, 0.0)
|
124
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "satisfy" do
|
128
|
+
13.should satisfy(lambda {|i| i < 15})
|
129
|
+
end
|
130
|
+
|
131
|
+
it "negative satisfy" do
|
132
|
+
13.should_not satisfy(lambda {|i| i < 10})
|
133
|
+
end
|
134
|
+
|
135
|
+
it "satisfy fail" do
|
136
|
+
lambda {
|
137
|
+
13.should satisfy(lambda {|i| i > 15})
|
138
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
139
|
+
end
|
140
|
+
|
141
|
+
it "negative satisfy fail" do
|
142
|
+
lambda {
|
143
|
+
13.should_not satisfy(lambda {|i| i < 15})
|
144
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
145
|
+
end
|
146
|
+
|
147
|
+
it "equal fail message" do
|
148
|
+
obj = equal(4)
|
149
|
+
obj.matches?(5)
|
150
|
+
|
151
|
+
obj.failure_message.should be("Expected 5 to return true for equal?, with '4'.")
|
152
|
+
end
|
153
|
+
|
154
|
+
it "equal negative fail message" do
|
155
|
+
obj = equal(5)
|
156
|
+
obj.matches?(5)
|
157
|
+
|
158
|
+
obj.negative_failure_message.should be("Expected 5 to not return true for equal?, with '5'.")
|
159
|
+
end
|
160
|
+
|
161
|
+
it "eql fail message" do
|
162
|
+
obj = eql(4)
|
163
|
+
obj.matches?(5)
|
164
|
+
|
165
|
+
obj.failure_message.should be("Expected 5 to return true for eql?, with '4'.")
|
166
|
+
end
|
167
|
+
|
168
|
+
it "eql negative fail message for eql" do
|
169
|
+
obj = eql(5)
|
170
|
+
obj.matches?(5)
|
171
|
+
|
172
|
+
obj.negative_failure_message.should be("Expected 5 to not return true for eql?, with '5'.")
|
173
|
+
end
|
174
|
+
|
175
|
+
it "exist fail message" do
|
176
|
+
obj = exist
|
177
|
+
obj.matches?(Exister.new(false))
|
178
|
+
|
179
|
+
obj.failure_message.should =~ /Expected .* to return true for exist?/
|
180
|
+
end
|
181
|
+
|
182
|
+
it "exist negative fail message" do
|
183
|
+
obj = exist
|
184
|
+
obj.matches?(Exister.new(true))
|
185
|
+
|
186
|
+
obj.negative_failure_message.should =~ /Expected .* to not return true for exist?/
|
187
|
+
end
|
188
|
+
|
189
|
+
it "be close fail message" do
|
190
|
+
obj = be_close(3.0)
|
191
|
+
obj.matches?(6.0)
|
192
|
+
|
193
|
+
obj.failure_message.should be("Expected 6.0 to be close to 3.0 (delta: 0.3).")
|
194
|
+
end
|
195
|
+
|
196
|
+
it "be close negative fail message" do
|
197
|
+
obj = be_close(5.0)
|
198
|
+
obj.matches?(5.0)
|
199
|
+
|
200
|
+
obj.negative_failure_message.should be("Expected 5.0 to not be close to 5.0 (delta: 0.3).")
|
201
|
+
end
|
202
|
+
|
203
|
+
it "be fail message" do
|
204
|
+
obj = be(4)
|
205
|
+
obj.matches?(5)
|
206
|
+
|
207
|
+
obj.failure_message.should be("Expected 5 to be 4.")
|
208
|
+
end
|
209
|
+
|
210
|
+
it "be negative fail message" do
|
211
|
+
obj = be(5)
|
212
|
+
obj.matches?(5)
|
213
|
+
|
214
|
+
obj.negative_failure_message.should be("Expected 5 to not be 5.")
|
215
|
+
end
|
216
|
+
|
217
|
+
it "satisfy fail message" do
|
218
|
+
obj = satisfy(lambda {|x| x == 4})
|
219
|
+
obj.matches?(6)
|
220
|
+
|
221
|
+
obj.failure_message.should be("Expected 6 to satisfy given block.")
|
222
|
+
end
|
223
|
+
|
224
|
+
it "eql negative fail message for matches" do
|
225
|
+
obj = satisfy(lambda {|x| x == 4})
|
226
|
+
obj.matches?(4)
|
227
|
+
|
228
|
+
obj.negative_failure_message.should be("Expected 4 to not satisfy given block.")
|
229
|
+
end
|
230
|
+
|
231
|
+
it "kind of" do
|
232
|
+
3.should be_kind_of(Fixnum)
|
233
|
+
end
|
234
|
+
|
235
|
+
it "kind of fail" do
|
236
|
+
lambda {
|
237
|
+
3.should be_kind_of(Hash)
|
238
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
239
|
+
end
|
240
|
+
|
241
|
+
it "negative kind of" do
|
242
|
+
3.should_not be_kind_of(Hash)
|
243
|
+
end
|
244
|
+
|
245
|
+
it "negative kind of fail" do
|
246
|
+
lambda {
|
247
|
+
3.should_not be_kind_of(Fixnum)
|
248
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
249
|
+
end
|
250
|
+
|
251
|
+
it "respond to" do
|
252
|
+
"foo".should respond_to(:length)
|
253
|
+
end
|
254
|
+
|
255
|
+
it "respond to fail" do
|
256
|
+
lambda {
|
257
|
+
"foo".should respond_to(:nonexistant_method)
|
258
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
259
|
+
end
|
260
|
+
|
261
|
+
it "negative respond to" do
|
262
|
+
"foo".should_not respond_to(:nonexistant_method)
|
263
|
+
end
|
264
|
+
|
265
|
+
it "negative respond to fail" do
|
266
|
+
lambda {
|
267
|
+
"foo".should_not respond_to(:length)
|
268
|
+
}.should raise_error(MacSpec.assertion_failed_error)
|
269
|
+
end
|
270
|
+
|
271
|
+
# be_something
|
272
|
+
it "positive be something method missing pass" do
|
273
|
+
def @obj.something?
|
274
|
+
true
|
275
|
+
end
|
276
|
+
@obj.should be_something
|
277
|
+
end
|
278
|
+
|
279
|
+
it "positive be something method missing fails" do
|
280
|
+
def @obj.something?
|
281
|
+
false
|
282
|
+
end
|
283
|
+
lambda {@obj.should be_something}.should raise_error(MacSpec.assertion_failed_error)
|
284
|
+
end
|
285
|
+
|
286
|
+
it "negative be something method missing pass" do
|
287
|
+
def @obj.something?
|
288
|
+
false
|
289
|
+
end
|
290
|
+
@obj.should_not be_something
|
291
|
+
end
|
292
|
+
|
293
|
+
it "negative be something method missing fails" do
|
294
|
+
def @obj.something?
|
295
|
+
true
|
296
|
+
end
|
297
|
+
lambda {@obj.should_not be_something}.should raise_error(MacSpec.assertion_failed_error)
|
298
|
+
end
|
299
|
+
|
300
|
+
it "be something method missing fail message" do
|
301
|
+
obj = "foo"
|
302
|
+
def obj.something?
|
303
|
+
true
|
304
|
+
end
|
305
|
+
matcher_obj = be_something
|
306
|
+
obj.should matcher_obj
|
307
|
+
|
308
|
+
matcher_obj.failure_message.should be("Expected \"foo\" to return true for something?, with 'no args'.")
|
309
|
+
end
|
310
|
+
|
311
|
+
it "be something method missing negative fail message" do
|
312
|
+
obj = "foo"
|
313
|
+
def obj.something?
|
314
|
+
false
|
315
|
+
end
|
316
|
+
matcher_obj = be_something
|
317
|
+
obj.should_not matcher_obj
|
318
|
+
|
319
|
+
matcher_obj.negative_failure_message.should =~ /Expected \"foo\" to not return true for something?/
|
320
|
+
end
|
321
|
+
|
322
|
+
# be_something(arg)
|
323
|
+
it "positive be something with arg method missing pass" do
|
324
|
+
def @obj.something?(arg)
|
325
|
+
true
|
326
|
+
end
|
327
|
+
@obj.should be_something(1)
|
328
|
+
end
|
329
|
+
|
330
|
+
it "positive be something with arg method missing fails" do
|
331
|
+
def @obj.something?(arg)
|
332
|
+
false
|
333
|
+
end
|
334
|
+
lambda {@obj.should be_something(1)}.should raise_error(MacSpec.assertion_failed_error)
|
335
|
+
end
|
336
|
+
|
337
|
+
it "negative be something method missing pass" do
|
338
|
+
def @obj.something?(arg)
|
339
|
+
false
|
340
|
+
end
|
341
|
+
@obj.should_not be_something(1)
|
342
|
+
end
|
343
|
+
|
344
|
+
it "negative be something method missing fails" do
|
345
|
+
def @obj.something?(arg)
|
346
|
+
true
|
347
|
+
end
|
348
|
+
lambda {@obj.should_not be_something(1)}.should raise_error(MacSpec.assertion_failed_error)
|
349
|
+
end
|
350
|
+
|
351
|
+
it "be something method missing fail message" do
|
352
|
+
obj = "foo"
|
353
|
+
def obj.something?(arg)
|
354
|
+
true
|
355
|
+
end
|
356
|
+
matcher_obj = be_something(1)
|
357
|
+
obj.should matcher_obj
|
358
|
+
|
359
|
+
matcher_obj.failure_message.should be("Expected \"foo\" to return true for something?, with '1'.")
|
360
|
+
end
|
361
|
+
|
362
|
+
it "be something method missing negative fail message" do
|
363
|
+
obj = "foo"
|
364
|
+
def obj.something?(arg)
|
365
|
+
false
|
366
|
+
end
|
367
|
+
matcher_obj = be_something(1)
|
368
|
+
obj.should_not matcher_obj
|
369
|
+
|
370
|
+
matcher_obj.negative_failure_message.should be("Expected \"foo\" to not return true for something?, with '1'.")
|
371
|
+
end
|
372
|
+
|
373
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../test_helper.rb'
|
2
|
+
|
3
|
+
describe "def_matcher" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@obj = Object.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "defines method" do
|
10
|
+
def_matcher :method_ do |given, matcher, args|
|
11
|
+
end
|
12
|
+
self.should respond_to(:method_)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "object responds to matches" do
|
16
|
+
def_matcher :method_ do |given, matcher, args|
|
17
|
+
end
|
18
|
+
method_.should respond_to(:matches?)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "fail positive" do
|
22
|
+
def_matcher :matcher do |given, matcher, args|
|
23
|
+
false
|
24
|
+
end
|
25
|
+
lambda {1.should matcher}.should raise_error
|
26
|
+
end
|
27
|
+
|
28
|
+
it "pass positive" do
|
29
|
+
def_matcher :matcher do |given, matcher, args|
|
30
|
+
true
|
31
|
+
end
|
32
|
+
1.should matcher
|
33
|
+
end
|
34
|
+
|
35
|
+
it "fail negative" do
|
36
|
+
def_matcher :matcher do |given, matcher, args|
|
37
|
+
true
|
38
|
+
end
|
39
|
+
lambda {1.should_not matcher}.should raise_error
|
40
|
+
end
|
41
|
+
|
42
|
+
it "pass negative" do
|
43
|
+
def_matcher :matcher do |given, matcher, args|
|
44
|
+
false
|
45
|
+
end
|
46
|
+
1.should_not matcher
|
47
|
+
end
|
48
|
+
|
49
|
+
it "takes arguments" do
|
50
|
+
def_matcher :matcher do |given, matcher, args|
|
51
|
+
$args = args
|
52
|
+
true
|
53
|
+
end
|
54
|
+
@obj.should matcher(1,2,3)
|
55
|
+
$args.should eql([1,2,3])
|
56
|
+
end
|
57
|
+
|
58
|
+
it "received method" do
|
59
|
+
def_matcher :matcher do |given, matcher, args|
|
60
|
+
$msgs = matcher.msgs
|
61
|
+
true
|
62
|
+
end
|
63
|
+
@obj.should matcher.method1
|
64
|
+
$msgs[0].name.should eql(:method1)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "received method takes args" do
|
68
|
+
def_matcher :matcher do |given, matcher, args|
|
69
|
+
$msgs = matcher.msgs
|
70
|
+
true
|
71
|
+
end
|
72
|
+
@obj.should matcher.method1(1,2,3)
|
73
|
+
$msgs[0].args.should eql([1,2,3])
|
74
|
+
end
|
75
|
+
|
76
|
+
it "received method takes block" do
|
77
|
+
def_matcher :matcher do |given, matcher, args|
|
78
|
+
$msgs = matcher.msgs
|
79
|
+
true
|
80
|
+
end
|
81
|
+
@obj.should matcher.method1 { "Hello, World!"}
|
82
|
+
$msgs[0].block.call.should eql("Hello, World!")
|
83
|
+
end
|
84
|
+
|
85
|
+
it "received method chained" do
|
86
|
+
def_matcher :matcher do |given, matcher, args|
|
87
|
+
$msgs = matcher.msgs
|
88
|
+
true
|
89
|
+
end
|
90
|
+
@obj.should matcher.method1(1,2,3) { "Hello, World!"}.
|
91
|
+
method2(4,5,6) { "Hello chained messages" }
|
92
|
+
|
93
|
+
$msgs[0].name.should eql(:method1)
|
94
|
+
$msgs[1].name.should eql(:method2)
|
95
|
+
$msgs[0].args.should eql([1,2,3])
|
96
|
+
$msgs[1].args.should eql([4,5,6])
|
97
|
+
$msgs[0].block.call.should eql("Hello, World!")
|
98
|
+
$msgs[1].block.call.should eql("Hello chained messages")
|
99
|
+
end
|
100
|
+
end
|