Class: Mocha::Mockery

Inherits:
Object show all
Defined in:
lib/mocha/mockery.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#loggerObject


158
159
160
# File 'lib/mocha/mockery.rb', line 158

def logger
  @logger ||= Logger.new($stderr)
end

Class Method Details

.instanceObject


15
16
17
# File 'lib/mocha/mockery.rb', line 15

def instance
  @instance ||= new
end

.reset_instanceObject


19
20
21
# File 'lib/mocha/mockery.rb', line 19

def reset_instance
  @instance = nil
end

Instance Method Details

#mocha_inspectObject


81
82
83
84
85
86
87
# File 'lib/mocha/mockery.rb', line 81

def mocha_inspect
  message = ""
  message << "unsatisfied expectations:\n- #{unsatisfied_expectations.map { |e| e.mocha_inspect }.join("\n- ")}\n" unless unsatisfied_expectations.empty?
  message << "satisfied expectations:\n- #{satisfied_expectations.map { |e| e.mocha_inspect }.join("\n- ")}\n" unless satisfied_expectations.empty?
  message << "states:\n- #{state_machines.map { |sm| sm.mocha_inspect }.join("\n- ")}" unless state_machines.empty?
  message
end

#mock_impersonating(object, &block) ⇒ Object


33
34
35
# File 'lib/mocha/mockery.rb', line 33

def mock_impersonating(object, &block)
  add_mock(Mock.new(self, ImpersonatingName.new(object), &block))
end

#mock_impersonating_any_instance_of(klass, &block) ⇒ Object


37
38
39
# File 'lib/mocha/mockery.rb', line 37

def mock_impersonating_any_instance_of(klass, &block)
  add_mock(Mock.new(self, ImpersonatingAnyInstanceName.new(klass), &block))
end

#mocksObject


73
74
75
# File 'lib/mocha/mockery.rb', line 73

def mocks
  @mocks ||= []
end

#named_mock(name, &block) ⇒ Object


25
26
27
# File 'lib/mocha/mockery.rb', line 25

def named_mock(name, &block)
  add_mock(Mock.new(self, Name.new(name), &block))
end

#new_state_machine(name) ⇒ Object


41
42
43
# File 'lib/mocha/mockery.rb', line 41

def new_state_machine(name)
  add_state_machine(StateMachine.new(name))
end

#on_stubbing(object, method) ⇒ Object


89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/mocha/mockery.rb', line 89

def on_stubbing(object, method)
  method = RUBY_VERSION < '1.9' ? method.to_s : method.to_sym
  unless Mocha::Configuration.allow?(:stubbing_non_existent_method)
    unless object.method_exists?(method, include_public_methods = true)
      on_stubbing_non_existent_method(object, method)
    end
  end
  unless Mocha::Configuration.allow?(:stubbing_non_public_method)
    if object.method_exists?(method, include_public_methods = false)
      on_stubbing_non_public_method(object, method)
    end
  end
  unless Mocha::Configuration.allow?(:stubbing_method_on_nil)
    if object.nil?
      on_stubbing_method_on_nil(object, method)
    end
  end
  unless Mocha::Configuration.allow?(:stubbing_method_on_non_mock_object)
    on_stubbing_method_on_non_mock_object(object, method)
  end
end

#on_stubbing_method_on_nil(object, method) ⇒ Object


129
130
131
132
133
134
135
136
# File 'lib/mocha/mockery.rb', line 129

def on_stubbing_method_on_nil(object, method)
  if Mocha::Configuration.prevent?(:stubbing_method_on_nil)
    raise StubbingError.new("stubbing method on nil: #{object.mocha_inspect}.#{method}", caller)
  end
  if Mocha::Configuration.warn_when?(:stubbing_method_on_nil)
    logger.warn "stubbing method on nil: #{object.mocha_inspect}.#{method}"
  end
end

#on_stubbing_method_on_non_mock_object(object, method) ⇒ Object


138
139
140
141
142
143
144
145
# File 'lib/mocha/mockery.rb', line 138

def on_stubbing_method_on_non_mock_object(object, method)
  if Mocha::Configuration.prevent?(:stubbing_method_on_non_mock_object)
    raise StubbingError.new("stubbing method on non-mock object: #{object.mocha_inspect}.#{method}", caller)
  end
  if Mocha::Configuration.warn_when?(:stubbing_method_on_non_mock_object)
    logger.warn "stubbing method on non-mock object: #{object.mocha_inspect}.#{method}"
  end
end

#on_stubbing_method_unnecessarily(expectation) ⇒ Object


147
148
149
150
151
152
153
154
# File 'lib/mocha/mockery.rb', line 147

def on_stubbing_method_unnecessarily(expectation)
  if Mocha::Configuration.prevent?(:stubbing_method_unnecessarily)
    raise StubbingError.new("stubbing method unnecessarily: #{expectation.method_signature}", expectation.backtrace)
  end
  if Mocha::Configuration.warn_when?(:stubbing_method_unnecessarily)
    logger.warn "stubbing method unnecessarily: #{expectation.method_signature}"
  end
end

#on_stubbing_non_existent_method(object, method) ⇒ Object


111
112
113
114
115
116
117
118
# File 'lib/mocha/mockery.rb', line 111

def on_stubbing_non_existent_method(object, method)
  if Mocha::Configuration.prevent?(:stubbing_non_existent_method)
    raise StubbingError.new("stubbing non-existent method: #{object.mocha_inspect}.#{method}", caller)
  end
  if Mocha::Configuration.warn_when?(:stubbing_non_existent_method)
    logger.warn "stubbing non-existent method: #{object.mocha_inspect}.#{method}"
  end
end

#on_stubbing_non_public_method(object, method) ⇒ Object


120
121
122
123
124
125
126
127
# File 'lib/mocha/mockery.rb', line 120

def on_stubbing_non_public_method(object, method)
  if Mocha::Configuration.prevent?(:stubbing_non_public_method)
    raise StubbingError.new("stubbing non-public method: #{object.mocha_inspect}.#{method}", caller)
  end
  if Mocha::Configuration.warn_when?(:stubbing_non_public_method)
    logger.warn "stubbing non-public method: #{object.mocha_inspect}.#{method}"
  end
end

#state_machinesObject


77
78
79
# File 'lib/mocha/mockery.rb', line 77

def state_machines
  @state_machines ||= []
end

#stubbaObject


69
70
71
# File 'lib/mocha/mockery.rb', line 69

def stubba
  @stubba ||= Central.new
end

#teardownObject


64
65
66
67
# File 'lib/mocha/mockery.rb', line 64

def teardown
  stubba.unstub_all
  reset
end

#unnamed_mock(&block) ⇒ Object


29
30
31
# File 'lib/mocha/mockery.rb', line 29

def unnamed_mock(&block)
  add_mock(Mock.new(self, &block))
end

#verify(assertion_counter = nil) ⇒ Object


45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/mocha/mockery.rb', line 45

def verify(assertion_counter = nil)
  unless mocks.all? { |mock| mock.__verified__?(assertion_counter) }
    message = "not all expectations were satisfied\n#{mocha_inspect}"
    if unsatisfied_expectations.empty?
      backtrace = caller
    else
      backtrace = unsatisfied_expectations[0].backtrace
    end
    raise ExpectationError.new(message, backtrace)
  end
  expectations.each do |e|
    unless Mocha::Configuration.allow?(:stubbing_method_unnecessarily)
      unless e.used?
        on_stubbing_method_unnecessarily(e)
      end
    end
  end
end