caricature 0.7.2 → 0.7.5

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/README.rdoc +97 -97
  2. data/Rakefile +310 -310
  3. data/caricature.gemspec +110 -106
  4. data/lib/caricature.rb +3 -1
  5. data/lib/caricature/bacon.rb +2 -2
  6. data/lib/caricature/bacon/integration.rb +75 -55
  7. data/lib/caricature/clr.rb +4 -3
  8. data/lib/caricature/clr/aspnet_mvc.rb +3 -3
  9. data/lib/caricature/clr/descriptor.rb +106 -39
  10. data/lib/caricature/clr/event_verification.rb +57 -0
  11. data/lib/caricature/clr/expectation.rb +101 -0
  12. data/lib/caricature/clr/isolation.rb +49 -13
  13. data/lib/caricature/clr/isolator.rb +141 -5
  14. data/lib/caricature/clr/messenger.rb +6 -0
  15. data/lib/caricature/clr/method_call_recorder.rb +97 -0
  16. data/lib/caricature/core_ext.rb +11 -0
  17. data/lib/{core_ext → caricature/core_ext}/array.rb +0 -0
  18. data/lib/{core_ext → caricature/core_ext}/class.rb +0 -0
  19. data/lib/{core_ext → caricature/core_ext}/hash.rb +0 -0
  20. data/lib/{core_ext → caricature/core_ext}/module.rb +0 -0
  21. data/lib/{core_ext → caricature/core_ext}/object.rb +0 -0
  22. data/lib/{core_ext → caricature/core_ext}/string.rb +0 -0
  23. data/lib/{core_ext → caricature/core_ext}/system/string.rb +0 -0
  24. data/lib/{core_ext → caricature/core_ext}/system/type.rb +6 -0
  25. data/lib/caricature/expectation.rb +108 -66
  26. data/lib/caricature/isolator.rb +3 -3
  27. data/lib/caricature/method_call_recorder.rb +32 -4
  28. data/lib/caricature/rspec/integration.rb +118 -77
  29. data/lib/caricature/version.rb +5 -5
  30. data/spec/bacon/integration/callback_spec.rb +156 -156
  31. data/spec/bacon/integration/clr_to_clr_spec.rb +1 -2
  32. data/spec/bacon/integration/event_spec.rb +98 -0
  33. data/spec/bacon/integration/indexer_spec.rb +1 -1
  34. data/spec/bacon/spec_helper.rb +4 -4
  35. data/spec/bacon/unit/descriptor_spec.rb +95 -42
  36. data/spec/bacon/unit/expectation_spec.rb +2 -2
  37. data/spec/bacon/unit/interop_spec.rb +1 -14
  38. data/spec/bacon/unit/isolation_spec.rb +1 -1
  39. data/spec/bacon/unit/isolator_spec.rb +5 -5
  40. data/spec/bin/ClrModels.dll +0 -0
  41. data/spec/models/ClrModels.cs +32 -8
  42. data/spec/models/ruby_models.rb +150 -150
  43. data/spec/rspec/integration/callback_spec.rb +156 -156
  44. data/spec/rspec/integration/indexer_spec.rb +1 -1
  45. data/spec/rspec/spec_helper.rb +12 -6
  46. data/spec/rspec/unit/descriptor_spec.rb +93 -42
  47. data/spec/rspec/unit/event_spec.rb +17 -0
  48. data/spec/rspec/unit/interop_spec.rb +0 -13
  49. data/spec/spec_helper.rb +14 -14
  50. metadata +20 -22
  51. data/lib/core_ext/core_ext.rb +0 -8
  52. data/spec/bin/ClrModels.dll.mdb +0 -0
