caricature 0.7.5 → 0.7.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/README.rdoc +97 -97
  2. data/Rakefile +309 -310
  3. data/caricature.gemspec +123 -110
  4. data/lib/caricature/bacon/integration.rb +75 -75
  5. data/lib/caricature/bacon.rb +2 -2
  6. data/lib/caricature/clr/descriptor.rb +159 -159
  7. data/lib/caricature/clr/event_verification.rb +56 -56
  8. data/lib/caricature/clr/expectation.rb +100 -100
  9. data/lib/caricature/clr/isolation.rb +78 -78
  10. data/lib/caricature/clr/isolator.rb +252 -252
  11. data/lib/caricature/clr/messenger.rb +51 -49
  12. data/lib/caricature/clr/method_call_recorder.rb +96 -96
  13. data/lib/caricature/expectation.rb +1 -1
  14. data/lib/caricature/method_call_recorder.rb +3 -3
  15. data/lib/caricature/rspec/integration.rb +118 -118
  16. data/lib/caricature/version.rb +5 -5
  17. data/lib/caricature.rb +25 -25
  18. data/spec/bacon/integration/callback_spec.rb +156 -156
  19. data/spec/bacon/integration/clr_to_clr_spec.rb +325 -253
  20. data/spec/bacon/integration/event_spec.rb +97 -97
  21. data/spec/bacon/integration/indexer_spec.rb +27 -27
  22. data/spec/bacon/spec_helper.rb +4 -4
  23. data/spec/bacon/unit/descriptor_spec.rb +212 -212
  24. data/spec/bacon/unit/sword_spec.rb +39 -39
  25. data/spec/bacon/unit/verification_spec.rb +103 -103
  26. data/spec/bin/ClrModels.dll +0 -0
  27. data/spec/bin/ClrModels.dll.mdb +0 -0
  28. data/spec/fixtures/ExplodingCar.cs +56 -0
  29. data/spec/fixtures/ExposedChangedSubscriber.cs +26 -0
  30. data/spec/fixtures/ExposingWarrior.cs +58 -0
  31. data/spec/fixtures/IExplodingWarrior.cs +10 -0
  32. data/spec/fixtures/IExposing.cs +9 -0
  33. data/spec/fixtures/IExposingBridge.cs +9 -0
  34. data/spec/fixtures/IExposingWarrior.cs +8 -0
  35. data/spec/fixtures/IHaveAnIndexer.cs +8 -0
  36. data/spec/fixtures/IWarrior.cs +13 -0
  37. data/spec/fixtures/IWeapon.cs +9 -0
  38. data/spec/fixtures/IndexerCaller.cs +17 -0
  39. data/spec/fixtures/IndexerContained.cs +20 -0
  40. data/spec/fixtures/MyClassWithAStatic.cs +16 -0
  41. data/spec/fixtures/Ninja.cs +34 -0
  42. data/spec/fixtures/Samurai.cs +29 -0
  43. data/spec/fixtures/StaticCaller.cs +12 -0
  44. data/spec/fixtures/Sword.cs +16 -0
  45. data/spec/fixtures/SwordWithStatics.cs +19 -0
  46. data/spec/fixtures/clr_interaction.rb +61 -0
  47. data/spec/fixtures/dagger.rb +11 -0
  48. data/spec/fixtures/dagger_with_class_members.rb +11 -0
  49. data/spec/fixtures/sheath.rb +19 -0
  50. data/spec/fixtures/soldier.rb +29 -0
  51. data/spec/fixtures/soldier_with_class_members.rb +7 -0
  52. data/spec/fixtures/swift_cleanup_crew.rb +21 -0
  53. data/spec/fixtures/with_class_methods.rb +11 -0
  54. data/spec/{models → models.notused}/ClrModels.cs +241 -241
  55. data/spec/{models → models.notused}/ruby_models.rb +150 -150
  56. data/spec/rspec/integration/callback_spec.rb +156 -156
  57. data/spec/rspec/integration/clr_to_clr_spec.rb +254 -254
  58. data/spec/rspec/integration/clr_to_ruby_spec.rb +227 -227
  59. data/spec/rspec/integration/indexer_spec.rb +27 -27
  60. data/spec/rspec/integration/ruby_to_ruby_spec.rb +271 -271
  61. data/spec/rspec/spec_helper.rb +12 -12
  62. data/spec/rspec/unit/core_ext_spec.rb +87 -87
  63. data/spec/rspec/unit/descriptor_spec.rb +210 -210
  64. data/spec/rspec/unit/event_spec.rb +16 -16
  65. data/spec/rspec/unit/expectation_spec.rb +300 -300
  66. data/spec/rspec/unit/interop_spec.rb +29 -29
  67. data/spec/rspec/unit/isolation_spec.rb +86 -86
  68. data/spec/rspec/unit/isolator_spec.rb +219 -219
  69. data/spec/rspec/unit/messaging_spec.rb +310 -310
  70. data/spec/rspec/unit/method_call_spec.rb +342 -342
  71. data/spec/rspec/unit/sword_spec.rb +39 -39
  72. data/spec/rspec/unit/verification_spec.rb +103 -103
  73. data/spec/spec_helper.rb +16 -15
  74. metadata +42 -11
