rr 0.4.8 → 0.4.9

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 (52) hide show
  1. data/CHANGES +3 -0
  2. data/{README → README.rdoc} +14 -6
  3. data/Rakefile +2 -2
  4. data/lib/rr.rb +11 -3
  5. data/lib/rr/adapters/rr_methods.rb +12 -12
  6. data/lib/rr/adapters/rspec.rb +3 -3
  7. data/lib/rr/adapters/test_unit.rb +3 -3
  8. data/lib/rr/double.rb +12 -10
  9. data/lib/rr/double_creator.rb +48 -45
  10. data/lib/rr/double_definition.rb +17 -149
  11. data/lib/rr/double_definition_builder.rb +11 -11
  12. data/lib/rr/double_definition_creator.rb +156 -0
  13. data/lib/rr/{double_method_proxy.rb → double_definition_creator_proxy.rb} +2 -2
  14. data/lib/rr/double_injection.rb +6 -6
  15. data/lib/rr/double_matches.rb +40 -40
  16. data/lib/rr/errors/rr_error.rb +1 -1
  17. data/lib/rr/expectations/times_called_expectation.rb +1 -1
  18. data/lib/rr/space.rb +9 -30
  19. data/spec/high_level_spec.rb +140 -143
  20. data/spec/rr/adapters/rr_methods_creator_spec.rb +21 -21
  21. data/spec/rr/adapters/rr_methods_space_spec.rb +2 -2
  22. data/spec/rr/double/double_injection_dispatching_spec.rb +15 -15
  23. data/spec/rr/double/double_injection_reset_spec.rb +1 -1
  24. data/spec/rr/double/double_injection_verify_spec.rb +5 -4
  25. data/spec/rr/{double_method_proxy_spec.rb → double_definition_creator_proxy_spec.rb} +12 -10
  26. data/spec/rr/{double_creator_spec.rb → double_definition_creator_spec.rb} +166 -124
  27. data/spec/rr/double_definition_spec.rb +637 -642
  28. data/spec/rr/double_spec.rb +44 -43
  29. data/spec/rr/errors/rr_error_spec.rb +6 -6
  30. data/spec/rr/expectations/times_called_expectation/times_called_expectation_any_times_spec.rb +3 -3
  31. data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_least_spec.rb +8 -8
  32. data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_most_spec.rb +11 -13
  33. data/spec/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +2 -2
  34. data/spec/rr/expectations/times_called_expectation/times_called_expectation_integer_spec.rb +19 -19
  35. data/spec/rr/expectations/times_called_expectation/times_called_expectation_proc_spec.rb +16 -16
  36. data/spec/rr/expectations/times_called_expectation/times_called_expectation_range_spec.rb +16 -16
  37. data/spec/rr/expectations/times_called_expectation/times_called_expectation_spec.rb +7 -11
  38. data/spec/rr/rspec/rspec_adapter_spec.rb +10 -10
  39. data/spec/rr/rspec/rspec_backtrace_tweaking_spec.rb +1 -1
  40. data/spec/rr/space/space_spec.rb +372 -18
  41. data/spec/rr/test_unit/test_unit_backtrace_test.rb +1 -1
  42. data/spec/rr/times_called_matchers/proc_matcher_spec.rb +3 -3
  43. data/spec/rr/times_called_matchers/times_called_matcher_spec.rb +3 -3
  44. data/spec/spec_helper.rb +14 -3
  45. data/spec/spec_suite.rb +2 -2
  46. metadata +47 -45
  47. data/spec/rr/double/double_injection_register_scenario_spec.rb +0 -24
  48. data/spec/rr/space/space_create_spec.rb +0 -268
  49. data/spec/rr/space/space_helper.rb +0 -7
  50. data/spec/rr/space/space_register_spec.rb +0 -32
  51. data/spec/rr/space/space_reset_spec.rb +0 -131
  52. data/spec/rr/space/space_verify_spec.rb +0 -181
@@ -2,15 +2,22 @@ require "spec/spec_helper"
2
2
 
3
3
  module RR
4
4
  describe Double do
5
+ it_should_behave_like "Swapped Space"
5
6
  attr_reader :space, :object, :double_injection, :double
6
7
  before do
7
- @space = Space.new
8
+ @space = Space.instance
8
9
  @object = Object.new
9
10
  def object.foobar(a, b)
10
11
  [b, a]
