mocha 0.5.5 → 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|