mocha 0.5.5 → 0.5.6
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/Rakefile +3 -1
- data/examples/misc.rb +44 -36
- data/examples/stubba.rb +1 -1
- data/lib/mocha/auto_verify.rb +38 -31
- data/lib/mocha/central.rb +1 -1
- data/lib/mocha/class_method.rb +5 -1
- data/lib/mocha/expectation.rb +63 -61
- data/lib/mocha/expectation_error.rb +9 -0
- data/lib/mocha/expectation_list.rb +11 -10
- data/lib/mocha/method_matcher.rb +21 -0
- data/lib/mocha/missing_expectation.rb +5 -15
- data/lib/mocha/mock.rb +28 -26
- data/lib/mocha/parameter_matchers.rb +17 -1
- data/lib/mocha/parameter_matchers/all_of.rb +6 -3
- data/lib/mocha/parameter_matchers/any_of.rb +6 -3
- data/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
- data/lib/mocha/parameter_matchers/anything.rb +5 -2
- 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 +42 -0
- data/lib/mocha/parameter_matchers/has_entry.rb +20 -4
- data/lib/mocha/parameter_matchers/has_key.rb +5 -2
- data/lib/mocha/parameter_matchers/has_value.rb +5 -2
- data/lib/mocha/parameter_matchers/includes.rb +5 -2
- data/lib/mocha/parameter_matchers/instance_of.rb +5 -2
- data/lib/mocha/parameter_matchers/is_a.rb +42 -0
- data/lib/mocha/parameter_matchers/kind_of.rb +5 -2
- data/lib/mocha/parameter_matchers/not.rb +42 -0
- data/lib/mocha/parameter_matchers/object.rb +9 -0
- data/lib/mocha/parameter_matchers/optionally.rb +33 -0
- data/lib/mocha/parameter_matchers/regexp_matches.rb +5 -2
- data/lib/mocha/parameters_matcher.rb +37 -0
- data/lib/mocha/pretty_parameters.rb +1 -1
- data/lib/mocha/return_values.rb +7 -4
- data/lib/mocha/sequence.rb +42 -0
- data/lib/mocha/yield_parameters.rb +3 -3
- data/test/acceptance/expected_invocation_count_acceptance_test.rb +8 -8
- data/test/acceptance/mock_with_initializer_block_acceptance_test.rb +44 -0
- data/test/acceptance/optional_parameters_acceptance_test.rb +63 -0
- data/test/acceptance/parameter_matcher_acceptance_test.rb +38 -2
- data/test/acceptance/partial_mocks_acceptance_test.rb +40 -0
- data/test/acceptance/sequence_acceptance_test.rb +179 -0
- data/test/integration/mocha_test_result_integration_test.rb +3 -3
- data/test/integration/stubba_integration_test.rb +2 -2
- data/test/integration/stubba_test_result_integration_test.rb +2 -2
- data/test/test_runner.rb +2 -2
- data/test/unit/any_instance_method_test.rb +2 -0
- data/test/unit/auto_verify_test.rb +10 -3
- data/test/unit/central_test.rb +1 -1
- data/test/unit/class_method_test.rb +4 -0
- data/test/unit/expectation_error_test.rb +24 -0
- data/test/unit/expectation_list_test.rb +6 -0
- data/test/unit/expectation_test.rb +111 -27
- data/test/unit/method_matcher_test.rb +23 -0
- data/test/unit/missing_expectation_test.rb +24 -27
- data/test/unit/mock_test.rb +29 -22
- data/test/unit/object_inspect_test.rb +4 -2
- data/test/unit/parameter_matchers/all_of_test.rb +2 -2
- data/test/unit/parameter_matchers/any_of_test.rb +2 -2
- data/test/unit/parameter_matchers/anything_test.rb +2 -2
- data/test/unit/parameter_matchers/has_entries_test.rb +30 -0
- data/test/unit/parameter_matchers/has_entry_test.rb +20 -5
- data/test/unit/parameter_matchers/has_key_test.rb +2 -2
- data/test/unit/parameter_matchers/has_value_test.rb +2 -2
- data/test/unit/parameter_matchers/includes_test.rb +2 -2
- data/test/unit/parameter_matchers/instance_of_test.rb +2 -2
- data/test/unit/parameter_matchers/is_a_test.rb +25 -0
- data/test/unit/parameter_matchers/kind_of_test.rb +3 -3
- data/test/unit/parameter_matchers/not_test.rb +26 -0
- data/test/unit/parameter_matchers/regexp_matches_test.rb +2 -2
- data/test/unit/parameter_matchers/stub_matcher.rb +2 -1
- data/test/unit/parameters_matcher_test.rb +121 -0
- data/test/unit/sequence_test.rb +104 -0
- metadata +35 -6
- data/test/unit/pretty_parameters_test.rb +0 -32
data/test/test_runner.rb
CHANGED
@@ -20,8 +20,8 @@ module TestRunner
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def assert_passed(test_result)
|
23
|
-
flunk "Test failed unexpectedly with message: #{test_result.failures
|
24
|
-
flunk "Test failed unexpectedly with message: #{test_result.errors
|
23
|
+
flunk "Test failed unexpectedly with message: #{test_result.failures}" if test_result.failure_count > 0
|
24
|
+
flunk "Test failed unexpectedly with message: #{test_result.errors}" if test_result.error_count > 0
|
25
25
|
end
|
26
26
|
|
27
27
|
def assert_failed(test_result)
|
@@ -36,6 +36,7 @@ class AnyInstanceMethodTest < Test::Unit::TestCase
|
|
36
36
|
any_instance.define_instance_method(:mocha) { mocha }
|
37
37
|
klass.define_instance_method(:any_instance) { any_instance }
|
38
38
|
|
39
|
+
method.hide_original_method
|
39
40
|
method.define_new_method
|
40
41
|
|
41
42
|
instance = klass.new
|
@@ -51,6 +52,7 @@ class AnyInstanceMethodTest < Test::Unit::TestCase
|
|
51
52
|
hidden_method_x = method.hidden_method.to_sym
|
52
53
|
klass.send(:define_method, hidden_method_x, Proc.new { :original_result })
|
53
54
|
|
55
|
+
method.remove_new_method
|
54
56
|
method.restore_original_method
|
55
57
|
|
56
58
|
instance = klass.new
|
@@ -9,7 +9,6 @@ class AutoVerifyTest < Test::Unit::TestCase
|
|
9
9
|
def setup
|
10
10
|
@test_case = Object.new
|
11
11
|
class << test_case
|
12
|
-
def self.add_teardown_method(symbol); end
|
13
12
|
include Mocha::AutoVerify
|
14
13
|
end
|
15
14
|
end
|
@@ -38,7 +37,7 @@ class AutoVerifyTest < Test::Unit::TestCase
|
|
38
37
|
|
39
38
|
def test_should_build_stub_that_stubs_all_methods
|
40
39
|
stub = test_case.stub_everything
|
41
|
-
assert stub.
|
40
|
+
assert stub.everything_stubbed
|
42
41
|
end
|
43
42
|
|
44
43
|
def test_should_add_expectations_to_stub_that_stubs_all_methods
|
@@ -78,7 +77,11 @@ class AutoVerifyTest < Test::Unit::TestCase
|
|
78
77
|
mocks = Array.new(3) do
|
79
78
|
mock = Object.new
|
80
79
|
mock.define_instance_accessor(:verify_called)
|
81
|
-
|
80
|
+
class << mock
|
81
|
+
def verify(&block)
|
82
|
+
self.verify_called = true
|
83
|
+
end
|
84
|
+
end
|
82
85
|
mock
|
83
86
|
end
|
84
87
|
test_case.replace_instance_method(:mocks) { mocks }
|
@@ -119,4 +122,8 @@ class AutoVerifyTest < Test::Unit::TestCase
|
|
119
122
|
assert_equal '#<Mock:named_stub>', stub.mocha_inspect
|
120
123
|
end
|
121
124
|
|
125
|
+
def test_should_build_sequence
|
126
|
+
assert_not_nil test_case.sequence('name')
|
127
|
+
end
|
128
|
+
|
122
129
|
end
|
data/test/unit/central_test.rb
CHANGED
@@ -72,7 +72,7 @@ class CentralTest < Test::Unit::TestCase
|
|
72
72
|
stubba = Central.new
|
73
73
|
stubba.stubba_methods = [method_1, method_2]
|
74
74
|
|
75
|
-
assert_equal 2, stubba.unique_mocks.
|
75
|
+
assert_equal 2, stubba.unique_mocks.length
|
76
76
|
assert stubba.unique_mocks.include?(:mock_1)
|
77
77
|
assert stubba.unique_mocks.include?(:mock_2)
|
78
78
|
end
|
@@ -90,6 +90,7 @@ class ClassMethodTest < Test::Unit::TestCase
|
|
90
90
|
mocha.expects(:method_x).with(:param1, :param2).returns(:result)
|
91
91
|
method = ClassMethod.new(klass, :method_x)
|
92
92
|
|
93
|
+
method.hide_original_method
|
93
94
|
method.define_new_method
|
94
95
|
result = klass.method_x(:param1, :param2)
|
95
96
|
|
@@ -112,6 +113,7 @@ class ClassMethodTest < Test::Unit::TestCase
|
|
112
113
|
hidden_method_x = method.hidden_method.to_sym
|
113
114
|
klass.define_instance_method(hidden_method_x) { :original_result }
|
114
115
|
|
116
|
+
method.remove_new_method
|
115
117
|
method.restore_original_method
|
116
118
|
|
117
119
|
assert_equal :original_result, klass.method_x
|
@@ -130,6 +132,7 @@ class ClassMethodTest < Test::Unit::TestCase
|
|
130
132
|
def test_should_call_hide_original_method
|
131
133
|
klass = Class.new { def self.method_x; end }
|
132
134
|
method = ClassMethod.new(klass, :method_x)
|
135
|
+
method.hide_original_method
|
133
136
|
method.define_instance_accessor(:hide_called)
|
134
137
|
method.replace_instance_method(:hide_original_method) { self.hide_called = true }
|
135
138
|
|
@@ -189,6 +192,7 @@ class ClassMethodTest < Test::Unit::TestCase
|
|
189
192
|
mocha = Object.new
|
190
193
|
stubbee = Object.new
|
191
194
|
stubbee.define_instance_accessor(:mocha) { mocha }
|
195
|
+
stubbee.mocha = nil
|
192
196
|
method = ClassMethod.new(stubbee, :method_name)
|
193
197
|
assert_equal stubbee.mocha, method.mock
|
194
198
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'mocha/expectation_error'
|
3
|
+
|
4
|
+
class ExpectationErrorTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
include Mocha
|
7
|
+
|
8
|
+
def test_should_exclude_mocha_locations_from_backtrace
|
9
|
+
mocha_lib = "/username/workspace/mocha_wibble/lib/"
|
10
|
+
backtrace = [ mocha_lib + 'exclude/me/1', mocha_lib + 'exclude/me/2', '/keep/me', mocha_lib + 'exclude/me/3']
|
11
|
+
expectation_error = ExpectationError.new(nil, backtrace, mocha_lib)
|
12
|
+
assert_equal ['/keep/me'], expectation_error.backtrace
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_determine_path_for_mocha_lib_directory
|
16
|
+
assert_match Regexp.new("/lib/$"), ExpectationError::LIB_DIRECTORY
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_should_set_error_message
|
20
|
+
expectation_error = ExpectationError.new('message')
|
21
|
+
assert_equal 'message', expectation_error.message
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -8,6 +8,12 @@ class ExpectationListTest < Test::Unit::TestCase
|
|
8
8
|
|
9
9
|
include Mocha
|
10
10
|
|
11
|
+
def test_should_return_added_expectation
|
12
|
+
expectation_list = ExpectationList.new
|
13
|
+
expectation = Expectation.new(nil, :my_method)
|
14
|
+
assert_same expectation, expectation_list.add(expectation)
|
15
|
+
end
|
16
|
+
|
11
17
|
def test_should_find_matching_expectation
|
12
18
|
expectation_list = ExpectationList.new
|
13
19
|
expectation1 = Expectation.new(nil, :my_method).with(:argument1, :argument2)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
2
|
require 'method_definer'
|
3
3
|
require 'mocha/expectation'
|
4
|
+
require 'mocha/sequence'
|
4
5
|
require 'execution_point'
|
5
6
|
require 'deprecation_disabler'
|
6
7
|
|
@@ -357,43 +358,126 @@ class ExpectationTest < Test::Unit::TestCase
|
|
357
358
|
assert_equal execution_point, ExecutionPoint.new(error.backtrace)
|
358
359
|
end
|
359
360
|
|
360
|
-
def
|
361
|
+
def test_should_display_expectation_in_exception_message
|
361
362
|
options = [:a, :b, {:c => 1, :d => 2}]
|
362
363
|
expectation = new_expectation.with(*options)
|
363
|
-
exception = assert_raise(ExpectationError) {
|
364
|
-
expectation.verify
|
365
|
-
}
|
364
|
+
exception = assert_raise(ExpectationError) { expectation.verify }
|
366
365
|
assert exception.message.include?(expectation.method_signature)
|
367
366
|
end
|
368
367
|
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
368
|
+
class FakeMock
|
369
|
+
|
370
|
+
def initialize(name)
|
371
|
+
@name = name
|
372
|
+
end
|
373
|
+
|
374
|
+
def mocha_inspect
|
375
|
+
@name
|
376
|
+
end
|
377
|
+
|
377
378
|
end
|
378
379
|
|
379
|
-
def
|
380
|
-
mock =
|
381
|
-
|
380
|
+
def test_should_raise_error_with_message_indicating_which_method_was_expected_to_be_called_on_which_mock_object_with_which_parameters_and_in_what_sequences
|
381
|
+
mock = FakeMock.new('mock')
|
382
|
+
sequence_one = Sequence.new('one')
|
383
|
+
sequence_two = Sequence.new('two')
|
384
|
+
expectation = Expectation.new(mock, :expected_method).with(1, 2, {'a' => true, :b => false}, [1, 2, 3]).in_sequence(sequence_one, sequence_two)
|
382
385
|
e = assert_raise(ExpectationError) { expectation.verify }
|
383
|
-
assert_match "mock.expected_method", e.message
|
386
|
+
assert_match "mock.expected_method(1, 2, {'a' => true, :b => false}, [1, 2, 3]); in sequence 'one'; in sequence 'two'", e.message
|
387
|
+
end
|
388
|
+
|
389
|
+
class FakeConstraint
|
390
|
+
|
391
|
+
def initialize(allows_invocation_now)
|
392
|
+
@allows_invocation_now = allows_invocation_now
|
393
|
+
end
|
394
|
+
|
395
|
+
def allows_invocation_now?
|
396
|
+
@allows_invocation_now
|
397
|
+
end
|
398
|
+
|
399
|
+
end
|
400
|
+
|
401
|
+
def test_should_be_in_correct_order_if_all_ordering_constraints_allow_invocation_now
|
402
|
+
constraint_one = FakeConstraint.new(allows_invocation_now = true)
|
403
|
+
constraint_two = FakeConstraint.new(allows_invocation_now = true)
|
404
|
+
expectation = Expectation.new(nil, :method_one)
|
405
|
+
expectation.add_ordering_constraint(constraint_one)
|
406
|
+
expectation.add_ordering_constraint(constraint_two)
|
407
|
+
assert expectation.in_correct_order?
|
408
|
+
end
|
409
|
+
|
410
|
+
def test_should_not_be_in_correct_order_if_one_ordering_constraint_does_not_allow_invocation_now
|
411
|
+
constraint_one = FakeConstraint.new(allows_invocation_now = true)
|
412
|
+
constraint_two = FakeConstraint.new(allows_invocation_now = false)
|
413
|
+
expectation = Expectation.new(nil, :method_one)
|
414
|
+
expectation.add_ordering_constraint(constraint_one)
|
415
|
+
expectation.add_ordering_constraint(constraint_two)
|
416
|
+
assert !expectation.in_correct_order?
|
417
|
+
end
|
418
|
+
|
419
|
+
def test_should_match_if_all_ordering_constraints_allow_invocation_now
|
420
|
+
constraint_one = FakeConstraint.new(allows_invocation_now = true)
|
421
|
+
constraint_two = FakeConstraint.new(allows_invocation_now = true)
|
422
|
+
expectation = Expectation.new(nil, :method_one)
|
423
|
+
expectation.add_ordering_constraint(constraint_one)
|
424
|
+
expectation.add_ordering_constraint(constraint_two)
|
425
|
+
assert expectation.match?(:method_one)
|
384
426
|
end
|
385
|
-
|
386
|
-
def
|
387
|
-
|
388
|
-
|
389
|
-
expectation = Expectation.new(nil, :
|
390
|
-
expectation.
|
391
|
-
|
427
|
+
|
428
|
+
def test_should_not_match_if_one_ordering_constraints_does_not_allow_invocation_now
|
429
|
+
constraint_one = FakeConstraint.new(allows_invocation_now = true)
|
430
|
+
constraint_two = FakeConstraint.new(allows_invocation_now = false)
|
431
|
+
expectation = Expectation.new(nil, :method_one)
|
432
|
+
expectation.add_ordering_constraint(constraint_one)
|
433
|
+
expectation.add_ordering_constraint(constraint_two)
|
434
|
+
assert !expectation.match?(:method_one)
|
392
435
|
end
|
393
|
-
|
394
|
-
def
|
395
|
-
expectation =
|
396
|
-
|
436
|
+
|
437
|
+
def test_should_not_be_satisfied_when_required_invocation_has_not_been_made
|
438
|
+
expectation = Expectation.new(nil, :method_one).times(1)
|
439
|
+
assert !expectation.satisfied?
|
440
|
+
end
|
441
|
+
|
442
|
+
def test_should_be_satisfied_when_required_invocation_has_been_made
|
443
|
+
expectation = Expectation.new(nil, :method_one).times(1)
|
444
|
+
expectation.invoke
|
445
|
+
assert expectation.satisfied?
|
446
|
+
end
|
447
|
+
|
448
|
+
def test_should_not_be_satisfied_when_minimum_number_of_invocations_has_not_been_made
|
449
|
+
expectation = Expectation.new(nil, :method_one).at_least(2)
|
450
|
+
expectation.invoke
|
451
|
+
assert !expectation.satisfied?
|
452
|
+
end
|
453
|
+
|
454
|
+
def test_should_be_satisfied_when_minimum_number_of_invocations_has_been_made
|
455
|
+
expectation = Expectation.new(nil, :method_one).at_least(2)
|
456
|
+
2.times { expectation.invoke }
|
457
|
+
assert expectation.satisfied?
|
458
|
+
end
|
459
|
+
|
460
|
+
class FakeSequence
|
461
|
+
|
462
|
+
attr_reader :expectations
|
463
|
+
|
464
|
+
def initialize
|
465
|
+
@expectations = []
|
466
|
+
end
|
467
|
+
|
468
|
+
def constrain_as_next_in_sequence(expectation)
|
469
|
+
@expectations << expectation
|
470
|
+
end
|
471
|
+
|
472
|
+
end
|
473
|
+
|
474
|
+
def test_should_tell_sequences_to_constrain_expectation_as_next_in_sequence
|
475
|
+
sequence_one = FakeSequence.new
|
476
|
+
sequence_two = FakeSequence.new
|
477
|
+
expectation = Expectation.new(nil, :method_one)
|
478
|
+
assert_equal expectation, expectation.in_sequence(sequence_one, sequence_two)
|
479
|
+
assert_equal [expectation], sequence_one.expectations
|
480
|
+
assert_equal [expectation], sequence_two.expectations
|
397
481
|
end
|
398
482
|
|
399
483
|
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
|
@@ -1,45 +1,42 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
2
|
|
3
3
|
require 'mocha/missing_expectation'
|
4
|
-
require '
|
4
|
+
require 'mocha/mock'
|
5
5
|
|
6
|
-
class
|
6
|
+
class MissingExpectationTest < Test::Unit::TestCase
|
7
7
|
|
8
8
|
include Mocha
|
9
9
|
|
10
|
-
def test_should_find_similar_expectations_on_mock
|
11
|
-
mock = Object.new
|
12
|
-
missing_expectation = MissingExpectation.new(mock, :expected_method)
|
13
|
-
method_names = []
|
14
|
-
similar_expectations = [Expectation.new(mock, :expected_method)]
|
15
|
-
mock.define_instance_method(:similar_expectations) { |method_name| method_names << method_name; similar_expectations }
|
16
|
-
assert_equal similar_expectations, missing_expectation.similar_expectations
|
17
|
-
assert_equal [:expected_method], method_names
|
18
|
-
end
|
19
|
-
|
20
10
|
def test_should_report_similar_expectations
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
mock.define_instance_method(:similar_expectations) { [expectation_1, expectation_2] }
|
26
|
-
mock.define_instance_method(:mocha_inspect) { 'mocha_inspect' }
|
11
|
+
mock = Mock.new
|
12
|
+
expectation_1 = mock.expects(:method_one).with(1)
|
13
|
+
expectation_2 = mock.expects(:method_one).with(1, 1)
|
14
|
+
expectation_3 = mock.expects(:method_two).with(2)
|
27
15
|
|
28
|
-
missing_expectation = MissingExpectation.new(mock, :
|
29
|
-
|
16
|
+
missing_expectation = MissingExpectation.new(mock, :method_one)
|
30
17
|
exception = assert_raise(ExpectationError) { missing_expectation.verify }
|
31
|
-
|
18
|
+
|
19
|
+
expected_message = [
|
20
|
+
"#{missing_expectation.error_message(0, 1)}",
|
21
|
+
"Similar expectations:",
|
22
|
+
"#{expectation_1.method_signature}",
|
23
|
+
"#{expectation_2.method_signature}"
|
24
|
+
].join("\n")
|
25
|
+
|
26
|
+
assert_equal expected_message, exception.message
|
32
27
|
end
|
33
28
|
|
34
29
|
def test_should_not_report_similar_expectations_if_there_are_none
|
35
|
-
mock =
|
36
|
-
mock.
|
37
|
-
mock.
|
30
|
+
mock = Mock.new
|
31
|
+
mock.expects(:method_two).with(2)
|
32
|
+
mock.expects(:method_two).with(2, 2)
|
38
33
|
|
39
|
-
missing_expectation = MissingExpectation.new(mock, :
|
40
|
-
|
34
|
+
missing_expectation = MissingExpectation.new(mock, :method_one)
|
41
35
|
exception = assert_raise(ExpectationError) { missing_expectation.verify }
|
42
|
-
|
36
|
+
|
37
|
+
expected_message = "#{missing_expectation.error_message(0, 1)}"
|
38
|
+
|
39
|
+
assert_equal expected_message, exception.message
|
43
40
|
end
|
44
41
|
|
45
42
|
end
|
data/test/unit/mock_test.rb
CHANGED
@@ -24,31 +24,32 @@ class MockTest < Test::Unit::TestCase
|
|
24
24
|
|
25
25
|
def test_should_not_stub_everything_by_default
|
26
26
|
mock = Mock.new
|
27
|
-
assert_equal false, mock.
|
27
|
+
assert_equal false, mock.everything_stubbed
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_should_stub_everything
|
31
|
-
mock = Mock.new
|
32
|
-
|
31
|
+
mock = Mock.new
|
32
|
+
mock.stub_everything
|
33
|
+
assert_equal true, mock.everything_stubbed
|
33
34
|
end
|
34
35
|
|
35
36
|
def test_should_display_object_id_for_mocha_inspect_if_mock_has_no_name
|
36
37
|
mock = Mock.new
|
37
|
-
assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,
|
38
|
+
assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,12}>$"), mock.mocha_inspect
|
38
39
|
end
|
39
40
|
|
40
41
|
def test_should_display_name_for_mocha_inspect_if_mock_has_name
|
41
|
-
mock = Mock.new(
|
42
|
+
mock = Mock.new('named_mock')
|
42
43
|
assert_equal "#<Mock:named_mock>", mock.mocha_inspect
|
43
44
|
end
|
44
45
|
|
45
46
|
def test_should_display_object_id_for_inspect_if_mock_has_no_name
|
46
47
|
mock = Mock.new
|
47
|
-
assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,
|
48
|
+
assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,12}>$"), mock.inspect
|
48
49
|
end
|
49
50
|
|
50
51
|
def test_should_display_name_for_inspect_if_mock_has_name
|
51
|
-
mock = Mock.new(
|
52
|
+
mock = Mock.new('named_mock')
|
52
53
|
assert_equal "#<Mock:named_mock>", mock.inspect
|
53
54
|
end
|
54
55
|
|
@@ -61,20 +62,24 @@ class MockTest < Test::Unit::TestCase
|
|
61
62
|
mock = Mock.new
|
62
63
|
assert_equal true, mock.eql?(mock)
|
63
64
|
end
|
64
|
-
|
65
|
+
|
66
|
+
if RUBY_VERSION < '1.9'
|
67
|
+
OBJECT_METHODS = STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS.reject { |m| m =~ /^__.*__$/ }
|
68
|
+
else
|
69
|
+
OBJECT_METHODS = STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS.reject { |m| m =~ /^__.*__$/ || m == :object_id }
|
70
|
+
end
|
71
|
+
|
65
72
|
def test_should_be_able_to_mock_standard_object_methods
|
66
73
|
mock = Mock.new
|
67
|
-
|
68
|
-
|
69
|
-
object_methods.each { |method| assert_equal method, mock.__send__(method.to_sym) }
|
74
|
+
OBJECT_METHODS.each { |method| mock.__expects__(method.to_sym).returns(method) }
|
75
|
+
OBJECT_METHODS.each { |method| assert_equal method, mock.__send__(method.to_sym) }
|
70
76
|
assert_nothing_raised(ExpectationError) { mock.verify }
|
71
77
|
end
|
72
|
-
|
78
|
+
|
73
79
|
def test_should_be_able_to_stub_standard_object_methods
|
74
80
|
mock = Mock.new
|
75
|
-
|
76
|
-
|
77
|
-
object_methods.each { |method| assert_equal method, mock.__send__(method.to_sym) }
|
81
|
+
OBJECT_METHODS.each { |method| mock.__stubs__(method.to_sym).returns(method) }
|
82
|
+
OBJECT_METHODS.each { |method| assert_equal method, mock.__send__(method.to_sym) }
|
78
83
|
end
|
79
84
|
|
80
85
|
def test_should_create_and_add_expectations
|
@@ -113,7 +118,8 @@ class MockTest < Test::Unit::TestCase
|
|
113
118
|
end
|
114
119
|
|
115
120
|
def test_should_not_raise_error_if_stubbing_everything
|
116
|
-
mock = Mock.new
|
121
|
+
mock = Mock.new
|
122
|
+
mock.stub_everything
|
117
123
|
result = nil
|
118
124
|
assert_nothing_raised(ExpectationError) do
|
119
125
|
result = mock.unexpected_method
|
@@ -158,7 +164,7 @@ class MockTest < Test::Unit::TestCase
|
|
158
164
|
mock = Mock.new
|
159
165
|
mock.expects(:expected_method).with(1)
|
160
166
|
exception = assert_raise(ExpectationError) { mock.expected_method(2) }
|
161
|
-
assert_equal "#{mock.mocha_inspect}.expected_method(2) - expected calls: 0, actual calls: 1\nSimilar expectations:\
|
167
|
+
assert_equal "#{mock.mocha_inspect}.expected_method(2) - expected calls: 0, actual calls: 1\nSimilar expectations:\n#{mock.mocha_inspect}.expected_method(1)", exception.message
|
162
168
|
end
|
163
169
|
|
164
170
|
def test_should_pass_block_through_to_expectations_verify_method
|
@@ -248,7 +254,7 @@ class MockTest < Test::Unit::TestCase
|
|
248
254
|
|
249
255
|
def test_should_respond_to_methods_which_the_responder_does_responds_to
|
250
256
|
instance = Class.new do
|
251
|
-
define_method(:respond_to?) { true }
|
257
|
+
define_method(:respond_to?) { |symbol| true }
|
252
258
|
end.new
|
253
259
|
mock = Mock.new
|
254
260
|
mock.responds_like(instance)
|
@@ -257,7 +263,7 @@ class MockTest < Test::Unit::TestCase
|
|
257
263
|
|
258
264
|
def test_should_not_respond_to_methods_which_the_responder_does_not_responds_to
|
259
265
|
instance = Class.new do
|
260
|
-
define_method(:respond_to?) { false }
|
266
|
+
define_method(:respond_to?) { |symbol| false }
|
261
267
|
end.new
|
262
268
|
mock = Mock.new
|
263
269
|
mock.responds_like(instance)
|
@@ -280,7 +286,7 @@ class MockTest < Test::Unit::TestCase
|
|
280
286
|
|
281
287
|
def test_should_not_raise_no_method_error_if_responder_does_respond_to_invoked_method
|
282
288
|
instance = Class.new do
|
283
|
-
define_method(:respond_to?) { true }
|
289
|
+
define_method(:respond_to?) { |symbol| true }
|
284
290
|
end.new
|
285
291
|
mock = Mock.new
|
286
292
|
mock.responds_like(instance)
|
@@ -290,7 +296,7 @@ class MockTest < Test::Unit::TestCase
|
|
290
296
|
|
291
297
|
def test_should_raise_no_method_error_if_responder_does_not_respond_to_invoked_method
|
292
298
|
instance = Class.new do
|
293
|
-
define_method(:respond_to?) { false }
|
299
|
+
define_method(:respond_to?) { |symbol| false }
|
294
300
|
define_method(:mocha_inspect) { 'mocha_inspect' }
|
295
301
|
end.new
|
296
302
|
mock = Mock.new
|
@@ -301,7 +307,7 @@ class MockTest < Test::Unit::TestCase
|
|
301
307
|
|
302
308
|
def test_should_raise_no_method_error_with_message_indicating_that_mock_is_constrained_to_respond_like_responder
|
303
309
|
instance = Class.new do
|
304
|
-
define_method(:respond_to?) { false }
|
310
|
+
define_method(:respond_to?) { |symbol| false }
|
305
311
|
define_method(:mocha_inspect) { 'mocha_inspect' }
|
306
312
|
end.new
|
307
313
|
mock = Mock.new
|
@@ -313,4 +319,5 @@ class MockTest < Test::Unit::TestCase
|
|
313
319
|
assert_match(/which responds like mocha_inspect/, e.message)
|
314
320
|
end
|
315
321
|
end
|
322
|
+
|
316
323
|
end
|