@@ -1,151 +1,151 @@
1
- class Soldier
2
-
3
- def initialize
4
- @life = 10
5
- end
6
-
7
- def name
8
- "Tommy Boy"
9
- end
10
-
11
- def to_s
12
- "I'm a soldier"
13
- end
14
-
15
- def attack(target, weapon)
16
- weapon.attack(target)
17
- end
18
-
19
- def is_killed_by?(weapon)
20
- weapon.damage > 3
21
- end
22
-
23
- def survive_attack_with(weapon)
24
- @life - weapon.damage
25
- end
26
-
27
- end
28
-
29
- class SoldierWithClassMembers
30
- def initialize
31
- @life = 10
32
- end
33
- def name
34
- "Tommy Boy"
35
- end
36
- def to_s
37
- "I'm a soldier"
38
- end
39
- def attack(target, weapon)
40
- weapon.attack(target)
41
- end
42
- def is_killed_by?(weapon)
43
- weapon.damage > 3
44
- end
45
- def survive_attack_with(weapon)
46
- @life - weapon.damage
47
- end
48
- def self.class_name
49
- "DaggerWithClassMembers"
50
- end
51
- end
52
-
53
- class Dagger
54
-
55
- def damage
56
- 2
57
- end
58
-
59
- def attack(target)
60
- target.survive_attack_with self
61
- end
62
-
63
-
64
- end
65
-
66
- class DaggerWithClassMembers
67
- def damage
68
- 2
69
- end
70
- def attack(target)
71
- target.survive_attack_with self
72
- end
73
- def self.class_name
74
- "DaggerWithClassMembers"
75
- end
76
- end
77
-
78
- class WithClassMethods
79
-
80
- def hello_world
81
- "Hello World!"
82
- end
83
-
84
- def self.good_bye_world
85
- "Goodbye world!"
86
- end
87
-
88
- end
89
-
90
- class Sheath
91
- attr_reader :dagger
92
-
93
- def initialize(dagger)
94
- @dagger = dagger
95
- end
96
-
97
- def insert(dagger)
98
- raise "There is already a dagger in here" if @dagger
99
- @dagger = dagger
100
- end
101
-
102
- def draw
103
- raise "Dagger is nowhere to be found" unless @dagger
104
- d = @dagger
105
- @dagger = nil
106
- d
107
- end
108
- end
109
-
110
- if defined? IRONRUBY_VERSION
111
-
112
- module Caricature
113
-
114
- module InterfaceIncludingModule
115
- include ClrModels::IWarrior
116
- end
117
-
118
- module PureRubyModule
119
-
120
- end
121
-
122
- module RubyModuleIncludingModule
123
- include PureRubyModule
124
- end
125
-
126
- module InterfaceUpTheWazoo
127
- include InterfaceIncludingModule
128
- end
129
-
130
- class InterfaceIncludingClass
131
- include ClrModels::IWarrior
132
- end
133
-
134
- class SubClassingClrClass < ClrModels::Ninja
135
-
136
- end
137
-
138
- class InterfaceUpTheWazooClass
139
- include InterfaceUpTheWazoo
140
- end
141
-
142
- class SubclassingRubyClass < Soldier
143
-
144
- end
145
-
146
- class ModuleIncludingClass
147
- include RubyModuleIncludingModule
148
- end
149
- end
150
-
1
+ class Soldier
2
+
3
+ def initialize
4
+ @life = 10
5
+ end
6
+
7
+ def name
8
+ "Tommy Boy"
9
+ end
10
+
11
+ def to_s
12
+ "I'm a soldier"
13
+ end
14
+
15
+ def attack(target, weapon)
16
+ weapon.attack(target)
17
+ end
18
+
19
+ def is_killed_by?(weapon)
20
+ weapon.damage > 3
21
+ end
22
+
23
+ def survive_attack_with(weapon)
24
+ @life - weapon.damage
25
+ end
26
+
27
+ end
28
+
29
+ class SoldierWithClassMembers
30
+ def initialize
31
+ @life = 10
32
+ end
33
+ def name
34
+ "Tommy Boy"
35
+ end
36
+ def to_s
37
+ "I'm a soldier"
38
+ end
39
+ def attack(target, weapon)
40
+ weapon.attack(target)
41
+ end
42
+ def is_killed_by?(weapon)
43
+ weapon.damage > 3
44
+ end
45
+ def survive_attack_with(weapon)
46
+ @life - weapon.damage
47
+ end
48
+ def self.class_name
49
+ "DaggerWithClassMembers"
50
+ end
51
+ end
52
+
53
+ class Dagger
54
+
55
+ def damage
56
+ 2
57
+ end
58
+
59
+ def attack(target)
60
+ target.survive_attack_with self
61
+ end
62
+
63
+
64
+ end
65
+
66
+ class DaggerWithClassMembers
67
+ def damage
68
+ 2
69
+ end
70
+ def attack(target)
71
+ target.survive_attack_with self
72
+ end
73
+ def self.class_name
74
+ "DaggerWithClassMembers"
75
+ end
76
+ end
77
+
78
+ class WithClassMethods
79
+
80
+ def hello_world
81
+ "Hello World!"
82
+ end
83
+
84
+ def self.good_bye_world
85
+ "Goodbye world!"
86
+ end
87
+
88
+ end
89
+
90
+ class Sheath
91
+ attr_reader :dagger
92
+
93
+ def initialize(dagger)
94
+ @dagger = dagger
95
+ end
96
+
97
+ def insert(dagger)
98
+ raise "There is already a dagger in here" if @dagger
99
+ @dagger = dagger
100
+ end
101
+
102
+ def draw
103
+ raise "Dagger is nowhere to be found" unless @dagger
104
+ d = @dagger
105
+ @dagger = nil
106
+ d
107
+ end
108
+ end
109
+
110
+ if defined? IRONRUBY_VERSION
111
+
112
+ module Caricature
113
+
114
+ module InterfaceIncludingModule
115
+ include ClrModels::IWarrior
116
+ end
117
+
118
+ module PureRubyModule
119
+
120
+ end
121
+
122
+ module RubyModuleIncludingModule
123
+ include PureRubyModule
124
+ end
125
+
126
+ module InterfaceUpTheWazoo
127
+ include InterfaceIncludingModule
128
+ end
129
+
130
+ class InterfaceIncludingClass
131
+ include ClrModels::IWarrior
132
+ end
133
+
134
+ class SubClassingClrClass < ClrModels::Ninja
135
+
136
+ end
137
+
138
+ class InterfaceUpTheWazooClass
139
+ include InterfaceUpTheWazoo
140
+ end
141
+
142
+ class SubclassingRubyClass < Soldier
143
+
144
+ end
145
+
146
+ class ModuleIncludingClass
147
+ include RubyModuleIncludingModule
148
+ end
149
+ end
150
+
151
151
  end
