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,107 +1,111 @@
1
- # WARNING : RAKE AUTO-GENERATED FILE. DO NOT MANUALLY EDIT!
2
- # RUN : 'rake gem:update_gemspec'
3
-
4
- Gem::Specification.new do |s|
5
- s.authors = ["Ivan Porto Carrero"]
6
- s.bindir = "bin"
7
- s.add_dependency "uuidtools", ">= 2.0.0, runtime"
8
- s.description = "Caricature brings simple mocking to Ruby, DLR and CLR."
9
- s.email = "ivan@flanders.co.nz"
10
- s.extra_rdoc_files = ["README.rdoc"]
11
- s.files = ["README.rdoc",
12
- "Rakefile",
13
- "caricature.gemspec",
14
- "lib/caricature",
15
- "lib/caricature.rb",
16
- "lib/caricature/bacon",
17
- "lib/caricature/bacon.rb",
18
- "lib/caricature/bacon/integration.rb",
19
- "lib/caricature/clr",
20
- "lib/caricature/clr.rb",
21
- "lib/caricature/clr/aspnet_mvc.rb",
22
- "lib/caricature/clr/descriptor.rb",
23
- "lib/caricature/clr/isolation.rb",
24
- "lib/caricature/clr/isolator.rb",
25
- "lib/caricature/clr/messenger.rb",
26
- "lib/caricature/descriptor.rb",
27
- "lib/caricature/expectation.rb",
28
- "lib/caricature/isolation.rb",
29
- "lib/caricature/isolator.rb",
30
- "lib/caricature/messenger.rb",
31
- "lib/caricature/method_call_recorder.rb",
32
- "lib/caricature/rspec",
33
- "lib/caricature/rspec.rb",
34
- "lib/caricature/rspec/integration.rb",
35
- "lib/caricature/verification.rb",
36
- "lib/caricature/version.rb",
37
- "lib/core_ext",
38
- "lib/core_ext/array.rb",
39
- "lib/core_ext/class.rb",
40
- "lib/core_ext/core_ext.rb",
41
- "lib/core_ext/hash.rb",
42
- "lib/core_ext/module.rb",
43
- "lib/core_ext/object.rb",
44
- "lib/core_ext/string.rb",
45
- "lib/core_ext/system",
46
- "lib/core_ext/system/string.rb",
47
- "lib/core_ext/system/type.rb",
48
- "spec/bacon",
49
- "spec/bacon/integration",
50
- "spec/bacon/integration/callback_spec.rb",
51
- "spec/bacon/integration/clr_to_clr_spec.rb",
52
- "spec/bacon/integration/clr_to_ruby_spec.rb",
53
- "spec/bacon/integration/indexer_spec.rb",
54
- "spec/bacon/integration/ruby_to_ruby_spec.rb",
55
- "spec/bacon/spec_helper.rb",
56
- "spec/bacon/unit",
57
- "spec/bacon/unit/core_ext_spec.rb",
58
- "spec/bacon/unit/descriptor_spec.rb",
59
- "spec/bacon/unit/expectation_spec.rb",
60
- "spec/bacon/unit/interop_spec.rb",
61
- "spec/bacon/unit/isolation_spec.rb",
62
- "spec/bacon/unit/isolator_spec.rb",
63
- "spec/bacon/unit/messaging_spec.rb",
64
- "spec/bacon/unit/method_call_spec.rb",
65
- "spec/bacon/unit/sword_spec.rb",
66
- "spec/bacon/unit/verification_spec.rb",
67
- "spec/bin",
68
- "spec/bin/ClrModels.dll",
69
- "spec/bin/ClrModels.dll.mdb",
70
- "spec/models",
71
- "spec/models/ClrModels.cs",
72
- "spec/models/ruby_models.rb",
73
- "spec/rspec",
74
- "spec/rspec/integration",
75
- "spec/rspec/integration/callback_spec.rb",
76
- "spec/rspec/integration/clr_to_clr_spec.rb",
77
- "spec/rspec/integration/clr_to_ruby_spec.rb",
78
- "spec/rspec/integration/indexer_spec.rb",
79
- "spec/rspec/integration/ruby_to_ruby_spec.rb",
80
- "spec/rspec/spec_helper.rb",
81
- "spec/rspec/unit",
82
- "spec/rspec/unit/core_ext_spec.rb",
83
- "spec/rspec/unit/descriptor_spec.rb",
84
- "spec/rspec/unit/expectation_spec.rb",
85
- "spec/rspec/unit/interop_spec.rb",
86
- "spec/rspec/unit/isolation_spec.rb",
87
- "spec/rspec/unit/isolator_spec.rb",
88
- "spec/rspec/unit/messaging_spec.rb",
89
- "spec/rspec/unit/method_call_spec.rb",
90
- "spec/rspec/unit/sword_spec.rb",
91
- "spec/rspec/unit/verification_spec.rb",
92
- "spec/spec_helper.rb"]
93
- s.has_rdoc = true
94
- s.homepage = "http://casualjim.github.com/caricature"
95
- s.loaded = false
96
- s.name = "caricature"
97
- s.platform = "ruby"
98
- s.rdoc_options = ["--quiet", "--title", "Caricature brings simple mocking to Ruby, DLR and CLR.", "--main", "README.rdoc", "--line-numbers", "--format", "darkfish"]
99
- s.require_paths = ["lib"]
100
- s.required_ruby_version = ">= 1.8.4"
101
- s.required_rubygems_version = ">= 0"
102
- s.rubyforge_project = "caricature"
103
- s.rubygems_version = "1.3.5"
104
- s.specification_version = 3
105
- s.summary = "Caricature brings simple mocking to Ruby, DLR and CLR."
106
- s.version = "0.7.2"
1
+ # WARNING : RAKE AUTO-GENERATED FILE. DO NOT MANUALLY EDIT!
2
+ # RUN : 'rake gem:update_gemspec'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.authors = ["Ivan Porto Carrero"]
6
+ s.bindir = "bin"
7
+ s.add_dependency "uuidtools", ">= 2.0.0, runtime"
8
+ s.description = "Caricature brings simple mocking to Ruby, DLR and CLR."
9
+ s.email = "ivan@flanders.co.nz"
10
+ s.extra_rdoc_files = ["README.rdoc"]
11
+ s.files = ["README.rdoc",
12
+ "Rakefile",
13
+ "caricature.gemspec",
14
+ "lib/caricature",
15
+ "lib/caricature.rb",
16
+ "lib/caricature/bacon",
17
+ "lib/caricature/bacon.rb",
18
+ "lib/caricature/bacon/integration.rb",
19
+ "lib/caricature/clr",
20
+ "lib/caricature/clr.rb",
21
+ "lib/caricature/clr/aspnet_mvc.rb",
22
+ "lib/caricature/clr/descriptor.rb",
23
+ "lib/caricature/clr/event_verification.rb",
24
+ "lib/caricature/clr/expectation.rb",
25
+ "lib/caricature/clr/isolation.rb",
26
+ "lib/caricature/clr/isolator.rb",
27
+ "lib/caricature/clr/messenger.rb",
28
+ "lib/caricature/clr/method_call_recorder.rb",
29
+ "lib/caricature/core_ext",
30
+ "lib/caricature/core_ext.rb",
31
+ "lib/caricature/core_ext/array.rb",
32
+ "lib/caricature/core_ext/class.rb",
33
+ "lib/caricature/core_ext/hash.rb",
34
+ "lib/caricature/core_ext/module.rb",
35
+ "lib/caricature/core_ext/object.rb",
36
+ "lib/caricature/core_ext/string.rb",
37
+ "lib/caricature/core_ext/system",
38
+ "lib/caricature/core_ext/system/string.rb",
39
+ "lib/caricature/core_ext/system/type.rb",
40
+ "lib/caricature/descriptor.rb",
41
+ "lib/caricature/expectation.rb",
42
+ "lib/caricature/isolation.rb",
43
+ "lib/caricature/isolator.rb",
44
+ "lib/caricature/messenger.rb",
45
+ "lib/caricature/method_call_recorder.rb",
46
+ "lib/caricature/rspec",
47
+ "lib/caricature/rspec.rb",
48
+ "lib/caricature/rspec/integration.rb",
49
+ "lib/caricature/verification.rb",
50
+ "lib/caricature/version.rb",
51
+ "spec/bacon",
52
+ "spec/bacon/integration",
53
+ "spec/bacon/integration/callback_spec.rb",
54
+ "spec/bacon/integration/clr_to_clr_spec.rb",
55
+ "spec/bacon/integration/clr_to_ruby_spec.rb",
56
+ "spec/bacon/integration/event_spec.rb",
57
+ "spec/bacon/integration/indexer_spec.rb",
58
+ "spec/bacon/integration/ruby_to_ruby_spec.rb",
59
+ "spec/bacon/spec_helper.rb",
60
+ "spec/bacon/unit",
61
+ "spec/bacon/unit/core_ext_spec.rb",
62
+ "spec/bacon/unit/descriptor_spec.rb",
63
+ "spec/bacon/unit/expectation_spec.rb",
64
+ "spec/bacon/unit/interop_spec.rb",
65
+ "spec/bacon/unit/isolation_spec.rb",
66
+ "spec/bacon/unit/isolator_spec.rb",
67
+ "spec/bacon/unit/messaging_spec.rb",
68
+ "spec/bacon/unit/method_call_spec.rb",
69
+ "spec/bacon/unit/sword_spec.rb",
70
+ "spec/bacon/unit/verification_spec.rb",
71
+ "spec/bin",
72
+ "spec/bin/ClrModels.dll",
73
+ "spec/models",
74
+ "spec/models/ClrModels.cs",
75
+ "spec/models/ruby_models.rb",
76
+ "spec/rspec",
77
+ "spec/rspec/integration",
78
+ "spec/rspec/integration/callback_spec.rb",
79
+ "spec/rspec/integration/clr_to_clr_spec.rb",
80
+ "spec/rspec/integration/clr_to_ruby_spec.rb",
81
+ "spec/rspec/integration/indexer_spec.rb",
82
+ "spec/rspec/integration/ruby_to_ruby_spec.rb",
83
+ "spec/rspec/spec_helper.rb",
84
+ "spec/rspec/unit",
85
+ "spec/rspec/unit/core_ext_spec.rb",
86
+ "spec/rspec/unit/descriptor_spec.rb",
87
+ "spec/rspec/unit/event_spec.rb",
88
+ "spec/rspec/unit/expectation_spec.rb",
89
+ "spec/rspec/unit/interop_spec.rb",
90
+ "spec/rspec/unit/isolation_spec.rb",
91
+ "spec/rspec/unit/isolator_spec.rb",
92
+ "spec/rspec/unit/messaging_spec.rb",
93
+ "spec/rspec/unit/method_call_spec.rb",
94
+ "spec/rspec/unit/sword_spec.rb",
95
+ "spec/rspec/unit/verification_spec.rb",
96
+ "spec/spec_helper.rb"]
97
+ s.has_rdoc = true
98
+ s.homepage = "http://casualjim.github.com/caricature"
99
+ s.loaded = false
100
+ s.name = "caricature"
101
+ s.platform = "ruby"
102
+ s.rdoc_options = ["--quiet", "--title", "Caricature brings simple mocking to Ruby, DLR and CLR.", "--main", "README.rdoc", "--line-numbers", "--format", "darkfish"]
103
+ s.require_paths = ["lib"]
104
+ s.required_ruby_version = ">= 1.8.4"
105
+ s.required_rubygems_version = ">= 0"
106
+ s.rubyforge_project = "caricature"
107
+ s.rubygems_version = "1.3.5"
108
+ s.specification_version = 3
109
+ s.summary = "Caricature brings simple mocking to Ruby, DLR and CLR."
110
+ s.version = "0.7.5"
107
111
  end
