mocha-macruby 0.9.8.20100129120100
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.
- data/COPYING +3 -0
- data/MIT-LICENSE +7 -0
- data/README +39 -0
- data/RELEASE +294 -0
- data/Rakefile +214 -0
- data/examples/misc.rb +43 -0
- data/examples/mocha.rb +25 -0
- data/examples/stubba.rb +64 -0
- data/lib/mocha.rb +3 -0
- data/lib/mocha/any_instance_method.rb +59 -0
- data/lib/mocha/api.rb +173 -0
- data/lib/mocha/argument_iterator.rb +21 -0
- data/lib/mocha/backtrace_filter.rb +17 -0
- data/lib/mocha/cardinality.rb +95 -0
- data/lib/mocha/central.rb +27 -0
- data/lib/mocha/change_state_side_effect.rb +19 -0
- data/lib/mocha/class_method.rb +117 -0
- data/lib/mocha/configuration.rb +79 -0
- data/lib/mocha/deprecation.rb +22 -0
- data/lib/mocha/exception_raiser.rb +17 -0
- data/lib/mocha/expectation.rb +476 -0
- data/lib/mocha/expectation_error.rb +15 -0
- data/lib/mocha/expectation_list.rb +50 -0
- data/lib/mocha/in_state_ordering_constraint.rb +19 -0
- data/lib/mocha/inspect.rb +67 -0
- data/lib/mocha/instance_method.rb +16 -0
- data/lib/mocha/integration.rb +38 -0
- data/lib/mocha/integration/mini_test.rb +21 -0
- data/lib/mocha/integration/mini_test/assertion_counter.rb +23 -0
- data/lib/mocha/integration/mini_test/version_131_and_above.rb +50 -0
- data/lib/mocha/integration/test_unit.rb +40 -0
- data/lib/mocha/integration/test_unit/assertion_counter.rb +23 -0
- data/lib/mocha/integration/test_unit/gem_version_200.rb +49 -0
- data/lib/mocha/integration/test_unit/gem_version_201_and_above.rb +49 -0
- data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +48 -0
- data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +50 -0
- data/lib/mocha/is_a.rb +9 -0
- data/lib/mocha/logger.rb +15 -0
- data/lib/mocha/metaclass.rb +13 -0
- data/lib/mocha/method_matcher.rb +21 -0
- data/lib/mocha/mock.rb +200 -0
- data/lib/mocha/mockery.rb +181 -0
- data/lib/mocha/module_method.rb +16 -0
- data/lib/mocha/multiple_yields.rb +20 -0
- data/lib/mocha/names.rb +53 -0
- data/lib/mocha/no_yields.rb +11 -0
- data/lib/mocha/object.rb +187 -0
- data/lib/mocha/parameter_matchers.rb +27 -0
- data/lib/mocha/parameter_matchers/all_of.rb +42 -0
- data/lib/mocha/parameter_matchers/any_of.rb +47 -0
- data/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
- data/lib/mocha/parameter_matchers/anything.rb +33 -0
- data/lib/mocha/parameter_matchers/base.rb +15 -0
- data/lib/mocha/parameter_matchers/equals.rb +42 -0
- data/lib/mocha/parameter_matchers/has_entries.rb +45 -0
- data/lib/mocha/parameter_matchers/has_entry.rb +57 -0
- data/lib/mocha/parameter_matchers/has_key.rb +43 -0
- data/lib/mocha/parameter_matchers/has_value.rb +43 -0
- data/lib/mocha/parameter_matchers/includes.rb +41 -0
- data/lib/mocha/parameter_matchers/instance_of.rb +42 -0
- data/lib/mocha/parameter_matchers/is_a.rb +42 -0
- data/lib/mocha/parameter_matchers/kind_of.rb +42 -0
- data/lib/mocha/parameter_matchers/not.rb +42 -0
- data/lib/mocha/parameter_matchers/object.rb +15 -0
- data/lib/mocha/parameter_matchers/optionally.rb +55 -0
- data/lib/mocha/parameter_matchers/regexp_matches.rb +44 -0
- data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
- data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
- data/lib/mocha/parameters_matcher.rb +37 -0
- data/lib/mocha/pretty_parameters.rb +28 -0
- data/lib/mocha/return_values.rb +31 -0
- data/lib/mocha/sequence.rb +42 -0
- data/lib/mocha/single_return_value.rb +17 -0
- data/lib/mocha/single_yield.rb +18 -0
- data/lib/mocha/standalone.rb +1 -0
- data/lib/mocha/state_machine.rb +91 -0
- data/lib/mocha/stubbing_error.rb +16 -0
- data/lib/mocha/unexpected_invocation.rb +18 -0
- data/lib/mocha/yield_parameters.rb +31 -0
- data/lib/mocha_standalone.rb +2 -0
- data/lib/stubba.rb +4 -0
- data/test/acceptance/acceptance_test_helper.rb +38 -0
- data/test/acceptance/api_test.rb +139 -0
- data/test/acceptance/bug_18914_test.rb +43 -0
- data/test/acceptance/bug_21465_test.rb +34 -0
- data/test/acceptance/bug_21563_test.rb +25 -0
- data/test/acceptance/expected_invocation_count_test.rb +196 -0
- data/test/acceptance/failure_messages_test.rb +64 -0
- data/test/acceptance/minitest_test.rb +153 -0
- data/test/acceptance/mocha_example_test.rb +98 -0
- data/test/acceptance/mocha_test_result_test.rb +84 -0
- data/test/acceptance/mock_test.rb +100 -0
- data/test/acceptance/mock_with_initializer_block_test.rb +51 -0
- data/test/acceptance/mocked_methods_dispatch_test.rb +78 -0
- data/test/acceptance/optional_parameters_test.rb +70 -0
- data/test/acceptance/parameter_matcher_test.rb +209 -0
- data/test/acceptance/partial_mocks_test.rb +47 -0
- data/test/acceptance/return_value_test.rb +52 -0
- data/test/acceptance/sequence_test.rb +186 -0
- data/test/acceptance/states_test.rb +70 -0
- data/test/acceptance/stub_any_instance_method_test.rb +195 -0
- data/test/acceptance/stub_class_method_test.rb +203 -0
- data/test/acceptance/stub_everything_test.rb +56 -0
- data/test/acceptance/stub_instance_method_test.rb +203 -0
- data/test/acceptance/stub_module_method_test.rb +163 -0
- data/test/acceptance/stub_test.rb +52 -0
- data/test/acceptance/stubba_example_test.rb +102 -0
- data/test/acceptance/stubba_test.rb +15 -0
- data/test/acceptance/stubba_test_result_test.rb +66 -0
- data/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
- data/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
- data/test/acceptance/stubbing_non_existent_class_method_test.rb +157 -0
- data/test/acceptance/stubbing_non_existent_instance_method_test.rb +147 -0
- data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
- data/test/acceptance/stubbing_non_public_class_method_test.rb +163 -0
- data/test/acceptance/stubbing_non_public_instance_method_test.rb +143 -0
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
- data/test/deprecation_disabler.rb +15 -0
- data/test/execution_point.rb +36 -0
- data/test/method_definer.rb +24 -0
- data/test/simple_counter.rb +13 -0
- data/test/test_helper.rb +25 -0
- data/test/test_runner.rb +33 -0
- data/test/unit/any_instance_method_test.rb +126 -0
- data/test/unit/array_inspect_test.rb +16 -0
- data/test/unit/backtrace_filter_test.rb +19 -0
- data/test/unit/cardinality_test.rb +56 -0
- data/test/unit/central_test.rb +65 -0
- data/test/unit/change_state_side_effect_test.rb +41 -0
- data/test/unit/class_method_test.rb +295 -0
- data/test/unit/configuration_test.rb +38 -0
- data/test/unit/date_time_inspect_test.rb +21 -0
- data/test/unit/exception_raiser_test.rb +42 -0
- data/test/unit/expectation_list_test.rb +57 -0
- data/test/unit/expectation_test.rb +480 -0
- data/test/unit/hash_inspect_test.rb +16 -0
- data/test/unit/in_state_ordering_constraint_test.rb +43 -0
- data/test/unit/metaclass_test.rb +22 -0
- data/test/unit/method_matcher_test.rb +23 -0
- data/test/unit/mock_test.rb +302 -0
- data/test/unit/mockery_test.rb +149 -0
- data/test/unit/multiple_yields_test.rb +18 -0
- data/test/unit/no_yields_test.rb +18 -0
- data/test/unit/object_inspect_test.rb +37 -0
- data/test/unit/object_test.rb +82 -0
- data/test/unit/parameter_matchers/all_of_test.rb +26 -0
- data/test/unit/parameter_matchers/any_of_test.rb +26 -0
- data/test/unit/parameter_matchers/anything_test.rb +21 -0
- data/test/unit/parameter_matchers/equals_test.rb +25 -0
- data/test/unit/parameter_matchers/has_entries_test.rb +51 -0
- data/test/unit/parameter_matchers/has_entry_test.rb +82 -0
- data/test/unit/parameter_matchers/has_key_test.rb +55 -0
- data/test/unit/parameter_matchers/has_value_test.rb +57 -0
- data/test/unit/parameter_matchers/includes_test.rb +44 -0
- data/test/unit/parameter_matchers/instance_of_test.rb +25 -0
- data/test/unit/parameter_matchers/is_a_test.rb +25 -0
- data/test/unit/parameter_matchers/kind_of_test.rb +25 -0
- data/test/unit/parameter_matchers/not_test.rb +26 -0
- data/test/unit/parameter_matchers/regexp_matches_test.rb +46 -0
- data/test/unit/parameter_matchers/responds_with_test.rb +25 -0
- data/test/unit/parameter_matchers/stub_matcher.rb +27 -0
- data/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
- data/test/unit/parameters_matcher_test.rb +121 -0
- data/test/unit/return_values_test.rb +63 -0
- data/test/unit/sequence_test.rb +104 -0
- data/test/unit/single_return_value_test.rb +14 -0
- data/test/unit/single_yield_test.rb +18 -0
- data/test/unit/state_machine_test.rb +98 -0
- data/test/unit/string_inspect_test.rb +11 -0
- data/test/unit/yield_parameters_test.rb +93 -0
- metadata +240 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'mocha/inspect'
|
3
|
+
|
4
|
+
class HashInspectTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_should_keep_spacing_between_key_value
|
7
|
+
hash = {:a => true}
|
8
|
+
assert_equal '{:a => true}', hash.mocha_inspect
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_should_use_mocha_inspect_on_each_item
|
12
|
+
hash = {:a => 'mocha'}
|
13
|
+
assert_equal "{:a => 'mocha'}", hash.mocha_inspect
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
|
3
|
+
require 'mocha/in_state_ordering_constraint'
|
4
|
+
|
5
|
+
class InStateOrderingConstraintTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include Mocha
|
8
|
+
|
9
|
+
class FakeStatePredicate
|
10
|
+
|
11
|
+
attr_writer :active, :description
|
12
|
+
|
13
|
+
def active?
|
14
|
+
@active
|
15
|
+
end
|
16
|
+
|
17
|
+
def mocha_inspect
|
18
|
+
@description
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_should_allow_invocation_when_state_is_active
|
24
|
+
state_predicate = FakeStatePredicate.new
|
25
|
+
ordering_constraint = InStateOrderingConstraint.new(state_predicate)
|
26
|
+
|
27
|
+
state_predicate.active = true
|
28
|
+
assert ordering_constraint.allows_invocation_now?
|
29
|
+
|
30
|
+
state_predicate.active = false
|
31
|
+
assert !ordering_constraint.allows_invocation_now?
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_describe_itself_in_terms_of_the_state_predicates_description
|
35
|
+
state_predicate = FakeStatePredicate.new
|
36
|
+
ordering_constraint = InStateOrderingConstraint.new(state_predicate)
|
37
|
+
|
38
|
+
state_predicate.description = 'the-state-predicate'
|
39
|
+
|
40
|
+
assert_equal 'when the-state-predicate', ordering_constraint.mocha_inspect
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'mocha/metaclass'
|
3
|
+
|
4
|
+
class MetaclassTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_should_return_objects_singleton_class
|
7
|
+
object = Object.new
|
8
|
+
assert_raises(NoMethodError) { object.success? }
|
9
|
+
|
10
|
+
object = Object.new
|
11
|
+
assert object.__metaclass__.ancestors.include?(Object)
|
12
|
+
assert object.__metaclass__.ancestors.include?(Kernel)
|
13
|
+
assert object.__metaclass__.is_a?(Class)
|
14
|
+
|
15
|
+
object.__metaclass__.class_eval { def success?; true; end }
|
16
|
+
assert object.success?
|
17
|
+
|
18
|
+
object = Object.new
|
19
|
+
assert_raises(NoMethodError) { object.success? }
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'mocha/method_matcher'
|
3
|
+
|
4
|
+
class MethodMatcherTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
include Mocha
|
7
|
+
|
8
|
+
def test_should_match_if_actual_method_name_is_same_as_expected_method_name
|
9
|
+
method_matcher = MethodMatcher.new(:method_name)
|
10
|
+
assert method_matcher.match?(:method_name)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_not_match_if_actual_method_name_is_not_same_as_expected_method_name
|
14
|
+
method_matcher = MethodMatcher.new(:method_name)
|
15
|
+
assert !method_matcher.match?(:different_method_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_describe_what_method_is_expected
|
19
|
+
method_matcher = MethodMatcher.new(:method_name)
|
20
|
+
assert_equal "method_name", method_matcher.mocha_inspect
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,302 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'mocha/mock'
|
3
|
+
require 'mocha/expectation_error'
|
4
|
+
require 'set'
|
5
|
+
require 'simple_counter'
|
6
|
+
|
7
|
+
class MockTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
include Mocha
|
10
|
+
|
11
|
+
def test_should_set_single_expectation
|
12
|
+
mock = Mock.new
|
13
|
+
mock.expects(:method1).returns(1)
|
14
|
+
assert_nothing_raised(ExpectationError) do
|
15
|
+
assert_equal 1, mock.method1
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_should_build_and_store_expectations
|
20
|
+
mock = Mock.new
|
21
|
+
expectation = mock.expects(:method1)
|
22
|
+
assert_not_nil expectation
|
23
|
+
assert_equal [expectation], mock.expectations.to_a
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_not_stub_everything_by_default
|
27
|
+
mock = Mock.new
|
28
|
+
assert_equal false, mock.everything_stubbed
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_should_stub_everything
|
32
|
+
mock = Mock.new
|
33
|
+
mock.stub_everything
|
34
|
+
assert_equal true, mock.everything_stubbed
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_be_able_to_extend_mock_object_with_module
|
38
|
+
mock = Mock.new
|
39
|
+
assert_nothing_raised(ExpectationError) { mock.extend(Module.new) }
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_be_equal
|
43
|
+
mock = Mock.new
|
44
|
+
assert_equal true, mock.eql?(mock)
|
45
|
+
end
|
46
|
+
|
47
|
+
if RUBY_VERSION < '1.9'
|
48
|
+
OBJECT_METHODS = STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS.reject { |m| m =~ /^__.*__$/ }
|
49
|
+
else
|
50
|
+
OBJECT_METHODS = STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS.reject { |m| m =~ /^__.*__$/ || m == :object_id }
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_should_be_able_to_mock_standard_object_methods
|
54
|
+
mock = Mock.new
|
55
|
+
OBJECT_METHODS.each { |method| mock.__expects__(method.to_sym).returns(method) }
|
56
|
+
OBJECT_METHODS.each { |method| assert_equal method, mock.__send__(method.to_sym) }
|
57
|
+
assert mock.__verified__?
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_should_be_able_to_stub_standard_object_methods
|
61
|
+
mock = Mock.new
|
62
|
+
OBJECT_METHODS.each { |method| mock.__stubs__(method.to_sym).returns(method) }
|
63
|
+
OBJECT_METHODS.each { |method| assert_equal method, mock.__send__(method.to_sym) }
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_should_create_and_add_expectations
|
67
|
+
mock = Mock.new
|
68
|
+
expectation1 = mock.expects(:method1)
|
69
|
+
expectation2 = mock.expects(:method2)
|
70
|
+
assert_equal [expectation1, expectation2].to_set, mock.expectations.to_set
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_should_pass_backtrace_into_expectation
|
74
|
+
mock = Mock.new
|
75
|
+
backtrace = Object.new
|
76
|
+
expectation = mock.expects(:method1, backtrace)
|
77
|
+
assert_equal backtrace, expectation.backtrace
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_should_pass_backtrace_into_stub
|
81
|
+
mock = Mock.new
|
82
|
+
backtrace = Object.new
|
83
|
+
stub = mock.stubs(:method1, backtrace)
|
84
|
+
assert_equal backtrace, stub.backtrace
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_should_create_and_add_stubs
|
88
|
+
mock = Mock.new
|
89
|
+
stub1 = mock.stubs(:method1)
|
90
|
+
stub2 = mock.stubs(:method2)
|
91
|
+
assert_equal [stub1, stub2].to_set, mock.expectations.to_set
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_should_invoke_expectation_and_return_result
|
95
|
+
mock = Mock.new
|
96
|
+
mock.expects(:my_method).returns(:result)
|
97
|
+
result = mock.my_method
|
98
|
+
assert_equal :result, result
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_should_not_raise_error_if_stubbing_everything
|
102
|
+
mock = Mock.new
|
103
|
+
mock.stub_everything
|
104
|
+
result = nil
|
105
|
+
assert_nothing_raised(ExpectationError) do
|
106
|
+
result = mock.unexpected_method
|
107
|
+
end
|
108
|
+
assert_nil result
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_should_raise_assertion_error_for_unexpected_method_call
|
112
|
+
mock = Mock.new
|
113
|
+
error = assert_raise(ExpectationError) do
|
114
|
+
mock.unexpected_method_called(:my_method, :argument1, :argument2)
|
115
|
+
end
|
116
|
+
assert_match(/unexpected invocation/, error.message)
|
117
|
+
assert_match(/my_method/, error.message)
|
118
|
+
assert_match(/argument1/, error.message)
|
119
|
+
assert_match(/argument2/, error.message)
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_should_not_verify_successfully_because_not_all_expectations_have_been_satisfied
|
123
|
+
mock = Mock.new
|
124
|
+
mock.expects(:method1)
|
125
|
+
mock.expects(:method2)
|
126
|
+
mock.method1
|
127
|
+
assert !mock.__verified__?
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_should_increment_assertion_counter_for_every_verified_expectation
|
131
|
+
mock = Mock.new
|
132
|
+
|
133
|
+
mock.expects(:method1)
|
134
|
+
mock.method1
|
135
|
+
|
136
|
+
mock.expects(:method2)
|
137
|
+
mock.method2
|
138
|
+
|
139
|
+
assertion_counter = SimpleCounter.new
|
140
|
+
|
141
|
+
mock.__verified__?(assertion_counter)
|
142
|
+
|
143
|
+
assert_equal 2, assertion_counter.count
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_should_yield_supplied_parameters_to_block
|
147
|
+
mock = Mock.new
|
148
|
+
parameters_for_yield = [1, 2, 3]
|
149
|
+
mock.expects(:method1).yields(*parameters_for_yield)
|
150
|
+
yielded_parameters = nil
|
151
|
+
mock.method1() { |*parameters| yielded_parameters = parameters }
|
152
|
+
assert_equal parameters_for_yield, yielded_parameters
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_should_set_up_multiple_expectations_with_return_values
|
156
|
+
mock = Mock.new
|
157
|
+
mock.expects(:method1 => :result1, :method2 => :result2)
|
158
|
+
assert_equal :result1, mock.method1
|
159
|
+
assert_equal :result2, mock.method2
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_should_set_up_multiple_stubs_with_return_values
|
163
|
+
mock = Mock.new
|
164
|
+
mock.stubs(:method1 => :result1, :method2 => :result2)
|
165
|
+
assert_equal :result1, mock.method1
|
166
|
+
assert_equal :result2, mock.method2
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_should_keep_returning_specified_value_for_stubs
|
170
|
+
mock = Mock.new
|
171
|
+
mock.stubs(:method1).returns(1)
|
172
|
+
assert_equal 1, mock.method1
|
173
|
+
assert_equal 1, mock.method1
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_should_keep_returning_specified_value_for_expects
|
177
|
+
mock = Mock.new
|
178
|
+
mock.expects(:method1).times(2).returns(1)
|
179
|
+
assert_equal 1, mock.method1
|
180
|
+
assert_equal 1, mock.method1
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_should_match_most_recent_call_to_expects
|
184
|
+
mock = Mock.new
|
185
|
+
mock.expects(:method1).returns(0)
|
186
|
+
mock.expects(:method1).returns(1)
|
187
|
+
assert_equal 1, mock.method1
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_should_match_most_recent_call_to_stubs
|
191
|
+
mock = Mock.new
|
192
|
+
mock.stubs(:method1).returns(0)
|
193
|
+
mock.stubs(:method1).returns(1)
|
194
|
+
assert_equal 1, mock.method1
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_should_match_most_recent_call_to_stubs_or_expects
|
198
|
+
mock = Mock.new
|
199
|
+
mock.stubs(:method1).returns(0)
|
200
|
+
mock.expects(:method1).returns(1)
|
201
|
+
assert_equal 1, mock.method1
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_should_match_most_recent_call_to_expects_or_stubs
|
205
|
+
mock = Mock.new
|
206
|
+
mock.expects(:method1).returns(0)
|
207
|
+
mock.stubs(:method1).returns(1)
|
208
|
+
assert_equal 1, mock.method1
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_should_respond_to_expected_method
|
212
|
+
mock = Mock.new
|
213
|
+
mock.expects(:method1)
|
214
|
+
assert_equal true, mock.respond_to?(:method1)
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_should_not_respond_to_unexpected_method
|
218
|
+
mock = Mock.new
|
219
|
+
assert_equal false, mock.respond_to?(:method1)
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_should_respond_to_methods_which_the_responder_does_responds_to
|
223
|
+
instance = Class.new do
|
224
|
+
define_method(:respond_to?) { |symbol| true }
|
225
|
+
end.new
|
226
|
+
mock = Mock.new
|
227
|
+
mock.responds_like(instance)
|
228
|
+
assert_equal true, mock.respond_to?(:invoked_method)
|
229
|
+
end
|
230
|
+
|
231
|
+
def test_should_not_respond_to_methods_which_the_responder_does_not_responds_to
|
232
|
+
instance = Class.new do
|
233
|
+
define_method(:respond_to?) { |symbol| false }
|
234
|
+
end.new
|
235
|
+
mock = Mock.new
|
236
|
+
mock.responds_like(instance)
|
237
|
+
assert_equal false, mock.respond_to?(:invoked_method)
|
238
|
+
end
|
239
|
+
|
240
|
+
def test_should_return_itself_to_allow_method_chaining
|
241
|
+
mock = Mock.new
|
242
|
+
assert_same mock.responds_like(Object.new), mock
|
243
|
+
end
|
244
|
+
|
245
|
+
def test_should_not_raise_no_method_error_if_mock_is_not_restricted_to_respond_like_a_responder
|
246
|
+
instance = Class.new do
|
247
|
+
define_method(:respond_to?) { true }
|
248
|
+
end.new
|
249
|
+
mock = Mock.new
|
250
|
+
mock.stubs(:invoked_method)
|
251
|
+
assert_nothing_raised(NoMethodError) { mock.invoked_method }
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_should_not_raise_no_method_error_if_responder_does_respond_to_invoked_method
|
255
|
+
instance = Class.new do
|
256
|
+
define_method(:respond_to?) { |symbol| true }
|
257
|
+
end.new
|
258
|
+
mock = Mock.new
|
259
|
+
mock.responds_like(instance)
|
260
|
+
mock.stubs(:invoked_method)
|
261
|
+
assert_nothing_raised(NoMethodError) { mock.invoked_method }
|
262
|
+
end
|
263
|
+
|
264
|
+
def test_should_raise_no_method_error_if_responder_does_not_respond_to_invoked_method
|
265
|
+
instance = Class.new do
|
266
|
+
define_method(:respond_to?) { |symbol| false }
|
267
|
+
define_method(:mocha_inspect) { 'mocha_inspect' }
|
268
|
+
end.new
|
269
|
+
mock = Mock.new
|
270
|
+
mock.responds_like(instance)
|
271
|
+
mock.stubs(:invoked_method)
|
272
|
+
assert_raises(NoMethodError) { mock.invoked_method }
|
273
|
+
end
|
274
|
+
|
275
|
+
def test_should_raise_no_method_error_with_message_indicating_that_mock_is_constrained_to_respond_like_responder
|
276
|
+
instance = Class.new do
|
277
|
+
define_method(:respond_to?) { |symbol| false }
|
278
|
+
define_method(:mocha_inspect) { 'mocha_inspect' }
|
279
|
+
end.new
|
280
|
+
mock = Mock.new
|
281
|
+
mock.responds_like(instance)
|
282
|
+
mock.stubs(:invoked_method)
|
283
|
+
begin
|
284
|
+
mock.invoked_method
|
285
|
+
rescue NoMethodError => e
|
286
|
+
assert_match(/which responds like mocha_inspect/, e.message)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
def test_should_handle_respond_to_with_private_methods_param_without_error
|
291
|
+
mock = Mock.new
|
292
|
+
assert_nothing_raised{ mock.respond_to?(:object_id, false) }
|
293
|
+
end
|
294
|
+
|
295
|
+
def test_should_respond_to_any_method_if_stubbing_everything
|
296
|
+
mock = Mock.new
|
297
|
+
mock.stub_everything
|
298
|
+
assert mock.respond_to?(:abc)
|
299
|
+
assert mock.respond_to?(:xyz)
|
300
|
+
end
|
301
|
+
|
302
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'mocha/mockery'
|
3
|
+
require 'mocha/state_machine'
|
4
|
+
|
5
|
+
class MockeryTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include Mocha
|
8
|
+
|
9
|
+
def test_should_build_instance_of_mockery
|
10
|
+
mockery = Mockery.instance
|
11
|
+
assert_not_nil mockery
|
12
|
+
assert_kind_of Mockery, mockery
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_cache_instance_of_mockery
|
16
|
+
mockery_1 = Mockery.instance
|
17
|
+
mockery_2 = Mockery.instance
|
18
|
+
assert_same mockery_1, mockery_2
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_expire_mockery_instance_cache
|
22
|
+
mockery_1 = Mockery.instance
|
23
|
+
Mockery.reset_instance
|
24
|
+
mockery_2 = Mockery.instance
|
25
|
+
assert_not_same mockery_1, mockery_2
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_should_raise_expectation_error_because_not_all_expectations_are_satisfied
|
29
|
+
mockery = Mockery.new
|
30
|
+
mock_1 = mockery.named_mock('mock-1') { expects(:method_1) }
|
31
|
+
mock_2 = mockery.named_mock('mock-2') { expects(:method_2) }
|
32
|
+
1.times { mock_1.method_1 }
|
33
|
+
0.times { mock_2.method_2 }
|
34
|
+
assert_raises(ExpectationError) { mockery.verify }
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_reset_list_of_mocks_on_teardown
|
38
|
+
mockery = Mockery.new
|
39
|
+
mock = mockery.unnamed_mock { expects(:my_method) }
|
40
|
+
mockery.teardown
|
41
|
+
assert_nothing_raised(ExpectationError) { mockery.verify }
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_build_instance_of_stubba_on_instantiation
|
45
|
+
mockery = Mockery.new
|
46
|
+
assert_not_nil mockery.stubba
|
47
|
+
assert_kind_of Central, mockery.stubba
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_build_new_instance_of_stubba_on_teardown
|
51
|
+
mockery = Mockery.new
|
52
|
+
stubba_1 = mockery.stubba
|
53
|
+
mockery.teardown
|
54
|
+
stubba_2 = mockery.stubba
|
55
|
+
assert_not_same stubba_1, stubba_2
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_should_build_and_store_new_state_machine
|
59
|
+
mockery = Mockery.new
|
60
|
+
mockery.new_state_machine('state-machine-name')
|
61
|
+
assert_equal 1, mockery.state_machines.length
|
62
|
+
assert_kind_of StateMachine, mockery.state_machines[0]
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_should_reset_list_of_state_machines_on_teardown
|
66
|
+
mockery = Mockery.new
|
67
|
+
mockery.new_state_machine('state-machine-name')
|
68
|
+
mockery.teardown
|
69
|
+
assert_equal 0, mockery.state_machines.length
|
70
|
+
end
|
71
|
+
|
72
|
+
class FakeMethod
|
73
|
+
def stub; end
|
74
|
+
def unstub; end
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_should_unstub_all_methods_on_teardown
|
78
|
+
mockery = Mockery.new
|
79
|
+
stubba = mockery.stubba
|
80
|
+
stubba.stub(FakeMethod.new)
|
81
|
+
mockery.teardown
|
82
|
+
assert stubba.stubba_methods.empty?
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_should_display_object_id_for_mocha_inspect_if_mock_has_no_name
|
86
|
+
mockery = Mockery.new
|
87
|
+
mock = mockery.unnamed_mock
|
88
|
+
assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,12}>$"), mock.mocha_inspect
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_should_display_object_id_for_inspect_if_mock_has_no_name
|
92
|
+
mockery = Mockery.new
|
93
|
+
mock = mockery.unnamed_mock
|
94
|
+
assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,12}>$"), mock.inspect
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_should_display_name_for_mocha_inspect_if_mock_has_string_name
|
98
|
+
mockery = Mockery.new
|
99
|
+
mock = mockery.named_mock('named_mock')
|
100
|
+
assert_equal "#<Mock:named_mock>", mock.mocha_inspect
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_should_display_name_for_mocha_inspect_if_mock_has_symbol_name
|
104
|
+
mockery = Mockery.new
|
105
|
+
mock = mockery.named_mock(:named_mock)
|
106
|
+
assert_equal "#<Mock:named_mock>", mock.mocha_inspect
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_should_display_name_for_inspect_if_mock_has_string_name
|
110
|
+
mockery = Mockery.new
|
111
|
+
mock = mockery.named_mock('named_mock')
|
112
|
+
assert_equal "#<Mock:named_mock>", mock.inspect
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_should_display_name_for_inspect_if_mock_has_symbol_name
|
116
|
+
mockery = Mockery.new
|
117
|
+
mock = mockery.named_mock(:named_mock)
|
118
|
+
assert_equal "#<Mock:named_mock>", mock.inspect
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_should_display_impersonated_object_for_mocha_inspect
|
122
|
+
mockery = Mockery.new
|
123
|
+
instance = Object.new
|
124
|
+
mock = mockery.mock_impersonating(instance)
|
125
|
+
assert_equal "#{instance.mocha_inspect}", mock.mocha_inspect
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_should_display_impersonated_object_for_inspect
|
129
|
+
mockery = Mockery.new
|
130
|
+
instance = Object.new
|
131
|
+
mock = mockery.mock_impersonating(instance)
|
132
|
+
assert_equal "#{instance.mocha_inspect}", mock.inspect
|
133
|
+
end
|
134
|
+
|
135
|
+
class FakeClass; end
|
136
|
+
|
137
|
+
def test_should_display_any_instance_prefix_followed_by_class_whose_instances_are_being_impersonated_for_mocha_inspect
|
138
|
+
mockery = Mockery.new
|
139
|
+
mock = mockery.mock_impersonating_any_instance_of(FakeClass)
|
140
|
+
assert_equal "#<AnyInstance:MockeryTest::FakeClass>", mock.mocha_inspect
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_should_display_any_instance_prefix_followed_by_class_whose_instances_are_being_impersonated_for_inspect
|
144
|
+
mockery = Mockery.new
|
145
|
+
mock = mockery.mock_impersonating_any_instance_of(FakeClass)
|
146
|
+
assert_equal "#<AnyInstance:MockeryTest::FakeClass>", mock.inspect
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|