11
12
  end
12
13
  @double_injection = space.double_injection(object, :foobar)
13
- @double = space.double(double_injection)
14
+ @double = Double.new(double_injection)
15
+ end
16
+
17
+ describe "#initialize" do
18
+ it "registers self with associated DoubleInjection" do
19
+ double_injection.doubles.should include(double)
20
+ end
14
21
  end
15
22
 
16
23
  describe "#with" do
@@ -74,12 +81,12 @@ module RR
74
81
 
75
82
  it "sets up a Times Called Expectation with 0" do
76
83
  double.never
77
- proc {double.call(double_injection)}.should raise_error(Errors::TimesCalledError)
84
+ lambda {double.call(double_injection)}.should raise_error(Errors::TimesCalledError)
78
85
  end
79
86
 
80
87
  it "sets return value when block passed in" do
81
88
  double.with_any_args.never
82
- proc {double.call(double_injection)}.should raise_error(Errors::TimesCalledError)
89
+ lambda {double.call(double_injection)}.should raise_error(Errors::TimesCalledError)
83
90
  end
84
91
  end
85
92
 
@@ -91,7 +98,7 @@ module RR
91
98
  it "sets up a Times Called Expectation with 1" do
92
99
  double.once
93
100
  double.call(double_injection)
94
- proc {double.call(double_injection)}.should raise_error(Errors::TimesCalledError)
101
+ lambda {double.call(double_injection)}.should raise_error(Errors::TimesCalledError)
95
102
  end
96
103
 
97
104
  it "sets return value when block passed in" do
@@ -109,7 +116,7 @@ module RR
109
116
  double.twice
110
117
  double.call(double_injection)
111
118
  double.call(double_injection)
112
- proc {double.call(double_injection)}.should raise_error(Errors::TimesCalledError)
119
+ lambda {double.call(double_injection)}.should raise_error(Errors::TimesCalledError)
113
120
  end
114
121
 
115
122
  it "sets return value when block passed in" do
@@ -143,7 +150,7 @@ module RR
143
150
  double.at_most(2)
144
151
  double.call(double_injection)
145
152
  double.call(double_injection)
146
- proc do
153
+ lambda do
147
154
  double.call(double_injection)