@@ -1,213 +1,213 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe "Caricature::TypeDescriptor" do
4
-
5
- before do
6
- @des = Caricature::TypeDescriptor.new :in_unit_test_for_class
7
- end
8
-
9
- it "should have a class_members method" do
10
- @des.should.respond_to?(:class_members)
11
- end
12
-
13
- it "should return an empty collection for the class members" do
14
- @des.class_members.should.be.empty
15
- end
16
-
17
- it "should have an instance members method" do
18
- @des.should.respond_to?(:instance_members)
19
- end
20
-
21
- it "should return an empty collection for the instance members" do
22
- @des.instance_members.should.be.empty
23
- end
24
-
25
- it "should raise a NotImplementedError for the initialize_instance_members method" do
26
- lambda { @des.initialize_instance_members_for Soldier }.should.raise NotImplementedError
27
- end
28
-
29
- it "should raise a NotImplementedError for the initialize_class_members method" do
30
- lambda { @des.initialize_class_members_for Soldier }.should.raise NotImplementedError
31
- end
32
-
33
- end
34
-
35
- describe "Caricature::MemberDescriptor" do
36
-
37
- it "should have a name" do
38
- des = Caricature::MemberDescriptor.new 'a name', 'a type'
39
- des.name.should.not.be.nil
40
- end
41
-
42
- it "should have the correct name" do
43
- des = Caricature::MemberDescriptor.new 'a name', 'a type'
44
- des.name.should.equal 'a name'
45
- end
46
-
47
- it "should have a return_type" do
48
- des = Caricature::MemberDescriptor.new 'a name', 'a type'
49
- des.return_type.should.not.be.nil
50
- end
51
-
52
- it "should have the correct return_type" do
53
- des = Caricature::MemberDescriptor.new 'a name', 'a type'
54
- des.return_type.should.equal 'a type'
55
- end
56
-
57
- it "should say it's an instance type" do
58
- des = Caricature::MemberDescriptor.new 'a name', 'a type'
59
- des.should.be.instance_member
60
- end
61
-
62
- it "should say it's not an instance type" do
63
- des = Caricature::MemberDescriptor.new 'a name', 'a type', false
64
- des.should.not.be.instance_member
65
- end
66
-
67
- end
68
-
69
- describe Caricature::ClrEventDescriptor.to_s do
70
-
71
- it "should have an event name" do
72
- des = Caricature::ClrEventDescriptor.new "EventName"
73
- des.event_name.should == "EventName"
74
- end
75
-
76
- it "should correctly identify when it's not an instance member" do
77
- des = Caricature::ClrEventDescriptor.new "EventName", false
78
- des.should.not.be.instance_member
79
- end
80
-
81
- end
82
-
83
- describe "Caricature::ClrInterfaceDescriptor" do
84
-
85
- describe "when collecting methods" do
86
-
87
- before do
88
- @des = Caricature::ClrInterfaceDescriptor.new ClrModels::IWeapon
89
- end
90
-
91
- it "should have 2 instance members" do
92
- @des.instance_members.size.should.equal 2
93
- end
94
-
95
- it "should contain only instance members" do
96
- result = true
97
- @des.instance_members.each do |mem|
98
- result = false unless mem.instance_member?
99
- end
100
-
101
- result.should.be.true
102
- end
103
-
104
- it "should have a damage instance member" do
105
- @des.instance_members.select { |mem| mem.name == "damage" }.should.not.be.empty
106
- end
107
-
108
- it "should correctly identify indexers" do
109
- des = Caricature::ClrInterfaceDescriptor.new ClrModels::IHaveAnIndexer
110
- des.instance_members.select { |mem| mem.name == "get_Item" }.should.not.be.empty
111
- end
112
-
113
- it "should correctly identify indexers" do
114
- des = Caricature::ClrInterfaceDescriptor.new ClrModels::IHaveAnIndexer
115
- des.instance_members.select { |mem| mem.name == "set_Item" }.should.not.be.empty
116
- end
117
- end
118
-
119
- describe "when collecting events" do
120
-
121
- before do
122
- @des = Caricature::ClrInterfaceDescriptor.new ClrModels::IExplodingWarrior
123
- end
124
-
125
- it "should have collected 2 events" do
126
- @des.events.size.should == 2
127
- end
128
-
129
- it "should have collected 2 instance events" do
130
- @des.events.all? { |ev| ev.instance_member? }.should.be.true?
131
- end
132
-
133
-
134
- end
135
-
136
- end
137
-
138
- describe "Caricature::ClrClassDescriptor" do
139
-
140
- describe "when collecting methods" do
141
-
142
- before do
143
- @des = Caricature::ClrClassDescriptor.new ClrModels::SwordWithStatics
144
- end
145
-
146
- it "should have 11 instance members" do
147
- @des.instance_members.size.should.equal 11
148
- end
149
-
150
- it "should have 5 static members" do
151
- @des.class_members.size.should.equal 5
152
- end
153
-
154
- it "should have a damage instance member" do
155
- @des.instance_members.select { |mem| mem.name == "damage" }.should.not.be.empty
156
- end
157
-
158
- it "should have a another method instance member" do
159
- @des.instance_members.select { |mem| mem.name == "another_method" }.should.not.be.empty
160
- end
161
-
162
- it "should correctly identify indexers" do
163
- des = Caricature::ClrClassDescriptor.new ClrModels::IndexerContained
164
- des.instance_members.select { |mem| mem.name == "get_Item" }.should.not.be.empty
165
- end
166
-
167
- it "should correctly identify indexers" do
168
- des = Caricature::ClrClassDescriptor.new ClrModels::IndexerContained
169
- des.instance_members.select { |mem| mem.name == "set_Item" }.should.not.be.empty
170
- end
171
- end
172
-
173
- describe "when collecting events" do
174
-
175
- before do
176
- @des = Caricature::ClrClassDescriptor.new ClrModels::ExposingWarrior
177
- end
178
-
179
- it "should have 2 instance events" do
180
- @des.events.size.should == 2
181
- end
182
-
183
- it "should should have 1 class event" do
184
- @des.class_events.size.should == 1
185
- end
186
-
187
- end
188
-
189
- end
190
-
191
- describe "Caricature::RubyObjectDescriptor" do
192
-
193
- before do
194
- @des = Caricature::RubyObjectDescriptor.new DaggerWithClassMembers
195
- end
196
-
197
- it "should have 2 instance members" do
198
- @des.instance_members.size.should.equal 2
199
- end
200
-
201
- it "should have a damage instance member" do
202
- @des.instance_members.select { |mem| mem.name == "damage" }.should.not.be.empty
203
- end
204
-
205
- it "should have 1 class member" do
206
- @des.class_members.size.should.equal 1
207
- end
208
-
209
- it "should have a class_name class member" do
210
- @des.class_members.select { |mem| mem.name == "class_name" }.should.not.be.empty
211
- end
212
-
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+
3
+ describe "Caricature::TypeDescriptor" do
4
+
5
+ before do
6
+ @des = Caricature::TypeDescriptor.new :in_unit_test_for_class
7
+ end
8
+
9
+ it "should have a class_members method" do
10
+ @des.should.respond_to?(:class_members)
11
+ end
12
+
13
+ it "should return an empty collection for the class members" do
14
+ @des.class_members.should.be.empty
15
+ end
16
+
17
+ it "should have an instance members method" do
18
+ @des.should.respond_to?(:instance_members)
19
+ end
20
+
21
+ it "should return an empty collection for the instance members" do
22
+ @des.instance_members.should.be.empty
23
+ end
24
+
25
+ it "should raise a NotImplementedError for the initialize_instance_members method" do
26
+ lambda { @des.initialize_instance_members_for Soldier }.should.raise NotImplementedError
27
+ end
28
+
29
+ it "should raise a NotImplementedError for the initialize_class_members method" do
30
+ lambda { @des.initialize_class_members_for Soldier }.should.raise NotImplementedError
31
+ end
32
+
33
+ end
34
+
35
+ describe "Caricature::MemberDescriptor" do
36
+
37
+ it "should have a name" do
38
+ des = Caricature::MemberDescriptor.new 'a name', 'a type'
39
+ des.name.should.not.be.nil
40
+ end
41
+
42
+ it "should have the correct name" do
43
+ des = Caricature::MemberDescriptor.new 'a name', 'a type'
44
+ des.name.should.equal 'a name'
45
+ end
46
+
47
+ it "should have a return_type" do
48
+ des = Caricature::MemberDescriptor.new 'a name', 'a type'
49
+ des.return_type.should.not.be.nil
50
+ end
51
+
52
+ it "should have the correct return_type" do
53
+ des = Caricature::MemberDescriptor.new 'a name', 'a type'
54
+ des.return_type.should.equal 'a type'
55
+ end
56
+
57
+ it "should say it's an instance type" do
58
+ des = Caricature::MemberDescriptor.new 'a name', 'a type'
59
+ des.should.be.instance_member
60
+ end
61
+
62
+ it "should say it's not an instance type" do
63
+ des = Caricature::MemberDescriptor.new 'a name', 'a type', false
64
+ des.should.not.be.instance_member
65
+ end
66
+
67
+ end
68
+
69
+ describe Caricature::ClrEventDescriptor.to_s do
70
+
71
+ it "should have an event name" do
72
+ des = Caricature::ClrEventDescriptor.new "EventName"
73
+ des.event_name.should == "EventName"
74
+ end
75
+
76
+ it "should correctly identify when it's not an instance member" do
77
+ des = Caricature::ClrEventDescriptor.new "EventName", false
78
+ des.should.not.be.instance_member
79
+ end
80
+
81
+ end
82
+
83
+ describe "Caricature::ClrInterfaceDescriptor" do
84
+
85
+ describe "when collecting methods" do
86
+
87
+ before do
88
+ @des = Caricature::ClrInterfaceDescriptor.new ClrModels::IWeapon
89
+ end
90
+
91
+ it "should have 2 instance members" do
92
+ @des.instance_members.size.should.equal 2
93
+ end
94
+
95
+ it "should contain only instance members" do
96
+ result = true
97
+ @des.instance_members.each do |mem|
98
+ result = false unless mem.instance_member?
99
+ end
100
+
101
+ result.should.be.true
102
+ end
103
+
104
+ it "should have a damage instance member" do
105
+ @des.instance_members.select { |mem| mem.name == "damage" }.should.not.be.empty
106
+ end
107
+
108
+ it "should correctly identify indexers" do
109
+ des = Caricature::ClrInterfaceDescriptor.new ClrModels::IHaveAnIndexer
110
+ des.instance_members.select { |mem| mem.name == "get_Item" }.should.not.be.empty
111
+ end
112
+
113
+ it "should correctly identify indexers" do
114
+ des = Caricature::ClrInterfaceDescriptor.new ClrModels::IHaveAnIndexer
115
+ des.instance_members.select { |mem| mem.name == "set_Item" }.should.not.be.empty
116
+ end
117
+ end
118
+
119
+ describe "when collecting events" do
120
+
121
+ before do
122
+ @des = Caricature::ClrInterfaceDescriptor.new ClrModels::IExplodingWarrior
123
+ end
124
+
125
+ it "should have collected 2 events" do
126
+ @des.events.size.should == 2
127
+ end
128
+
129
+ it "should have collected 2 instance events" do
130
+ @des.events.all? { |ev| ev.instance_member? }.should.be.true?
131
+ end
132
+
133
+
134
+ end
135
+
136
+ end
137
+
138
+ describe "Caricature::ClrClassDescriptor" do
139
+
140
+ describe "when collecting methods" do
141
+
142
+ before do
143
+ @des = Caricature::ClrClassDescriptor.new ClrModels::SwordWithStatics
144
+ end
145
+
146
+ it "should have 11 instance members" do
147
+ @des.instance_members.size.should.equal 11
148
+ end
149
+
150
+ it "should have 5 static members" do
151
+ @des.class_members.size.should.equal 5
152
+ end
153
+
154
+ it "should have a damage instance member" do
155
+ @des.instance_members.select { |mem| mem.name == "damage" }.should.not.be.empty
156
+ end
157
+
158
+ it "should have a another method instance member" do
159
+ @des.instance_members.select { |mem| mem.name == "another_method" }.should.not.be.empty
160
+ end
161
+
162
+ it "should correctly identify indexers" do
163
+ des = Caricature::ClrClassDescriptor.new ClrModels::IndexerContained
164
+ des.instance_members.select { |mem| mem.name == "get_Item" }.should.not.be.empty
165
+ end
166
+
167
+ it "should correctly identify indexers" do
168
+ des = Caricature::ClrClassDescriptor.new ClrModels::IndexerContained
169
+ des.instance_members.select { |mem| mem.name == "set_Item" }.should.not.be.empty
170
+ end
171
+ end
172
+
173
+ describe "when collecting events" do
174
+
175
+ before do
176
+ @des = Caricature::ClrClassDescriptor.new ClrModels::ExposingWarrior
177
+ end
178
+
179
+ it "should have 2 instance events" do
180
+ @des.events.size.should == 2
181
+ end
182
+
183
+ it "should should have 1 class event" do
184
+ @des.class_events.size.should == 1
185
+ end
186
+
187
+ end
188
+
189
+ end
190
+
191
+ describe "Caricature::RubyObjectDescriptor" do
192
+
193
+ before do
194
+ @des = Caricature::RubyObjectDescriptor.new DaggerWithClassMembers
195
+ end
196
+
197
+ it "should have 2 instance members" do
198
+ @des.instance_members.size.should.equal 2
199
+ end
200
+
201
+ it "should have a damage instance member" do
202
+ @des.instance_members.select { |mem| mem.name == "damage" }.should.not.be.empty
203
+ end
204
+
205
+ it "should have 1 class member" do
206
+ @des.class_members.size.should.equal 1
207
+ end
208
+
209
+ it "should have a class_name class member" do
210
+ @des.class_members.select { |mem| mem.name == "class_name" }.should.not.be.empty
211
+ end
212
+
213
213
  end
