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,160 +1,160 @@
1
- module Caricature
2
-
3
- # Contains the logic to collect members from a CLR type
4
- module ClrMemberCollector
5
-
6
- attr_reader :class_events, :events
7
-
8
- private
9
- # collects the instance members for a CLR type.
10
- # makes sure it can handle indexers for properties etc.
11
- def build_member_collections(context={}, instance_member=true)
12
-
13
- build_event_collection(context, instance_member)
14
-
15
- mem = []
16
- mem += build_method_collection(context, instance_member)
17
- mem += build_property_collection(context, instance_member)
18
- mem
19
- end
20
-
21
- def build_property_collection(context, instance_member)
22
- context[:properties].inject([]) do |res, pi|
23
- prop_name = property_name_from(pi)
24
- res << MemberDescriptor.new(prop_name, pi.property_type, instance_member)
25
- res << MemberDescriptor.new("set_Item", nil, instance_member) if prop_name == "get_Item"
26
- res << MemberDescriptor.new("#{prop_name}=", nil, instance_member) if pi.can_write and prop_name != "get_Item"
27
- res
28
- end
29
- end
30
-
31
- def build_method_collection(context, instance_member)
32
- context[:methods].inject([]) do |meths, mi|
33
- meths << MemberDescriptor.new(mi.name.underscore, mi.return_type, instance_member) unless event?(mi.name, instance_member)
34
- meths
35
- end
36
- end
37
-
38
- def build_event_collection(context, instance_member)
39
- context[:events].inject(evts=[]) { |evc, ei| evc << ClrEventDescriptor.new(ei.name, instance_member) }
40
- (instance_member ? @events = evts : @class_events = evts)
41
- end
42
-
43
- # indicates if this member is an event
44
- def event?(name, instance_member)
45
- ((instance_member ? @events : @class_events)||[]).any? { |en| /^(add|remove)_#{en.event_name}/i =~ name }
46
- end
47
-
48
- # gets the property name from the +PropertyInfo+
49
- # when the property is an indexer it will return +[]+
50
- def property_name_from(property_info)
51
- return property_info.name.underscore if property_info.get_index_parameters.empty?
52
- "get_Item"
53
- end
54
-
55
- # the binding flags for instance members of a CLR type
56
- def instance_flags
57
- System::Reflection::BindingFlags.public | System::Reflection::BindingFlags.instance
58
- end
59
-
60
- # the binding flags for class members of a CLR type
61
- def class_flags
62
- System::Reflection::BindingFlags.public | System::Reflection::BindingFlags.static
63
- end
64
-
65
- def event_flags
66
- non_public_flag | instance_flags
67
- end
68
-
69
- def class_event_flags
70
- non_public_flag | class_flags
71
- end
72
-
73
- def non_public_flag
74
- System::Reflection::BindingFlags.non_public
75
- end
76
-
77
- end
78
-
79
- class ClrEventDescriptor
80
-
81
- attr_reader :event_name
82
-
83
- def initialize(event_name, instance_member=true)
84
- @event_name, @instance_member = event_name, instance_member
85
- end
86
-
87
- def instance_member?
88
- @instance_member
89
- end
90
-
91
- def add_method_name
92
- "add_#{event_name}"
93
- end
94
-
95
- def remove_method_name
96
- "remove_#{event_name}"
97
- end
98
-
99
- def to_s
100
- "<#{self.class}:#{object_id} @event_name=\"#{event_name}\">"
101
- end
102
- end
103
-
104
- # describes clr interfaces.
105
- # Because CLR interfaces can't have static members this descriptor does not collect any class members
106
- class ClrInterfaceDescriptor < TypeDescriptor
107
-
108
- include ClrMemberCollector
109
-
110
- # collects instance members on this interface
111
- # it will collect properties, methods and property setters
112
- def initialize_instance_members_for(klass)
113
- clr_type = klass.to_clr_type
114
-
115
- context = {}
116
- context[:properties] = clr_type.collect_interface_properties
117
- context[:methods] = clr_type.collect_interface_methods
118
- context[:events] = clr_type.collect_interface_events
119
-
120
- @instance_members = build_member_collections context
121
- end
122
-
123
- # this method is empty because an interface can't have static members
124
- def initialize_class_members_for(klass); end
125
-
126
- end
127
-
128
-
129
- # Describes a CLR class type. it collects the properties and methods on an instance as well as on a static level
130
- class ClrClassDescriptor < TypeDescriptor
131
-
132
- include ClrMemberCollector
133
-
134
- # collects all the instance members of the provided CLR class type
135
- def initialize_instance_members_for(klass)
136
- clr_type = klass.to_clr_type
137
-
138
- context = {}
139
- context[:methods] = clr_type.get_methods(instance_flags)
140
- context[:properties] = clr_type.get_properties(instance_flags)
141
- context[:events] = clr_type.get_events(event_flags)
142
-
143
- @instance_members = build_member_collections context
144
- end
145
-
146
- # collects all the static members of the provided CLR class type
147
- def initialize_class_members_for(klass)
148
- clr_type = klass.to_clr_type
149
-
150
- context = {}
151
- context[:methods] = clr_type.get_methods(class_flags)
152
- context[:properties] = clr_type.get_properties(class_flags)
153
- context[:events] = clr_type.get_events(class_event_flags)
154
-
155
- @class_members = build_member_collections context, false
156
- end
157
-
158
- end
159
-
1
+ module Caricature
2
+
3
+ # Contains the logic to collect members from a CLR type
4
+ module ClrMemberCollector
5
+
6
+ attr_reader :class_events, :events
7
+
8
+ private
9
+ # collects the instance members for a CLR type.
10
+ # makes sure it can handle indexers for properties etc.
11
+ def build_member_collections(context={}, instance_member=true)
12
+
13
+ build_event_collection(context, instance_member)
14
+
15
+ mem = []
16
+ mem += build_method_collection(context, instance_member)
17
+ mem += build_property_collection(context, instance_member)
18
+ mem
19
+ end
20
+
21
+ def build_property_collection(context, instance_member)
22
+ context[:properties].inject([]) do |res, pi|
23
+ prop_name = property_name_from(pi)
24
+ res << MemberDescriptor.new(prop_name, pi.property_type, instance_member)
25
+ res << MemberDescriptor.new("set_Item", nil, instance_member) if prop_name == "get_Item"
26
+ res << MemberDescriptor.new("#{prop_name}=", nil, instance_member) if pi.can_write and prop_name != "get_Item"
27
+ res
28
+ end
29
+ end
30
+
31
+ def build_method_collection(context, instance_member)
32
+ context[:methods].inject([]) do |meths, mi|
33
+ meths << MemberDescriptor.new(mi.name.underscore, mi.return_type, instance_member) unless event?(mi.name, instance_member)
34
+ meths
35
+ end
36
+ end
37
+
38
+ def build_event_collection(context, instance_member)
39
+ context[:events].inject(evts=[]) { |evc, ei| evc << ClrEventDescriptor.new(ei.name, instance_member) }
40
+ (instance_member ? @events = evts : @class_events = evts)
41
+ end
42
+
43
+ # indicates if this member is an event
44
+ def event?(name, instance_member)
45
+ ((instance_member ? @events : @class_events)||[]).any? { |en| /^(add|remove)_#{en.event_name}/i =~ name }
46
+ end
47
+
48
+ # gets the property name from the +PropertyInfo+
49
+ # when the property is an indexer it will return +[]+
50
+ def property_name_from(property_info)
51
+ return property_info.name.underscore if property_info.get_index_parameters.empty?
52
+ "get_Item"
53
+ end
54
+
55
+ # the binding flags for instance members of a CLR type
56
+ def instance_flags
57
+ System::Reflection::BindingFlags.public | System::Reflection::BindingFlags.instance
58
+ end
59
+
60
+ # the binding flags for class members of a CLR type
61
+ def class_flags
62
+ System::Reflection::BindingFlags.public | System::Reflection::BindingFlags.static
63
+ end
64
+
65
+ def event_flags
66
+ non_public_flag | instance_flags
67
+ end
68
+
69
+ def class_event_flags
70
+ non_public_flag | class_flags
71
+ end
72
+
73
+ def non_public_flag
74
+ System::Reflection::BindingFlags.non_public
75
+ end
76
+
77
+ end
78
+
79
+ class ClrEventDescriptor
80
+
81
+ attr_reader :event_name
82
+
83
+ def initialize(event_name, instance_member=true)
84
+ @event_name, @instance_member = event_name, instance_member
85
+ end
86
+
87
+ def instance_member?
88
+ @instance_member
89
+ end
90
+
91
+ def add_method_name
92
+ "add_#{event_name}"
93
+ end
94
+
95
+ def remove_method_name
96
+ "remove_#{event_name}"
97
+ end
98
+
99
+ def to_s
100
+ "<#{self.class}:#{object_id} @event_name=\"#{event_name}\">"
101
+ end
102
+ end
103
+
104
+ # describes clr interfaces.
105
+ # Because CLR interfaces can't have static members this descriptor does not collect any class members
106
+ class ClrInterfaceDescriptor < TypeDescriptor
107
+
108
+ include ClrMemberCollector
109
+
110
+ # collects instance members on this interface
111
+ # it will collect properties, methods and property setters
112
+ def initialize_instance_members_for(klass)
113
+ clr_type = klass.to_clr_type
114
+
115
+ context = {}
116
+ context[:properties] = clr_type.collect_interface_properties
117
+ context[:methods] = clr_type.collect_interface_methods
118
+ context[:events] = clr_type.collect_interface_events
119
+
120
+ @instance_members = build_member_collections context
121
+ end
122
+
123
+ # this method is empty because an interface can't have static members
124
+ def initialize_class_members_for(klass); end
125
+
126
+ end
127
+
128
+
129
+ # Describes a CLR class type. it collects the properties and methods on an instance as well as on a static level
130
+ class ClrClassDescriptor < TypeDescriptor
131
+
132
+ include ClrMemberCollector
133
+
134
+ # collects all the instance members of the provided CLR class type
135
+ def initialize_instance_members_for(klass)
136
+ clr_type = klass.to_clr_type
137
+
138
+ context = {}
139
+ context[:methods] = clr_type.get_methods(instance_flags)
140
+ context[:properties] = clr_type.get_properties(instance_flags)
141
+ context[:events] = clr_type.get_events(event_flags)
142
+
143
+ @instance_members = build_member_collections context
144
+ end
145
+
146
+ # collects all the static members of the provided CLR class type
147
+ def initialize_class_members_for(klass)
148
+ clr_type = klass.to_clr_type
149
+
150
+ context = {}
151
+ context[:methods] = clr_type.get_methods(class_flags)
152
+ context[:properties] = clr_type.get_properties(class_flags)
153
+ context[:events] = clr_type.get_events(class_event_flags)
154
+
155
+ @class_members = build_member_collections context, false
156
+ end
157
+
158
+ end
159
+
160
160
  end
@@ -1,57 +1,57 @@
1
- module Caricature
2
-
3
- # Describes a verification of a method call.
4
- # This corresponds kind of to an assertion
5
- class EventVerification
6
-
7
- # Initializes a new instance of a +Verification+
8
- def initialize(event_name, recorder, mode=:instance)
9
- @event_name, @args, @any_args, @recorder, @mode = event_name, [], true, recorder, mode
10
- init_plugin
11
- end
12
-
13
- def init_plugin
14
-
15
- end
16
-
17
- # indicates whether this verification can be for any arguments
18
- def any_args?
19
- @any_args
20
- end
21
-
22
- # constrain this verification to the provided arguments
23
- def with(*args)
24
- @any_args = args.first.is_a?(Symbol) and args.first == :any
25
- @args = args
26
- # @callback = b if b
27
- self
28
- end
29
-
30
- # allow any arguments ignore the argument constraint
31
- def allow_any_arguments
32
- @any_args = true
33
- self
34
- end
35
-
36
- # figure out if this argument variation matches the provided args.
37
- def matches?(event_name, *args)
38
- @event_name == event_name and (any_args? or @args == args)
39
- end
40
-
41
- def error
42
- @recorder.event_error
43
- end
44
-
45
- # indicate that this method verification is successful
46
- def successful?
47
- a = any_args? ? [:any] : @args
48
- begin
49
- @recorder.event_raised?(@event_name, @mode, *a)
50
- rescue ArgumentError
51
- false
52
- end
53
- end
54
-
55
- end
56
-
1
+ module Caricature
2
+
3
+ # Describes a verification of a method call.
4
+ # This corresponds kind of to an assertion
5
+ class EventVerification
6
+
7
+ # Initializes a new instance of a +Verification+
8
+ def initialize(event_name, recorder, mode=:instance)
9
+ @event_name, @args, @any_args, @recorder, @mode = event_name, [], true, recorder, mode
10
+ init_plugin
11
+ end
12
+
13
+ def init_plugin
14
+
15
+ end
16
+
17
+ # indicates whether this verification can be for any arguments
18
+ def any_args?
19
+ @any_args
20
+ end
21
+
22
+ # constrain this verification to the provided arguments
23
+ def with(*args)
24
+ @any_args = args.first.is_a?(Symbol) and args.first == :any
25
+ @args = args
26
+ # @callback = b if b
27
+ self
28
+ end
29
+
30
+ # allow any arguments ignore the argument constraint
31
+ def allow_any_arguments
32
+ @any_args = true
33
+ self
34
+ end
35
+
36
+ # figure out if this argument variation matches the provided args.
37
+ def matches?(event_name, *args)
38
+ @event_name == event_name and (any_args? or @args == args)
39
+ end
40
+
41
+ def error
42
+ @recorder.event_error
43
+ end
44
+
45
+ # indicate that this method verification is successful
46
+ def successful?
47
+ a = any_args? ? [:any] : @args
48
+ begin
49
+ @recorder.event_raised?(@event_name, @mode, *a)
50
+ rescue ArgumentError
51
+ false
52
+ end
53
+ end
54
+
55
+ end
56
+
57
57
  end
@@ -1,101 +1,101 @@
1
- module Caricature
2
-
3
- # Syntax for the expectation builder and expectation
4
- # to define an event on the expectation.
5
- module EventExpectationSyntax
6
-
7
- # tell the expectation it needs to raise an event when this method is called
8
- def raise_event(name, *ags, &b)
9
- collected.merge!(:event_name => name, :event_args => ags, :event_handler => b)
10
- self
11
- end
12
-
13
- # raises the events that has been registered on the object at runtime
14
- def raise_subscriptions
15
- collected[:raise_subscriptions] = true
16
- self
17
- end
18
-
19
- end
20
-
21
-
22
- # Adds event support to the expectation
23
- # this is only applicable to clr isolations and not
24
- # to ruby isolations
25
- class Expectation
26
-
27
- include EventExpectationSyntax
28
-
29
-
30
-
31
- # the block that will be used
32
- def event_name
33
- collected[:event_name]
34
- end
35
-
36
- # the arguments that will be used for the event
37
- def event_args
38
- evt_ags = collected[:event_args]
39
- evt_ags.nil? or evt_ags.empty? ? [nil, System::EventArgs.empty] : evt_ags
40
- end
41
-
42
- # the block that will be used# the block that will be used
43
- def event_handler
44
- collected[:event_handler] || lambda { |s,e| }
45
- end
46
-
47
- # the events attached to the context
48
- def events
49
- collected[:events] ||= {}
50
- end
51
-
52
- # Set the registered events for this expectation
53
- def events=(evts)
54
- collected[:events]=evts
55
- end
56
-
57
- # indicates whether this expectation has an event that needs to be raised
58
- def raises_event?
59
- !!collected[:event_name]
60
- end
61
-
62
- # indicates whether this expectation has an event handler to be called
63
- def has_event_handler?
64
- !!collected[:event_handler]
65
- end
66
-
67
- # indicates whether to raise the registered event handlers
68
- def raises_registered?
69
- !!collected[:raise_subscriptions]
70
- end
71
-
72
- def event_recorder(&b)
73
- @event_recorder = b
74
- end
75
-
76
- def to_s #:nodoc:
77
- "<Caricature::Expecation, method_name: #{method_name}, args: #{args}, error args: #{error_args}, event: #{event_name}>"
78
- end
79
- alias :inspect :to_s
80
-
81
- private
82
-
83
- def do_event_raise #:nodoc:
84
- return unless @event_recorder
85
- @event_recorder.call event_name, event_args, event_handler
86
- return unless raises_event?
87
-
88
- ags = event_args
89
- event_handler.call *ags if has_event_handler?
90
-
91
- return unless raises_registered? or not has_event_handler?
92
- events[event_name].each { |evt| call_handler evt, *ags }
93
- end
94
-
95
- def call_handler(evt, *ags)
96
- evt.respond_to?(:call) ? evt.call(*ags) : evt.get_invocation_list.each{|ev| ev.invoke(*ags) }
97
- end
98
- end
99
-
100
- ExpectationBuilder.send :include, EventExpectationSyntax
1
+ module Caricature
2
+
3
+ # Syntax for the expectation builder and expectation
4
+ # to define an event on the expectation.
5
+ module EventExpectationSyntax
6
+
7
+ # tell the expectation it needs to raise an event when this method is called
8
+ def raise_event(name, *ags, &b)
9
+ collected.merge!(:event_name => name, :event_args => ags, :event_handler => b)
10
+ self
11
+ end
12
+
13
+ # raises the events that has been registered on the object at runtime
14
+ def raise_subscriptions
15
+ collected[:raise_subscriptions] = true
16
+ self
17
+ end
18
+
19
+ end
20
+
21
+
22
+ # Adds event support to the expectation
23
+ # this is only applicable to clr isolations and not
24
+ # to ruby isolations
25
+ class Expectation
26
+
27
+ include EventExpectationSyntax
28
+
29
+
30
+
31
+ # the block that will be used
32
+ def event_name
33
+ collected[:event_name]
34
+ end
35
+
36
+ # the arguments that will be used for the event
37
+ def event_args
38
+ evt_ags = collected[:event_args]
39
+ evt_ags.nil? or evt_ags.empty? ? [nil, System::EventArgs.empty] : evt_ags
40
+ end
41
+
42
+ # the block that will be used# the block that will be used
43
+ def event_handler
44
+ collected[:event_handler] || lambda { |s,e| }
45
+ end
46
+
47
+ # the events attached to the context
48
+ def events
49
+ collected[:events] ||= {}
50
+ end
51
+
52
+ # Set the registered events for this expectation
53
+ def events=(evts)
54
+ collected[:events]=evts
55
+ end
56
+
57
+ # indicates whether this expectation has an event that needs to be raised
58
+ def raises_event?
59
+ !!collected[:event_name]
60
+ end
61
+
62
+ # indicates whether this expectation has an event handler to be called
63
+ def has_event_handler?
64
+ !!collected[:event_handler]
65
+ end
66
+
67
+ # indicates whether to raise the registered event handlers
68
+ def raises_registered?
69
+ !!collected[:raise_subscriptions]
70
+ end
71
+
72
+ def event_recorder(&b)
73
+ @event_recorder = b
74
+ end
75
+
76
+ def to_s #:nodoc:
77
+ "<Caricature::Expecation, method_name: #{method_name}, args: #{args}, error args: #{error_args}, event: #{event_name}>"
78
+ end
79
+ alias :inspect :to_s
80
+
81
+ private
82
+
83
+ def do_event_raise #:nodoc:
84
+ return unless @event_recorder
85
+ @event_recorder.call event_name, event_args, event_handler
86
+ return unless raises_event?
87
+
88
+ ags = event_args
89
+ event_handler.call *ags if has_event_handler?
90
+
91
+ return unless raises_registered? or not has_event_handler?
92
+ events[event_name].each { |evt| call_handler evt, *ags }
93
+ end
94
+
95
+ def call_handler(evt, *ags)
96
+ evt.respond_to?(:call) ? evt.call(*ags) : evt.get_invocation_list.each{|ev| ev.invoke(*ags) }
97
+ end
98
+ end
99
+
100
+ ExpectationBuilder.send :include, EventExpectationSyntax
101
101
  end