@@ -1,4 +1,6 @@
1
+ require 'rubygems' unless defined?(Gem)
1
2
  $:.unshift File.dirname(__FILE__)
3
+ require 'uuidtools'
2
4
 
3
5
  module Caricature
4
6
  #
@@ -8,7 +10,7 @@ module Caricature
8
10
  #
9
11
  end
10
12
 
11
- require 'core_ext/core_ext'
13
+ require 'caricature/core_ext'
12
14
  require 'caricature/version'
13
15
  require 'caricature/isolation'
14
16
  require 'caricature/clr' if defined? IRONRUBY_VERSION
@@ -1,2 +1,2 @@
1
- require 'caricature/bacon/integration' if defined? Bacon
2
-
1
+ require 'caricature/bacon/integration' if defined? Bacon
2
+
@@ -1,55 +1,75 @@
1
- class Should
2
-
3
- def have_received?(name, &b)
4
- lambda { |obj, *args| obj.did_receive?(name, &b).successful? }
5
- end
6
-
7
- def satisfy(*args, &block)
8
- if args.size == 1 && String === args.first
9
- description = args.shift
10
- else
11
- description = ""
12
- end
13
-
14
- r=nil
15
- err = nil
16
- begin
17
- r = yield(@object, *args)
18
- rescue Caricature::ArgumentMatchError => e
19
- err =e
20
- end
21
- if Bacon::Counter[:depth] > 0
22
- Bacon::Counter[:requirements] += 1
23
- raise (err.is_a?(Caricature::ArgumentMatchError) ? err : Bacon::Error.new(:failed, description)) unless @negated ^ r
24
- r
25
- else
26
- @negated ? !r : !!r
27
- end
28
- end
29
-
30
- end
31
-
32
- module Caricature
33
-
34
- # Describes a verification of a method call.
35
- # This corresponds kind of to an assertion
36
- class Verification
37
-
38
-
39
- # indicate that this method verification is successful
40
- def successful?
41
- a = any_args? ? [:any] : @args
42
- res = @recorder.was_called?(@method_name, @block_args, @mode, *a)
43
- raise Caricature::ArgumentMatchError.new(:failed, self.error) unless res
44
- res
45
- end
46
-
47
-
48
- end
49
-
50
- class ArgumentMatchError < Bacon::Error;
51
-
52
- end
53
-
54
- end
55
-
1
+ class Should
2
+
3
+ def have_received?(name, &b)
4
+ be(name) { |obj, *args| obj.did_receive?(name, &b).successful? }
5
+ end
6
+
7
+ def have_raised_event?(name, &b)
8
+ be(name) { |obj, *args| obj.did_raise_event?(name, &b).successful? }
9
+ end if defined?(IRONRUBY_VERSION)
10
+
11
+ def satisfy(*args, &block)
12
+ if args.size == 1 && String === args.first
13
+ description = args.shift
14
+ else
15
+ description = ""
16
+ end
17
+ r=nil
18
+ err = nil
19
+ begin
20
+ r = block.call(@object, *args)
21
+ rescue Caricature::ArgumentMatchError => e
22
+ err =e
23
+ end
24
+ if Bacon::Counter[:depth] > 0
25
+ Bacon::Counter[:requirements] += 1
26
+ raise (err.is_a?(Caricature::ArgumentMatchError) ? err : Bacon::Error.new(:failed, description)) unless @negated ^ r
27
+ r
28
+ else
29
+ @negated ? !r : !!r
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ module Caricature
36
+
37
+ # Describes a verification of a method call.
38
+ # This corresponds kind of to an assertion
39
+ class Verification
40
+
41
+
42
+ # indicate that this method verification is successful
43
+ def successful?
44
+ a = any_args? ? [:any] : @args
45
+ res = @recorder.was_called?(@method_name, @block_args, @mode, *a)
46
+ raise Caricature::ArgumentMatchError.new(:failed, self.error) unless res
47
+ res
48
+ end
49
+
50
+
51
+ end
52
+ if defined?(IRONRUBY_VERSION)
53
+ class EventVerification
54
+
55
+ # indicate that this event verification is successful
56
+ def successful?
57
+ a = any_args? ? [:any] : @args
58
+ res = @recorder.event_raised?(@event_name, @mode, *a)
59
+ raise Caricature::ArgumentMatchError.new(:failed, self.error) unless res
60
+ res
61
+ end
62
+
63
+ end
64
+
65
+ # class ClrInterfaceIsolator
66
+ # def
67
+ # end
68
+ end
69
+
70
+ class ArgumentMatchError < Bacon::Error;
71
+
72
+ end
73
+
74
+ end
75
+
@@ -1,6 +1,7 @@
1
- #IronRuby.load_assembly 'Workarounds, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
2
-
3
1
  require File.dirname(__FILE__) + "/clr/descriptor"
