bunraku 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,34 @@
1
+
2
+ require "bunraku"
3
+
4
+ describe "Bunraku Context Def" do
5
+ it "should have no roles" do
6
+ Module.new {
7
+ context :MyContext do
8
+ end
9
+ c = const_get(:MyContext).new
10
+ }
11
+ end
12
+
13
+ it "should have a role" do
14
+ Module.new {
15
+ context :MyContext do
16
+ role :MyRole1 do
17
+ end
18
+ end
19
+ c = const_get(:MyContext).new
20
+ }
21
+ end
22
+
23
+ it "should have roles" do
24
+ Module.new {
25
+ context :MyContext do
26
+ role :MyRole1 do
27
+ end
28
+ role :MyRole2 do
29
+ end
30
+ end
31
+ c = const_get(:MyContext).new
32
+ }
33
+ end
34
+ end
@@ -0,0 +1,127 @@
1
+
2
+ module InteractionSpec
3
+ class Equality
4
+ as_context
5
+
6
+ def initialize
7
+ @busy = false
8
+ end
9
+ attr_accessor :busy
10
+
11
+ class ActorA
12
+ as_role
13
+ def fire
14
+ core.fire()
15
+ unless context.busy
16
+ context.busy = true
17
+ context.ActorBs.fire
18
+ context.busy = false
19
+ end
20
+ end
21
+ override :fire
22
+ end
23
+ class ActorB
24
+ as_role
25
+ def fire
26
+ core.fire()
27
+ unless context.busy
28
+ context.busy = true
29
+ context.ActorAs.fire
30
+ context.busy = false
31
+ end
32
+ end
33
+ override :fire
34
+ end
35
+ end
36
+
37
+ class Trigger
38
+ as_context
39
+ class ActorA
40
+ as_role
41
+ def fire
42
+ core.fire()
43
+ context.ActorBs.fire
44
+ end
45
+ override :fire
46
+ end
47
+ class ActorB
48
+ as_role
49
+ end
50
+ end
51
+
52
+ class Core
53
+ def initialize
54
+ @fired = false
55
+ end
56
+ def fire
57
+ @fired = true
58
+ end
59
+ def fired?
60
+ @fired
61
+ end
62
+ end
63
+ end
64
+
65
+ describe "Single Equality" do
66
+ before do
67
+ # core1 <-> core2
68
+ @equality = InteractionSpec::Equality.new
69
+ @core1 = InteractionSpec::Core.new
70
+ @core2 = InteractionSpec::Core.new
71
+ @equality.ActorA.bind(@core1)
72
+ @equality.ActorB.bind(@core2)
73
+ end
74
+
75
+ it "should be fired when ActorA fired" do
76
+ @core1.fire
77
+ @core1.should be_fired
78
+ @core2.should be_fired
79
+ end
80
+ end
81
+
82
+ describe "Cycle Equality" do
83
+ before do
84
+ # core1 <-> core2 <-> core3 <-> core1
85
+ @equality1 = InteractionSpec::Equality.new
86
+ @equality2 = InteractionSpec::Equality.new
87
+ @equality3 = InteractionSpec::Equality.new
88
+ @core1 = InteractionSpec::Core.new
89
+ @core2 = InteractionSpec::Core.new
90
+ @core3 = InteractionSpec::Core.new
91
+ @equality1.ActorA.bind(@core1)
92
+ @equality1.ActorB.bind(@core2)
93
+ @equality2.ActorA.bind(@core2)
94
+ @equality2.ActorB.bind(@core3)
95
+ @equality2.ActorA.bind(@core3)
96
+ @equality2.ActorB.bind(@core1)
97
+ end
98
+
99
+ it "should be fired when ActorA fired" do
100
+ @core1.fire
101
+ @core1.should be_fired
102
+ @core2.should be_fired
103
+ @core3.should be_fired
104
+ end
105
+ end
106
+
107
+ describe "Part Equality" do
108
+ before do
109
+ # core1 <-> core2 <-> core3
110
+ @equality1 = InteractionSpec::Equality.new
111
+ @equality2 = InteractionSpec::Equality.new
112
+ @core1 = InteractionSpec::Core.new
113
+ @core2 = InteractionSpec::Core.new
114
+ @core3 = InteractionSpec::Core.new
115
+ @equality1.ActorA.bind(@core1)
116
+ @equality1.ActorB.bind(@core2)
117
+ @equality2.ActorA.bind(@core2)
118
+ @equality2.ActorB.bind(@core3)
119
+ end
120
+
121
+ it "should be fired when ActorA fired" do
122
+ @core1.fire
123
+ @core1.should be_fired
124
+ @core2.should be_fired
125
+ # @core3.should be_fired
126
+ end
127
+ end
@@ -0,0 +1,44 @@
1
+ require "bunraku"
2
+
3
+ describe "Roles with requires" do
4
+ setup do
5
+ module RequiresSpec
6
+ class MyContext
7
+ as_context
8
+ class MyRole1
9
+ as_role
10
+ requires do |req|
11
+ req.method? "m1"
12
+ end
13
+ end
14
+ class MyRole2
15
+ as_role
16
+ def m2()
17
+ context.MyRole1.m1
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ it "should bind object when requirement passed" do
25
+ c = RequiresSpec::MyContext.new
26
+ o1 = Object.new
27
+ o2 = Object.new
28
+ def o1.m1()
29
+ "m1"
30
+ end
31
+
32
+ c.MyRole1.bind(o1)
33
+ c.MyRole2.bind(o2)
34
+ o2.m2().should == "m1"
35
+ end
36
+
37
+ it "should not bind object when requirement not passed " do
38
+ c = RequiresSpec::MyContext.new
39
+ o1 = Object.new
40
+ proc {
41
+ c.MyRole1.bind(o1)
42
+ }.should raise_error(Bunraku::BindRoleError)
43
+ end
44
+ end
@@ -0,0 +1,116 @@
1
+ require "bunraku"
2
+
3
+ module Roles2Spec
4
+ class Human
5
+ def initialize name
6
+ @name = name
7
+ end
8
+ attr :name
9
+ end
10
+
11
+ context :City do
12
+ role :Civilian do
13
+ def declare()
14
+ name + " dime"
15
+ end
16
+ end
17
+
18
+ role :Gatherer do
19
+ def gather
20
+ context.Civilian.declare
21
+ end
22
+ def gather_all
23
+ context.Civilians.declare
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+
30
+ describe "Civilian2", :shared => true do
31
+ it "should declare tax" do
32
+ @first_civilian.declare.should == "A dime"
33
+ end
34
+ end
35
+
36
+ describe "Gatherer2", :shared => true do
37
+ it "should gather tax from the first civilian" do
38
+ @gatherer.gather.should == "A dime"
39
+ end
40
+
41
+ it "should gather tax from all civilians" do
42
+ @gatherer.gather_all.should == @all_taxes
43
+ end
44
+ end
45
+
46
+
47
+ describe "City2 that has a Civilian" do
48
+ before do
49
+ @city = Roles2Spec::City.new
50
+ @first_civilian = Roles2Spec::Human.new "A"
51
+ @city.Civilian.bind(@first_civilian)
52
+
53
+ @all_taxes = ["A dime"]
54
+ end
55
+
56
+ it_should_behave_like "Civilian2"
57
+ end
58
+
59
+ describe "City2, that has a Civilian and a Gatherer," do
60
+ before do
61
+ @city = Roles2Spec::City.new
62
+ @first_civilian = Roles2Spec::Human.new "A"
63
+ @city.Civilian.bind(@first_civilian)
64
+ @gatherer = Roles2Spec::Human.new "G"
65
+ @city.Gatherer.bind(@gatherer)
66
+
67
+ @all_taxes = ["A dime"]
68
+ end
69
+
70
+ it_should_behave_like "Civilian2"
71
+ it_should_behave_like "Gatherer2"
72
+ end
73
+
74
+ describe "City2, that has Civilians and a Gatherer," do
75
+ before do
76
+ @city = Roles2Spec::City.new
77
+ @first_civilian = Roles2Spec::Human.new "A"
78
+ @city.Civilian.bind(@first_civilian)
79
+ @second_civilian = Roles2Spec::Human.new "B"
80
+ @city.Civilian.bind(@second_civilian)
81
+ @third_civilian = Roles2Spec::Human.new "C"
82
+ @city.Civilian.bind(@third_civilian)
83
+ @gatherer = Roles2Spec::Human.new "G"
84
+ @city.Gatherer.bind(@gatherer)
85
+
86
+ @all_taxes = ["A dime", "B dime", "C dime"]
87
+ end
88
+
89
+ it_should_behave_like "Civilian2"
90
+ it_should_behave_like "Gatherer2"
91
+ end
92
+
93
+
94
+
95
+ describe "City2, that has Civilians and a Gatherer who is also Civilian," do
96
+ before do
97
+ @city = Roles2Spec::City.new
98
+ @first_civilian = Roles2Spec::Human.new "A"
99
+ @city.Civilian.bind(@first_civilian)
100
+ @second_civilian = Roles2Spec::Human.new "B"
101
+ @city.Civilian.bind(@second_civilian)
102
+ @third_civilian = Roles2Spec::Human.new "C"
103
+ @city.Civilian.bind(@third_civilian)
104
+ @gatherer = Roles2Spec::Human.new "G"
105
+ @city.Civilian.bind(@gatherer)
106
+ @city.Gatherer.bind(@gatherer)
107
+
108
+ @all_taxes = ["A dime", "B dime", "C dime", "G dime"]
109
+ end
110
+
111
+ it_should_behave_like "Civilian2"
112
+ it_should_behave_like "Gatherer2"
113
+ end
114
+
115
+
116
+
@@ -0,0 +1,120 @@
1
+ require "bunraku"
2
+
3
+ module RolesSpec
4
+ class Human
5
+ def initialize name
6
+ @name = name
7
+ end
8
+ attr :name
9
+ end
10
+
11
+ class City
12
+ as_context
13
+
14
+ class Civilian
15
+ as_role
16
+ def declare()
17
+ name + " dime"
18
+ end
19
+ end
20
+
21
+ class Gatherer
22
+ as_role
23
+ def gather
24
+ context.Civilian.declare
25
+ end
26
+ def gather_all
27
+ context.Civilians.declare
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+
34
+ describe "Civilian", :shared => true do
35
+ it "should declare tax" do
36
+ @first_civilian.declare.should == "A dime"
37
+ end
38
+ end
39
+
40
+ describe "Gatherer", :shared => true do
41
+ it "should gather tax from the first civilian" do
42
+ @gatherer.gather.should == "A dime"
43
+ end
44
+
45
+ it "should gather tax from all civilians" do
46
+ @gatherer.gather_all.should == @all_taxes
47
+ end
48
+ end
49
+
50
+
51
+ describe "City that has a Civilian" do
52
+ before do
53
+ @city = RolesSpec::City.new
54
+ @first_civilian = RolesSpec::Human.new "A"
55
+ @city.Civilian.bind(@first_civilian)
56
+
57
+ @all_taxes = ["A dime"]
58
+ end
59
+
60
+ it_should_behave_like "Civilian"
61
+ end
62
+
63
+ describe "City, that has a Civilian and a Gatherer," do
64
+ before do
65
+ @city = RolesSpec::City.new
66
+ @first_civilian = RolesSpec::Human.new "A"
67
+ @city.Civilian.bind(@first_civilian)
68
+ @gatherer = RolesSpec::Human.new "G"
69
+ @city.Gatherer.bind(@gatherer)
70
+
71
+ @all_taxes = ["A dime"]
72
+ end
73
+
74
+ it_should_behave_like "Civilian"
75
+ it_should_behave_like "Gatherer"
76
+ end
77
+
78
+ describe "City, that has Civilians and a Gatherer," do
79
+ before do
80
+ @city = RolesSpec::City.new
81
+ @first_civilian = RolesSpec::Human.new "A"
82
+ @city.Civilian.bind(@first_civilian)
83
+ @second_civilian = RolesSpec::Human.new "B"
84
+ @city.Civilian.bind(@second_civilian)
85
+ @third_civilian = RolesSpec::Human.new "C"
86
+ @city.Civilian.bind(@third_civilian)
87
+ @gatherer = RolesSpec::Human.new "G"
88
+ @city.Gatherer.bind(@gatherer)
89
+
90
+ @all_taxes = ["A dime", "B dime", "C dime"]
91
+ end
92
+
93
+ it_should_behave_like "Civilian"
94
+ it_should_behave_like "Gatherer"
95
+ end
96
+
97
+
98
+
99
+ describe "City, that has Civilians and a Gatherer who is also Civilian," do
100
+ before do
101
+ @city = RolesSpec::City.new
102
+ @first_civilian = RolesSpec::Human.new "A"
103
+ @city.Civilian.bind(@first_civilian)
104
+ @second_civilian = RolesSpec::Human.new "B"
105
+ @city.Civilian.bind(@second_civilian)
106
+ @third_civilian = RolesSpec::Human.new "C"
107
+ @city.Civilian.bind(@third_civilian)
108
+ @gatherer = RolesSpec::Human.new "G"
109
+ @city.Civilian.bind(@gatherer)
110
+ @city.Gatherer.bind(@gatherer)
111
+
112
+ @all_taxes = ["A dime", "B dime", "C dime", "G dime"]
113
+ end
114
+
115
+ it_should_behave_like "Civilian"
116
+ it_should_behave_like "Gatherer"
117
+ end
118
+
119
+
120
+
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestBunraku < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end