rr 0.1.11 → 0.1.12
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/CHANGES +4 -0
- data/Rakefile +1 -1
- data/examples/rr/do_not_allow_creator_example.rb +22 -0
- data/examples/rr/mock_creator_example.rb +23 -0
- data/examples/rr/probe_creator_example.rb +23 -0
- data/examples/rr/stub_creator_example.rb +23 -0
- data/lib/rr/creator.rb +16 -0
- data/lib/rr/do_not_allow_creator.rb +13 -19
- data/lib/rr/mock_creator.rb +9 -15
- data/lib/rr/probe_creator.rb +10 -16
- data/lib/rr/stub_creator.rb +12 -18
- data/lib/rr.rb +1 -0
- metadata +2 -1
data/CHANGES
CHANGED
data/Rakefile
CHANGED
@@ -21,6 +21,17 @@ describe DoNotAllowCreator, ".new" do
|
|
21
21
|
before do
|
22
22
|
@creator = DoNotAllowCreator.new(@space, @subject)
|
23
23
|
end
|
24
|
+
|
25
|
+
it "clears out all methods from creator" do
|
26
|
+
creator_subclass = Class.new(DoNotAllowCreator) do
|
27
|
+
def i_should_be_a_scenario
|
28
|
+
end
|
29
|
+
end
|
30
|
+
creator_subclass.instance_methods.should include('i_should_be_a_scenario')
|
31
|
+
|
32
|
+
creator = creator_subclass.new(@space, @subject)
|
33
|
+
creator.i_should_be_a_scenario.should be_instance_of(Scenario)
|
34
|
+
end
|
24
35
|
end
|
25
36
|
|
26
37
|
describe DoNotAllowCreator, ".new with block" do
|
@@ -57,6 +68,17 @@ describe DoNotAllowCreator, ".new with block" do
|
|
57
68
|
it "raises TimesCalledError when any_args is called with arguments" do
|
58
69
|
proc {@subject.any_args(1, 2)}.should raise_error(Errors::TimesCalledError)
|
59
70
|
end
|
71
|
+
|
72
|
+
it "clears out all methods from creator" do
|
73
|
+
creator_subclass = Class.new(DoNotAllowCreator) do
|
74
|
+
def i_should_be_a_scenario
|
75
|
+
end
|
76
|
+
end
|
77
|
+
creator_subclass.instance_methods.should include('i_should_be_a_scenario')
|
78
|
+
|
79
|
+
creator = creator_subclass.new(@space, @subject)
|
80
|
+
creator.i_should_be_a_scenario.should be_instance_of(Scenario)
|
81
|
+
end
|
60
82
|
end
|
61
83
|
|
62
84
|
describe DoNotAllowCreator, "#method_missing" do
|
@@ -21,6 +21,17 @@ describe MockCreator, ".new without block" do
|
|
21
21
|
before do
|
22
22
|
@creator = MockCreator.new(@space, @subject)
|
23
23
|
end
|
24
|
+
|
25
|
+
it "clears out all methods from creator" do
|
26
|
+
creator_subclass = Class.new(MockCreator) do
|
27
|
+
def i_should_be_a_scenario
|
28
|
+
end
|
29
|
+
end
|
30
|
+
creator_subclass.instance_methods.should include('i_should_be_a_scenario')
|
31
|
+
|
32
|
+
creator = creator_subclass.new(@space, @subject)
|
33
|
+
creator.i_should_be_a_scenario.should be_instance_of(Scenario)
|
34
|
+
end
|
24
35
|
end
|
25
36
|
|
26
37
|
describe MockCreator, ".new with block" do
|
@@ -41,6 +52,18 @@ describe MockCreator, ".new with block" do
|
|
41
52
|
@subject.foobar(:something).should == :default
|
42
53
|
@subject.baz.should == :baz_result
|
43
54
|
end
|
55
|
+
|
56
|
+
it "clears out all methods from creator" do
|
57
|
+
creator_subclass = Class.new(MockCreator) do
|
58
|
+
def i_should_be_a_scenario
|
59
|
+
end
|
60
|
+
end
|
61
|
+
creator_subclass.instance_methods.should include('i_should_be_a_scenario')
|
62
|
+
|
63
|
+
creator_subclass.new(@space, @subject) do |m|
|
64
|
+
m.i_should_be_a_scenario.should be_instance_of(Scenario)
|
65
|
+
end
|
66
|
+
end
|
44
67
|
end
|
45
68
|
|
46
69
|
|
@@ -21,6 +21,17 @@ describe ProbeCreator, ".new without block" do
|
|
21
21
|
before do
|
22
22
|
@creator = ProbeCreator.new(@space, @subject)
|
23
23
|
end
|
24
|
+
|
25
|
+
it "clears out all methods from creator" do
|
26
|
+
creator_subclass = Class.new(ProbeCreator) do
|
27
|
+
def i_should_be_a_scenario
|
28
|
+
end
|
29
|
+
end
|
30
|
+
creator_subclass.instance_methods.should include('i_should_be_a_scenario')
|
31
|
+
|
32
|
+
creator = creator_subclass.new(@space, @subject)
|
33
|
+
creator.i_should_be_a_scenario.should be_instance_of(Scenario)
|
34
|
+
end
|
24
35
|
end
|
25
36
|
|
26
37
|
describe ProbeCreator, ".new with block" do
|
@@ -43,6 +54,18 @@ describe ProbeCreator, ".new with block" do
|
|
43
54
|
@subject.foobar(:something).should == :original_foobar
|
44
55
|
proc {@subject.foobar(:nasty)}.should raise_error
|
45
56
|
end
|
57
|
+
|
58
|
+
it "clears out all methods from creator" do
|
59
|
+
creator_subclass = Class.new(ProbeCreator) do
|
60
|
+
def i_should_be_a_scenario
|
61
|
+
end
|
62
|
+
end
|
63
|
+
creator_subclass.instance_methods.should include('i_should_be_a_scenario')
|
64
|
+
|
65
|
+
creator_subclass.new(@space, @subject) do |m|
|
66
|
+
m.i_should_be_a_scenario.should be_instance_of(Scenario)
|
67
|
+
end
|
68
|
+
end
|
46
69
|
end
|
47
70
|
|
48
71
|
describe ProbeCreator, ".new where method takes a block" do
|
@@ -21,6 +21,17 @@ describe StubCreator, ".new without block" do
|
|
21
21
|
before do
|
22
22
|
@creator = StubCreator.new(@space, @subject)
|
23
23
|
end
|
24
|
+
|
25
|
+
it "clears out all methods from creator" do
|
26
|
+
creator_subclass = Class.new(StubCreator) do
|
27
|
+
def i_should_be_a_scenario
|
28
|
+
end
|
29
|
+
end
|
30
|
+
creator_subclass.instance_methods.should include('i_should_be_a_scenario')
|
31
|
+
|
32
|
+
creator = creator_subclass.new(@space, @subject)
|
33
|
+
creator.i_should_be_a_scenario.should be_instance_of(Scenario)
|
34
|
+
end
|
24
35
|
end
|
25
36
|
|
26
37
|
describe StubCreator, ".new with block" do
|
@@ -45,6 +56,18 @@ describe StubCreator, ".new with block" do
|
|
45
56
|
@subject.baz.should == :baz_result
|
46
57
|
@subject.baz.should == :baz_result
|
47
58
|
end
|
59
|
+
|
60
|
+
it "clears out all methods from creator" do
|
61
|
+
creator_subclass = Class.new(StubCreator) do
|
62
|
+
def i_should_be_a_scenario
|
63
|
+
end
|
64
|
+
end
|
65
|
+
creator_subclass.instance_methods.should include('i_should_be_a_scenario')
|
66
|
+
|
67
|
+
creator_subclass.new(@space, @subject) do |m|
|
68
|
+
m.i_should_be_a_scenario.should be_instance_of(Scenario)
|
69
|
+
end
|
70
|
+
end
|
48
71
|
end
|
49
72
|
|
50
73
|
describe StubCreator, "#method_missing" do
|
data/lib/rr/creator.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
module RR
|
2
|
+
# RR::Creator is the superclass for all creators.
|
3
|
+
class Creator
|
4
|
+
def initialize(space, subject)
|
5
|
+
@space = space
|
6
|
+
@subject = subject
|
7
|
+
class << self
|
8
|
+
instance_methods.each do |m|
|
9
|
+
undef_method m unless m =~ /^__/
|
10
|
+
end
|
11
|
+
include self::InstanceMethods
|
12
|
+
end
|
13
|
+
yield(self) if block_given?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -14,26 +14,20 @@ module RR
|
|
14
14
|
# m.method2(arg1, arg2) # Do not allow method2 with arguments arg1 and arg2
|
15
15
|
# m.method3.with_no_args # Do not allow method3 with no arguments
|
16
16
|
# end
|
17
|
-
class DoNotAllowCreator
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
if args.empty?
|
31
|
-
scenario.with_any_args
|
32
|
-
else
|
33
|
-
scenario.with(*args)
|
17
|
+
class DoNotAllowCreator < Creator
|
18
|
+
module InstanceMethods
|
19
|
+
protected
|
20
|
+
def method_missing(method_name, *args, &returns)
|
21
|
+
double = @space.create_double(@subject, method_name)
|
22
|
+
scenario = @space.create_scenario(double)
|
23
|
+
if args.empty?
|
24
|
+
scenario.with_any_args
|
25
|
+
else
|
26
|
+
scenario.with(*args)
|
27
|
+
end
|
28
|
+
scenario.never.returns(&returns)
|
29
|
+
scenario
|
34
30
|
end
|
35
|
-
scenario.never.returns(&returns)
|
36
|
-
scenario
|
37
31
|
end
|
38
32
|
end
|
39
33
|
end
|
data/lib/rr/mock_creator.rb
CHANGED
@@ -12,21 +12,15 @@ module RR
|
|
12
12
|
# mock(subject) do |m|
|
13
13
|
# m.method_name(arg1, arg2) { return_value }
|
14
14
|
# end
|
15
|
-
class MockCreator
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
protected
|
25
|
-
def method_missing(method_name, *args, &returns)
|
26
|
-
double = @space.create_double(@subject, method_name)
|
27
|
-
scenario = @space.create_scenario(double)
|
28
|
-
scenario.with(*args).once.returns(&returns)
|
29
|
-
scenario
|
15
|
+
class MockCreator < Creator
|
16
|
+
module InstanceMethods
|
17
|
+
protected
|
18
|
+
def method_missing(method_name, *args, &returns)
|
19
|
+
double = @space.create_double(@subject, method_name)
|
20
|
+
scenario = @space.create_scenario(double)
|
21
|
+
scenario.with(*args).once.returns(&returns)
|
22
|
+
scenario
|
23
|
+
end
|
30
24
|
end
|
31
25
|
end
|
32
26
|
end
|
data/lib/rr/probe_creator.rb
CHANGED
@@ -21,22 +21,16 @@ module RR
|
|
21
21
|
#
|
22
22
|
# user = User.find('4')
|
23
23
|
# user.valid? # false
|
24
|
-
class ProbeCreator
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
def method_missing(method_name, *args, &after_call)
|
35
|
-
double = @space.create_double(@subject, method_name)
|
36
|
-
scenario = @space.create_scenario(double)
|
37
|
-
scenario.with(*args).once.implemented_by(double.original_method)
|
38
|
-
scenario.after_call(&after_call) if after_call
|
39
|
-
scenario
|
24
|
+
class ProbeCreator < Creator
|
25
|
+
module InstanceMethods
|
26
|
+
protected
|
27
|
+
def method_missing(method_name, *args, &after_call)
|
28
|
+
double = @space.create_double(@subject, method_name)
|
29
|
+
scenario = @space.create_scenario(double)
|
30
|
+
scenario.with(*args).once.implemented_by(double.original_method)
|
31
|
+
scenario.after_call(&after_call) if after_call
|
32
|
+
scenario
|
33
|
+
end
|
40
34
|
end
|
41
35
|
end
|
42
36
|
end
|
data/lib/rr/stub_creator.rb
CHANGED
@@ -12,24 +12,18 @@ module RR
|
|
12
12
|
# stub(subject) do |m|
|
13
13
|
# m.method_name(arg1, arg2) { return_value }
|
14
14
|
# end
|
15
|
-
class StubCreator
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
scenario = @space.create_scenario(double)
|
28
|
-
scenario.returns(&returns).any_number_of_times
|
29
|
-
if args.empty?
|
30
|
-
scenario.with_any_args
|
31
|
-
else
|
32
|
-
scenario.with(*args)
|
15
|
+
class StubCreator < Creator
|
16
|
+
module InstanceMethods
|
17
|
+
protected
|
18
|
+
def method_missing(method_name, *args, &returns)
|
19
|
+
double = @space.create_double(@subject, method_name)
|
20
|
+
scenario = @space.create_scenario(double)
|
21
|
+
scenario.returns(&returns).any_number_of_times
|
22
|
+
if args.empty?
|
23
|
+
scenario.with_any_args
|
24
|
+
else
|
25
|
+
scenario.with(*args)
|
26
|
+
end
|
33
27
|
end
|
34
28
|
end
|
35
29
|
end
|
data/lib/rr.rb
CHANGED
metadata
CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.3
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rr
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
6
|
+
version: 0.1.12
|
7
7
|
date: 2007-07-14 00:00:00 -07:00
|
8
8
|
summary: RR (Double Ruby) is a double framework that features a rich selection of double techniques and a terse syntax. http://xunitpatterns.com/Test%20Double.html
|
9
9
|
require_paths:
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- README
|
35
35
|
- lib/rr.rb
|
36
36
|
- lib/rr/scenario.rb
|
37
|
+
- lib/rr/creator.rb
|
37
38
|
- lib/rr/stub_creator.rb
|
38
39
|
- lib/rr/space.rb
|
39
40
|
- lib/rr/double.rb
|