C0 code coverage information

Generated on Mon Aug 13 01:18:54 -0400 2007 with rcov 0.8.0


Code reported as executed by Ruby looks like this...
and this: this line is also marked as covered.
Lines considered as run by rcov, but not reported by Ruby, look like this,
and this: these lines were inferred by rcov (using simple heuristics).
Finally, here's a line marked as not executed.
Name Total lines Lines of code Total coverage Code coverage
lib/spec/mocks/proxy.rb 167 138
100.0% 
100.0% 
  1 module Spec
  2   module Mocks
  3     class Proxy
  4       DEFAULT_OPTIONS = {
  5         :null_object => false,
  6       }
  7 
  8       def initialize(target, name, options={})
  9         @target = target
 10         @name = name
 11         @error_generator = ErrorGenerator.new target, name
 12         @expectation_ordering = OrderGroup.new @error_generator
 13         @expectations = []
 14         @messages_received = []
 15         @stubs = []
 16         @proxied_methods = []
 17         @options = options ? DEFAULT_OPTIONS.dup.merge(options) : DEFAULT_OPTIONS
 18       end
 19 
 20       def null_object?
 21         @options[:null_object]
 22       end
 23 
 24       def add_message_expectation(expected_from, sym, opts={}, &block)
 25         __add sym, block
 26         @expectations << MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil, 1, opts)
 27         @expectations.last
 28       end
 29 
 30       def add_negative_message_expectation(expected_from, sym, &block)
 31         __add sym, block
 32         @expectations << NegativeMessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil)
 33         @expectations.last
 34       end
 35 
 36       def add_stub(expected_from, sym)
 37         __add sym, nil
 38         @stubs.unshift MethodStub.new(@error_generator, @expectation_ordering, expected_from, sym, nil)
 39         @stubs.first
 40       end
 41 
 42       def verify #:nodoc:
 43         begin
 44           verify_expectations
 45         ensure
 46           reset
 47         end
 48       end
 49 
 50       def reset
 51         clear_expectations
 52         clear_stubs
 53         reset_proxied_methods
 54         clear_proxied_methods
 55       end
 56 
 57       def received_message?(sym, *args, &block)
 58         return true if @messages_received.find {|array| array == [sym, args, block]}
 59         return false
 60       end
 61 
 62       def has_negative_expectation?(sym)
 63         @expectations.detect {|expectation| expectation.negative_expectation_for?(sym)}
 64       end
 65 
 66       def message_received(sym, *args, &block)
 67         if expectation = find_matching_expectation(sym, *args)
 68           expectation.invoke(args, block)
 69         elsif stub = find_matching_method_stub(sym)
 70           stub.invoke([], block)
 71         elsif expectation = find_almost_matching_expectation(sym, *args)
 72           raise_unexpected_message_args_error(expectation, *args) unless has_negative_expectation?(sym) unless null_object?
 73         else
 74           @target.send :method_missing, sym, *args, &block
 75         end
 76       end
 77 
 78       def raise_unexpected_message_args_error(expectation, *args)
 79         @error_generator.raise_unexpected_message_args_error expectation, *args
 80       end
 81 
 82       def raise_unexpected_message_error(sym, *args)
 83         @error_generator.raise_unexpected_message_error sym, *args
 84       end
 85       
 86     private
 87 
 88       def __add(sym, block)
 89         $rspec_mocks.add(@target) unless $rspec_mocks.nil?
 90         define_expected_method(sym)
 91       end
 92       
 93       def define_expected_method(sym)
 94         if target_responds_to?(sym) && !@proxied_methods.include?(sym)
 95           metaclass.__send__(:alias_method, munge(sym), sym) if metaclass.instance_methods.include?(sym.to_s)
 96           @proxied_methods << sym
 97         end
 98         
 99         metaclass_eval(<<-EOF, __FILE__, __LINE__)
100           def #{sym}(*args, &block)
101             __mock_proxy.message_received :#{sym}, *args, &block
102           end
103         EOF
104       end
105 
106       def target_responds_to?(sym)
107         return @target.send(munge(:respond_to?),sym) if @already_proxied_respond_to
108         return @already_proxied_respond_to = true if sym == :respond_to?
109         return @target.respond_to?(sym)
110       end
111 
112       def munge(sym)
113         "proxied_by_rspec__#{sym.to_s}".to_sym
114       end
115 
116       def clear_expectations
117         @expectations.clear
118       end
119 
120       def clear_stubs
121         @stubs.clear
122       end
123 
124       def clear_proxied_methods
125         @proxied_methods.clear
126       end
127 
128       def metaclass_eval(str, filename, lineno)
129         metaclass.class_eval(str, filename, lineno)
130       end
131       
132       def metaclass
133         (class << @target; self; end)
134       end
135 
136       def verify_expectations
137         @expectations.each do |expectation|
138           expectation.verify_messages_received
139         end
140       end
141 
142       def reset_proxied_methods
143         @proxied_methods.each do |sym|
144           if metaclass.instance_methods.include?(munge(sym).to_s)
145             metaclass.__send__(:alias_method, sym, munge(sym))
146             metaclass.__send__(:undef_method, munge(sym))
147           else
148             metaclass.__send__(:undef_method, sym)
149           end
150         end
151       end
152 
153       def find_matching_expectation(sym, *args)
154         @expectations.find {|expectation| expectation.matches(sym, args)}
155       end
156 
157       def find_almost_matching_expectation(sym, *args)
158         @expectations.find {|expectation| expectation.matches_name_but_not_args(sym, args)}
159       end
160 
161       def find_matching_method_stub(sym)
162         @stubs.find {|stub| stub.matches(sym, [])}
163       end
164 
165     end
166   end
167 end

Generated using the rcov code coverage analysis tool for Ruby version 0.8.0.

Valid XHTML 1.0! Valid CSS!