@@ -1,157 +1,157 @@
1
- require File.dirname(__FILE__) + "/../spec_helper"
2
-
3
- describe "Callbacks on expectations" do
4
-
5
- describe "CLR to CLR interactions" do
6
-
7
- describe "when isolating CLR interfaces" do
8
-
9
- before do
10
- @ninja = ClrModels::Ninja.new
11
- @weapon = Caricature::Isolation.for(ClrModels::IWeapon)
12
- end
13
-
14
- it "should execute the callback when the expectation is invoked" do
15
- ninja = ClrModels::Ninja.new
16
- cnt = 0
17
- @weapon.when_receiving(:attack).with(:any) do |*args|
18
- cnt += 1
19
- end
20
- @ninja.attack ninja, @weapon
21
-
22
- cnt.should == 1
23
- end
24
-
25
- end
26
-
27
- describe "when isolating CLR classes" do
28
-
29
- before do
30
- @ninja = ClrModels::Ninja.new
31
- @weapon = Caricature::Isolation.for(ClrModels::Sword)
32
- end
33
-
34
- it "should execute the callback when the expectation is invoked" do
35
- ninja = ClrModels::Ninja.new
36
- cnt = 0
37
- @weapon.when_receiving(:attack).with(:any) do |*args|
38
- cnt += 1
39
- end
40
- @ninja.attack ninja, @weapon
41
-
42
- cnt.should == 1
43
- end
44
-
45
- end
46
-
47
- describe "when isolating CLR instances" do
48
- before do
49
- @ninja = ClrModels::Ninja.new
50
- @weapon = Caricature::Isolation.for(ClrModels::Sword.new)
51
- end
52
-
53
- it "should execute the callback when the expectation is invoked" do
54
- ninja = ClrModels::Ninja.new
55
- cnt = 0
56
- @weapon.when_receiving(:attack).with(ninja) do |*args|
57
- cnt += 1
58
- end
59
- @ninja.attack ninja, @weapon
60
-
61
- cnt.should == 1
62
- end
63
- end
64
-
65
- end
66
-
67
- describe "CLR to ruby interactions" do
68
-
69
- describe "when isolating CLR interfaces" do
70
-
71
- before do
72
- @ninja = Soldier.new
73
- @weapon = Caricature::Isolation.for(ClrModels::IWeapon)
74
- end
75
-
76
- it "should execute the callback when the expectation is invoked" do
77
- ninja = Soldier.new
78
- cnt = 0
79
- @weapon.when_receiving(:attack).with(:any) do |*args|
80
- cnt += 1
81
- end
82
- @ninja.attack ninja, @weapon
83
-
84
- cnt.should == 1
85
- end
86
-
87
- end
88
-
89
- describe "when isolating CLR classes" do
90
-
91
- before do
92
- @ninja = Soldier.new
93
- @weapon = Caricature::Isolation.for(ClrModels::Sword)
94
- end
95
-
96
- it "should execute the callback when the expectation is invoked" do
97
- ninja = Soldier.new
98
- cnt = 0
99
- @weapon.when_receiving(:attack).with(:any) do |*args|
100
- cnt += 1
101
- end
102
- @ninja.attack ninja, @weapon
103
-
104
- cnt.should == 1
105
- end
106
-
107
- end
108
-
109
- describe "when isolating CLR instances" do
110
- before do
111
- @ninja = Soldier.new
112
- @weapon = Caricature::Isolation.for(ClrModels::Sword.new)
113
- end
114
-
115
- it "should execute the callback when the expectation is invoked" do
116
- ninja = Soldier.new
117
- cnt = 0
118
- @weapon.when_receiving(:attack).with(ninja) do |*args|
119
- cnt += 1
120
- end
121
- @ninja.attack ninja, @weapon
122
-
123
- cnt.should == 1
124
- end
125
- end
126
-
127
-
128
- end
129
-
130
- describe "Ruby to Ruby interactions" do
131
-
132
- it "should execute a callback when an expectation is being invoked and with is not defined in a block" do
133
- iso = Caricature::Isolation.for(Dagger)
134
- cnt = 0
135
- iso.when_receiving(:damage).with(:any) do |*args|
136
- cnt += 1
137
- end
138
- iso.damage
139
- cnt.should == 1
140
- end
141
-
142
- it "should execute a callback when an expectation is being invoked and with is defined in a block" do
143
- cnt = 0
144
- iso = Caricature::Isolation.for(Dagger)
145
- iso.when_receiving(:damage) do |exp|
146
- exp.with(:any) do |*args|
147
- cnt += 1
148
- end
149
- end
150
- iso.damage
151
- cnt.should == 1
152
- end
153
- end
154
-
155
-
156
-
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+
3
+ describe "Callbacks on expectations" do
4
+
5
+ describe "CLR to CLR interactions" do
6
+
7
+ describe "when isolating CLR interfaces" do
8
+
9
+ before do
10
+ @ninja = ClrModels::Ninja.new
11
+ @weapon = Caricature::Isolation.for(ClrModels::IWeapon)
12
+ end
13
+
14
+ it "should execute the callback when the expectation is invoked" do
15
+ ninja = ClrModels::Ninja.new
16
+ cnt = 0
17
+ @weapon.when_receiving(:attack).with(:any) do |*args|
18
+ cnt += 1
19
+ end
20
+ @ninja.attack ninja, @weapon
21
+
22
+ cnt.should == 1
23
+ end
24
+
25
+ end
26
+
27
+ describe "when isolating CLR classes" do
28
+
29
+ before do
30
+ @ninja = ClrModels::Ninja.new
31
+ @weapon = Caricature::Isolation.for(ClrModels::Sword)
32
+ end
33
+
34
+ it "should execute the callback when the expectation is invoked" do
35
+ ninja = ClrModels::Ninja.new
36
+ cnt = 0
37
+ @weapon.when_receiving(:attack).with(:any) do |*args|
38
+ cnt += 1
39
+ end
40
+ @ninja.attack ninja, @weapon
41
+
42
+ cnt.should == 1
43
+ end
44
+
45
+ end
46
+
47
+ describe "when isolating CLR instances" do
48
+ before do
49
+ @ninja = ClrModels::Ninja.new
50
+ @weapon = Caricature::Isolation.for(ClrModels::Sword.new)
51
+ end
52
+
53
+ it "should execute the callback when the expectation is invoked" do
54
+ ninja = ClrModels::Ninja.new
55
+ cnt = 0
56
+ @weapon.when_receiving(:attack).with(ninja) do |*args|
57
+ cnt += 1
58
+ end
59
+ @ninja.attack ninja, @weapon
60
+
61
+ cnt.should == 1
62
+ end
63
+ end
64
+
65
+ end
66
+
67
+ describe "CLR to ruby interactions" do
68
+
69
+ describe "when isolating CLR interfaces" do
70
+
71
+ before do
72
+ @ninja = Soldier.new
73
+ @weapon = Caricature::Isolation.for(ClrModels::IWeapon)
74
+ end
75
+
76
+ it "should execute the callback when the expectation is invoked" do
77
+ ninja = Soldier.new
78
+ cnt = 0
79
+ @weapon.when_receiving(:attack).with(:any) do |*args|
80
+ cnt += 1
81
+ end
82
+ @ninja.attack ninja, @weapon
83
+
84
+ cnt.should == 1
85
+ end
86
+
87
+ end
88
+
89
+ describe "when isolating CLR classes" do
90
+
91
+ before do
92
+ @ninja = Soldier.new
93
+ @weapon = Caricature::Isolation.for(ClrModels::Sword)
94
+ end
95
+
96
+ it "should execute the callback when the expectation is invoked" do
97
+ ninja = Soldier.new
98
+ cnt = 0
99
+ @weapon.when_receiving(:attack).with(:any) do |*args|
100
+ cnt += 1
101
+ end
102
+ @ninja.attack ninja, @weapon
103
+
104
+ cnt.should == 1
105
+ end
106
+
107
+ end
108
+
109
+ describe "when isolating CLR instances" do
110
+ before do
111
+ @ninja = Soldier.new
112
+ @weapon = Caricature::Isolation.for(ClrModels::Sword.new)
113
+ end
114
+
115
+ it "should execute the callback when the expectation is invoked" do
116
+ ninja = Soldier.new
117
+ cnt = 0
118
+ @weapon.when_receiving(:attack).with(ninja) do |*args|
119
+ cnt += 1
120
+ end
121
+ @ninja.attack ninja, @weapon
122
+
123
+ cnt.should == 1
124
+ end
125
+ end
126
+
127
+
128
+ end
129
+
130
+ describe "Ruby to Ruby interactions" do
131
+
132
+ it "should execute a callback when an expectation is being invoked and with is not defined in a block" do
133
+ iso = Caricature::Isolation.for(Dagger)
134
+ cnt = 0
135
+ iso.when_receiving(:damage).with(:any) do |*args|
136
+ cnt += 1
137
+ end
138
+ iso.damage
139
+ cnt.should == 1
140
+ end
141
+
142
+ it "should execute a callback when an expectation is being invoked and with is defined in a block" do
143
+ cnt = 0
144
+ iso = Caricature::Isolation.for(Dagger)
145
+ iso.when_receiving(:damage) do |exp|
146
+ exp.with(:any) do |*args|
147
+ cnt += 1
148
+ end
149
+ end
150
+ iso.damage
151
+ cnt.should == 1
152
+ end
153
+ end
154
+
155
+
156
+
157
157
  end