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



144
145
146
# File 'lib/mocha/mockery.rb', line 144

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(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(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(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
# 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_non_mock_object)
    on_stubbing_method_on_non_mock_object(object, method)
  end
end

#on_stubbing_method_on_non_mock_object(object, method) ⇒ Object



124
125
126
127
128
129
130
131
# File 'lib/mocha/mockery.rb', line 124

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



133
134
135
136
137
138
139
140
# File 'lib/mocha/mockery.rb', line 133

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



106
107
108
109
110
111
112
113
# File 'lib/mocha/mockery.rb', line 106

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



115
116
117
118
119
120
121
122
# File 'lib/mocha/mockery.rb', line 115

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(&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