4
2
  require File.dirname(__FILE__) + "/clr/messenger"
5
3
  require File.dirname(__FILE__) + "/clr/isolator"
6
- require File.dirname(__FILE__) + "/clr/isolation"
4
+ require File.dirname(__FILE__) + "/clr/expectation"
5
+ require File.dirname(__FILE__) + "/clr/isolation"
6
+ require File.dirname(__FILE__) + "/clr/event_verification"
7
+ require File.dirname(__FILE__) + "/clr/method_call_recorder"
@@ -1,6 +1,6 @@
1
- load_assembly 'System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
2
- load_assembly 'System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
3
- load_assembly 'System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
1
+ load_assembly 'System.Web.Routing'
2
+ load_assembly 'System.Web.Mvc'
3
+ load_assembly 'System.Web.Abstractions'
4
4
 
5
5
  include System::Web
6
6
  include System::Web::Routing
@@ -3,41 +3,102 @@ module Caricature
3
3
  # Contains the logic to collect members from a CLR type
4
4
  module ClrMemberCollector
5
5
 
6
+ attr_reader :class_events, :events
7
+
6
8
  private
7
- # collects the instance members for a CLR type.
8
- # makes sure it can handle indexers for properties etc.
9
- def collect_members_from(meths, properties, instance_member=true)
10
-
11
- mem = []
12
- mem += meths.collect do |mi|
13
- MemberDescriptor.new(mi.name.underscore, mi.return_type, instance_member)
14
- end
15
- properties.each do |pi|
16
- prop_name = property_name_from(pi)
17
- mem << MemberDescriptor.new(prop_name, pi.property_type, instance_member)
18
- mem << MemberDescriptor.new("__setitem__", nil, instance_member) if prop_name == "__getitem__"
19
- mem << MemberDescriptor.new("#{prop_name}=", nil, instance_member) if pi.can_write and prop_name != "__getitem__"
20
- end
21
- mem
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
22
28
  end