@@ -1,40 +1,40 @@
1
- require File.dirname(__FILE__) + "/../spec_helper.rb"
2
-
3
- class ClrModels::Sword
4
-
5
- def to_s
6
- "<ClrModels::Sword object_id: #{object_id} >"
7
- end
8
- alias_method :inspect, :to_s
9
-
10
- end
11
-
12
- describe "ClrModels::Sword" do
13
-
14
- before do
15
- @warrior = Caricature::Isolation.for ClrModels::IWarrior
16
- end
17
-
18
- it "should call survive_attack on the mock" do
19
- @warrior.when_receiving(:survive_attack_with).return(5)
20
-
21
- sword = ClrModels::Sword.new
22
- sword.attack(@warrior).should.equal 5
23
-
24
- @warrior.did_receive?(:survive_attack_with).should.be.successful
25
- end
26
-
27
- it "should return different results when expectation is defined with arguments" do
28
- sword1 = ClrModels::Sword.new
29
- sword2 = ClrModels::Sword.new
30
-
31
- @warrior.when_receiving(:survive_attack_with).with(:any).return(5)
32
- @warrior.when_receiving(:survive_attack_with).with(sword2).return(15)
33
-
34
- sword1.attack(@warrior).should.equal 5
35
- sword2.attack(@warrior).should.equal 15
36
-
37
- @warrior.did_receive?(:survive_attack_with).with(sword2).should.be.successful
38
- end
39
-
1
+ require File.dirname(__FILE__) + "/../spec_helper.rb"
2
+
3
+ class ClrModels::Sword
4
+
5
+ def to_s
6
+ "<ClrModels::Sword object_id: #{object_id} >"
7
+ end
8
+ alias_method :inspect, :to_s
9
+
10
+ end
11
+
12
+ describe "ClrModels::Sword" do
13
+
14
+ before do
15
+ @warrior = Caricature::Isolation.for ClrModels::IWarrior
16
+ end
17
+
18
+ it "should call survive_attack on the mock" do
19
+ @warrior.when_receiving(:survive_attack_with).return(5)
20
+
21
+ sword = ClrModels::Sword.new
22
+ sword.attack(@warrior).should.equal 5
23
+
24
+ @warrior.did_receive?(:survive_attack_with).should.be.successful
25
+ end
26
+
27
+ it "should return different results when expectation is defined with arguments" do
28
+ sword1 = ClrModels::Sword.new
29
+ sword2 = ClrModels::Sword.new
30
+
31
+ @warrior.when_receiving(:survive_attack_with).with(:any).return(5)
32
+ @warrior.when_receiving(:survive_attack_with).with(sword2).return(15)
33
+
34
+ sword1.attack(@warrior).should.equal 5
35
+ sword2.attack(@warrior).should.equal 15
36
+
37
+ @warrior.did_receive?(:survive_attack_with).with(sword2).should.be.successful
38
+ end
39
+
40
40
  end