148
155
  end.should raise_error(
149
156
  Errors::TimesCalledError,
@@ -167,7 +174,7 @@ module RR
167
174
  double.call(double_injection)
168
175
  double.call(double_injection)
169
176
  double.call(double_injection)
170
- proc {double.call(double_injection)}.should raise_error(Errors::TimesCalledError)
177
+ lambda {double.call(double_injection)}.should raise_error(Errors::TimesCalledError)
171
178
  end
172
179
 
173
180
  it "sets return value when block passed in" do
@@ -285,7 +292,7 @@ module RR
285
292
  end
286
293
 
287
294
  it "raises an error when not passed a block" do
288
- proc do
295
+ lambda do
289
296
  double.after_call
290
297
  end.should raise_error(ArgumentError, "after_call expects a block")
291
298
  end
@@ -303,7 +310,7 @@ module RR
303
310
  end
304
311
 
305
312
  it "sets return value when block passed in" do
306
- (class << double; self; end).send(:define_method, :puts) {|value|}
313
+ (class << double; self; end).__send__(:define_method, :puts) {|value|}
307
314
  double.with().verbose {:return_value}
308
315
  object.foobar.should == :return_value
309
316
  end
@@ -331,7 +338,7 @@ module RR
331
338
  end
332
339
 
333
340
  it "raises an error when both argument and block is passed in" do
334
- proc do
341
+ lambda do
335
342
  double.returns(:baz) {:another}
336
343
  end.should raise_error(ArgumentError, "returns cannot accept both an argument and a block")
337
344
  end
@@ -339,11 +346,11 @@ module RR
339
346
 
340
347
  describe "#implemented_by" do
341
348
  it "returns the DoubleDefinition" do
342
- double.implemented_by(proc{:baz}).should === double.definition
349
+ double.implemented_by(lambda{:baz}).should === double.definition
343
350
  end
344
351
 
345
- it "sets the implementation to the passed in proc" do
346
- double.implemented_by(proc{:baz})
352
+ it "sets the implementation to the passed in lambda" do
353
+ double.implemented_by(lambda{:baz})
347
354
  double.call(double_injection).should == :baz
348
355
  end
349
356
 
@@ -356,13 +363,13 @@ module RR
356
363
  end
357
364
  end
358
365
 
359
- describe "#implemented_by_original_method" do
366
+ describe "#proxy" do
360
367
  it "returns the DoubleDefinition object" do
361
- double.implemented_by_original_method.should === double.definition
368
+ double.proxy.should === double.definition
362
369
  end
363
370
 
364
371
  it "sets the implementation to the original method" do
365
- double.implemented_by_original_method
372
+ double.proxy
366
373
  double.call(double_injection, 1, 2).should == [2, 1]
367
374
  end
368
375
 
@@ -384,9 +391,9 @@ module RR
384
391
  end
385
392
 
386
393
  double_injection = space.double_injection(object, :foobar)
387
- double = space.double(double_injection)
394
+ double = Double.new(double_injection)
388
395
  double.with_any_args
389
- double.implemented_by_original_method
396
+ double.proxy
390
397
 
391
398
  object.foobar(1, 2).should == [2, 1]
392
399
  end
@@ -398,9 +405,9 @@ module RR
398
405
  end
399
406
  end
400
407
  double_injection = space.double_injection(object, :does_not_exist)
401
- double = space.double(double_injection)
408
+ double = Double.new(double_injection)
402
409
  double.with_any_args
403
- double.implemented_by_original_method
410
+ double.proxy
404
411
 
405
412
  return_value = object.does_not_exist(1, 2)
406
413
  return_value.should == "method_missing for does_not_exist([1, 2])"
@@ -412,7 +419,7 @@ module RR
412
419
  it "prints the message call" do
413
420
  double.verbose
414
421
  output = nil
415
- (class << double; self; end).send(:define_method, :puts) do |output|
422
+ (class << double; self; end).__send__(:define_method, :puts) do |output|
416
423
  output = output
417
424
  end
418
425
  double.call(double_injection, 1, 2)
@@ -423,7 +430,7 @@ module RR
423
430
  describe "when not verbose" do
424
431
  it "does not print the message call" do
425
432
  output = nil
426
- (class << double; self; end).send(:define_method, :puts) do |output|
433
+ (class << double; self; end).__send__(:define_method, :puts) do |output|
427
434
  output = output
428
435
  end
429
436
  double.call(double_injection, 1, 2)
@@ -431,8 +438,8 @@ module RR
431
438
  end
432
439
  end
433
440
 
434
- describe "when implemented by a proc" do
435
- it "calls the return proc when implemented by a proc" do
441
+ describe "when implemented by a lambda" do
442
+ it "calls the return lambda when implemented by a lambda" do
436
443
  double.returns {|arg| "returning #{arg}"}
437
444
  double.call(double_injection, :foobar).should == "returning foobar"
438
445
  end
@@ -458,17 +465,17 @@ module RR
458
465
 
459
466
  double.call(double_injection, :foobar)
460
467
  double.call(double_injection, :foobar)
461
- proc {double.call(double_injection, :foobar)}.should raise_error(Errors::TimesCalledError)
468
+ lambda {double.call(double_injection, :foobar)}.should raise_error(Errors::TimesCalledError)
462
469
  end
463
470
 
464
471
  it "raises DoubleOrderError when ordered and called out of order" do
465
472
  double1 = double
466
- double2 = space.double(double_injection)
473
+ double2 = Double.new(double_injection)
467
474
 
468
475
  double1.with(1).returns {:return_1}.ordered.once
469
476
  double2.with(2).returns {:return_2}.ordered.once
470
477
 
471
- proc do
478
+ lambda do
472
479
  object.foobar(2)
473
480
  end.should raise_error(
474
481
  Errors::DoubleOrderError,
@@ -482,10 +489,7 @@ module RR
482
489
  verify_ordered_double_called = false
483
490
  passed_in_double = nil
484
491
  space.method(:verify_ordered_double).arity.should == 1
485
- (
486
- class << space;
487
- self;
488
- end).class_eval do
492
+ (class << space; self; end).class_eval do
489
493
  define_method :verify_ordered_double do |double|
490
494
  passed_in_double = double
491
495
  verify_ordered_double_called = true
@@ -501,10 +505,7 @@ module RR
501
505
  it "does not dispatche to Space#verify_ordered_double when not ordered" do
502
506
  verify_ordered_double_called = false
503
507
  space.method(:verify_ordered_double).arity.should == 1
504
- (
505
- class << space;
506
- self;
507
- end).class_eval do
508
+ (class << space; self; end).class_eval do
508
509
  define_method :verify_ordered_double do |double|
509
510
  verify_ordered_double_called = true
510
511
  end
@@ -532,7 +533,7 @@ module RR
532
533
  it "raises ArgumentError when yields was called and no block passed in" do
533
534
  double.with(1, 2).yields(55)
534
535
 
535
- proc do
536
+ lambda do
536
537
  object.foobar(1, 2)
537
538
  end.should raise_error(ArgumentError, "A Block must be passed into the method call when using yields")
538
539
  end
@@ -628,20 +629,20 @@ module RR
628
629
  it "verifies that times called expectation was met" do
629
630
  double.twice.returns {:return_value}
630
631
 
631
- proc {double.verify}.should raise_error(Errors::TimesCalledError)
632
+ lambda {double.verify}.should raise_error(Errors::TimesCalledError)
632
633
  double.call(double_injection)
633
- proc {double.verify}.should raise_error(Errors::TimesCalledError)
634
+ lambda {double.verify}.should raise_error(Errors::TimesCalledError)
634
635
  double.call(double_injection)
635
636
 
636
- proc {double.verify}.should_not raise_error
637
+ lambda {double.verify}.should_not raise_error
637
638
  end
638
639
 
639
640
  it "does not raise an error when there is no times called expectation" do
640
- proc {double.verify}.should_not raise_error
641
+ lambda {double.verify}.should_not raise_error
641
642
  double.call(double_injection)
642
- proc {double.verify}.should_not raise_error
643
+ lambda {double.verify}.should_not raise_error
643
644
  double.call(double_injection)
644
- proc {double.verify}.should_not raise_error
645
+ lambda {double.verify}.should_not raise_error
645
646
  end
646
647
  end
647
648
 
@@ -4,20 +4,20 @@ module RR
4
4
  module Errors
5
5
  describe RRError, "#backtrace" do
6
6
  before do
7
- @original_trim_backtrace = RR::Space.trim_backtrace
7
+ @original_trim_backtrace = RR.trim_backtrace
8
8
  end
9
9
  after do
10
- RR::Space.trim_backtrace = @original_trim_backtrace
10
+ RR.trim_backtrace = @original_trim_backtrace
11
11
  end
12
12
 
13
13
  it "does not include the rr library files when trim_backtrace is true" do
14
- RR::Space.trim_backtrace = true
14
+ RR.trim_backtrace = true
15
15
 
16
16
  error = nil
17
17
  begin
18
18
  obj = Object.new
19
19
  mock(obj).foobar
20
- RR::Space.verify_double(obj, :foobar)
20
+ RR.verify_double(obj, :foobar)
21
21
  rescue RRError=> e
22
22
  error = e
23
23
  end
@@ -27,13 +27,13 @@ module RR
27
27
  end
28
28
 
29
29
  it "includes the rr library files when trim_backtrace is false" do
30
- RR::Space.trim_backtrace = false
30
+ RR.trim_backtrace = false
31
31
 
32
32
  error = nil
33
33
  begin
34
34
  obj = Object.new
35
35
  mock(obj).foobar
36
- RR::Space.verify_double(obj, :foobar)
36
+ RR.verify_double(obj, :foobar)
37
37
  rescue RRError=> e
38
38
  error = e
39
39
  end
@@ -14,7 +14,7 @@ module RR
14
14
  describe "#verify!" do
15
15
  it "always passes" do
16
16
  expectation.verify!
17
- 10.times {expectation.attempt!}
17
+ 10.times {expectation.attempt}
18
18
  expectation.verify!
19
19
  end
20
20
  end
@@ -22,14 +22,14 @@ module RR
22
22
  describe "#attempt?" do
23
23
  it "always returns true" do
24
24
  expectation.should be_attempt
25
- 10.times {expectation.attempt!}
25
+ 10.times {expectation.attempt}
26
26
  expectation.should be_attempt
27
27
  end
28
28
  end
29
29
 
30
30
  describe "#attempt!" do
31
31
  it "always passes" do
32
- 10.times {expectation.attempt!}
32
+ 10.times {expectation.attempt}
33
33
  end
34
34
  end
35
35
 
@@ -14,18 +14,18 @@ module Expectations
14
14
 
15
15
  describe "#verify!" do
16
16
  it "passes when times called > times" do
17
- 4.times {expectation.attempt!}
17
+ 4.times {expectation.attempt}
18
18
  expectation.verify!
19
19
  end
20
20
 
21
21
  it "passes when times called == times" do
22
- 3.times {expectation.attempt!}
22
+ 3.times {expectation.attempt}
23
23
  expectation.verify!
24
24
  end
25
25
 
26
26
  it "raises error when times called < times" do
27
- expectation.attempt!
28
- proc do
27
+ expectation.attempt
28
+ lambda do
29
29
  expectation.verify!
30
30
  end.should raise_error(
31
31
  RR::Errors::TimesCalledError,
@@ -37,22 +37,22 @@ module Expectations
37
37
  describe "#attempt?" do
38
38
  it "always returns true" do
39
39
  expectation.should be_attempt
40
- 10.times {expectation.attempt!}
40
+ 10.times {expectation.attempt}
41
41
  expectation.should be_attempt
42
42
  end
43
43
  end
44
44
 
45
45
  describe "#attempt!" do
46
46
  it "passes when times called more than times" do
47
- 4.times {expectation.attempt!}
47
+ 4.times {expectation.attempt}
48
48
  end
49
49
 
50
50
  it "passes when times called == times" do
51
- 3.times {expectation.attempt!}
51
+ 3.times {expectation.attempt}
52
52
  end
53
53
 
54
54
  it "passes when times called < times" do
55
- expectation.attempt!
55
+ expectation.attempt
56
56
  end
57
57
  end
58
58
 
@@ -14,49 +14,47 @@ module RR
14
14
 
15
15
  describe "#verify!" do
16
16
  it "returns true when times called == times" do
17
- 3.times {expectation.attempt!}
17
+ 3.times {expectation.attempt}
18
18
  expectation.verify!
19
19
  end
20
20
 
21
21
  it "raises error when times called < times" do
22
- 2.times {expectation.attempt!}
22
+ 2.times {expectation.attempt}
23
23
  expectation.verify!
24
24
  end
25
25
  end
26
26
 
27
27
  describe "#attempt?" do
28
28
  it "returns true when attempted less than expected times" do
29
- 2.times {expectation.attempt!}
29
+ 2.times {expectation.attempt}
30
30
  expectation.should be_attempt
31
31
  end
32
32
 
33
33
  it "returns false when attempted expected times" do
34
- 3.times {expectation.attempt!}
34
+ 3.times {expectation.attempt}
35
35
  expectation.should_not be_attempt
36
36
  end
37
37
 
38
38
  it "raises error before attempted more than expected times" do
39
- 3.times {expectation.attempt!}
40
- proc {expectation.attempt!}.should raise_error(
41
- Errors::TimesCalledError
42
- )
39
+ 3.times {expectation.attempt}
40
+ lambda {expectation.attempt}.should raise_error( Errors::TimesCalledError )
43
41
  end
44
42
  end
45
43
 
46
44
  describe "#attempt!" do
47
45
  it "fails when times called more than times" do
48
- 3.times {expectation.attempt!}
49
- proc do
50
- expectation.attempt!
46
+ 3.times {expectation.attempt}
47
+ lambda do
48
+ expectation.attempt
51
49
  end.should raise_error(Errors::TimesCalledError, "foobar()\nCalled 4 times.\nExpected at most 3 times.")
52
50
  end
53
51
 
54
52
  it "passes when times called == times" do
55
- 3.times {expectation.attempt!}
53
+ 3.times {expectation.attempt}
56
54
  end
57
55
 
58
56
  it "passes when times called < times" do
59
- expectation.attempt!
57
+ expectation.attempt
60
58
  end
61
59
  end
62
60
 
@@ -9,12 +9,12 @@ module RR
9
9
  @object = Object.new
10
10
  @method_name = :foobar
11
11
  @double_injection = space.double_injection(object, method_name)
12
- @double = space.double(double_injection)
12
+ @double = Double.new(double_injection)
13
13
  double.with_any_args
14
14
  end
15
15
 
16
16
  def raises_expectation_error(&block)
17
- proc {block.call}.should raise_error(Errors::TimesCalledError)
17
+ lambda {block.call}.should raise_error(Errors::TimesCalledError)
18
18
  end
19
19
  end
20
20
  end