29
+ end
23
30
 
24
- # gets the property name from the +PropertyInfo+
25
- # when the property is an indexer it will return +[]+
26
- def property_name_from(property_info)
27
- return property_info.name.underscore if property_info.get_index_parameters.empty?
28
- "__getitem__"
29
- end
30
-
31
- # the binding flags for instance members of a CLR type
32
- def instance_flags
33
- System::Reflection::BindingFlags.public | System::Reflection::BindingFlags.instance
34
- end
35
-
36
- # the binding flags for class members of a CLR type
37
- def class_flags
38
- System::Reflection::BindingFlags.public | System::Reflection::BindingFlags.static
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
39
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
40
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
41
102
  end
42
103
 
43
104
  # describes clr interfaces.
@@ -51,10 +112,12 @@ module Caricature
51
112
  def initialize_instance_members_for(klass)
52
113
  clr_type = klass.to_clr_type
53
114
 
54
- properties = clr_type.collect_interface_properties
55
- methods = clr_type.collect_interface_methods
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
56
119
 
57
- @instance_members = collect_members_from methods, properties
120
+ @instance_members = build_member_collections context
58
121
  end
59
122
 
60
123
  # this method is empty because an interface can't have static members
@@ -72,20 +135,24 @@ module Caricature
72
135
  def initialize_instance_members_for(klass)
73
136
  clr_type = klass.to_clr_type
74
137
 
75
- methods = clr_type.get_methods(instance_flags)
76
- properties = clr_type.get_properties(instance_flags)
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)
77
142
 
78
- @instance_members = collect_members_from methods, properties
143
+ @instance_members = build_member_collections context
79
144
  end
80
145
 
81
146
  # collects all the static members of the provided CLR class type
82
147
  def initialize_class_members_for(klass)
83
148
  clr_type = klass.to_clr_type
84
149
 
85
- methods = clr_type.get_methods(class_flags)
86
- properties = clr_type.get_properties(class_flags)
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)
87
154
 
88
- @class_members = collect_members_from methods, properties, false
155
+ @class_members = build_member_collections context, false
89
156
  end
90
157
 
91
158
  end