flexmock 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +34 -25
- data/TAGS +2192 -117
- data/lib/flexmock/core.rb +6 -1
- data/lib/flexmock/default_framework_adapter.rb +1 -0
- data/lib/flexmock/expectation.rb +10 -2
- data/lib/flexmock/expectation_director.rb +2 -2
- data/lib/flexmock/mock_container.rb +14 -13
- data/lib/flexmock/partial_mock.rb +13 -4
- data/lib/flexmock/recorder.rb +2 -1
- data/lib/flexmock/rspec.rb +1 -0
- data/lib/flexmock/spy_describers.rb +13 -3
- data/lib/flexmock/test_unit_integration.rb +11 -0
- data/lib/flexmock/validators.rb +35 -8
- data/lib/flexmock/version.rb +1 -1
- data/test/assert_spy_called_test.rb +17 -0
- data/test/base_class_test.rb +11 -1
- data/test/demeter_mocking_test.rb +1 -1
- data/test/new_instances_test.rb +1 -1
- data/test/record_mode_test.rb +6 -6
- data/test/rspec_integration/integration_spec.rb +1 -1
- data/test/should_receive_test.rb +38 -22
- data/test/test_setup.rb +41 -1
- metadata +2 -2
@@ -29,7 +29,7 @@ describe "FlexMock in a RSpec example" do
|
|
29
29
|
m.should_receive(:hi).with().once
|
30
30
|
lambda {
|
31
31
|
flexmock_verify
|
32
|
-
}.should raise_error(RSpec::Expectations::ExpectationNotMetError,
|
32
|
+
}.should raise_error(RSpec::Expectations::ExpectationNotMetError, /\bhi\b.*incorrect.*times/i)
|
33
33
|
end
|
34
34
|
|
35
35
|
specify "should be able to create a stub" do
|
data/test/should_receive_test.rb
CHANGED
@@ -35,8 +35,8 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
35
35
|
# Expected error messages on failures
|
36
36
|
COUNT_ERROR_MESSAGE = /\bcalled\s+incorrect\s+number\s+of\s+times\b/
|
37
37
|
NO_MATCH_ERROR_MESSAGE = /\bno\s+matching\s+handler\b/
|
38
|
-
AT_LEAST_ERROR_MESSAGE =
|
39
|
-
AT_MOST_ERROR_MESSAGE =
|
38
|
+
AT_LEAST_ERROR_MESSAGE = COUNT_ERROR_MESSAGE
|
39
|
+
AT_MOST_ERROR_MESSAGE = COUNT_ERROR_MESSAGE
|
40
40
|
OUT_OF_ORDER_ERROR_MESSAGE = /\bcalled\s+out\s+of\s+order\b/
|
41
41
|
NON_CONTAINER_MESSAGE = /\bis\s+not\s+in\s+a\s+container\b/
|
42
42
|
|
@@ -339,7 +339,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
339
339
|
end
|
340
340
|
|
341
341
|
def test_with_no_args_but_with_args
|
342
|
-
|
342
|
+
assert_mock_failure(:message =>NO_MATCH_ERROR_MESSAGE, :deep => true) do
|
343
343
|
FlexMock.use do |m|
|
344
344
|
m.should_receive(:hi).with_no_args
|
345
345
|
m.hi(1)
|
@@ -392,7 +392,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
392
392
|
def test_with_ducktype_arg_matching_no_match
|
393
393
|
FlexMock.use('greeter') do |m|
|
394
394
|
m.should_receive(:hi).with(FlexMock.ducktype(:purr, :meow, :growl))
|
395
|
-
|
395
|
+
assert_mock_failure(:deep => true, :line => __LINE__+1) {
|
396
396
|
m.hi(Cat.new)
|
397
397
|
}
|
398
398
|
end
|
@@ -408,7 +408,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
408
408
|
def test_with_hash_non_matching
|
409
409
|
FlexMock.use('greeter') do |m|
|
410
410
|
m.should_receive(:hi).with(FlexMock.hsh(:a => 1, :b => 2))
|
411
|
-
|
411
|
+
assert_mock_failure(:deep => true, :line => __LINE__+1) {
|
412
412
|
m.hi(:a => 1, :b => 4, :c => 3)
|
413
413
|
}
|
414
414
|
end
|
@@ -493,8 +493,8 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
493
493
|
def test_arg_matching_with_no_match
|
494
494
|
FlexMock.use do |m|
|
495
495
|
m.should_receive(:hi).with(1).returns(10)
|
496
|
-
|
497
|
-
|
496
|
+
assert_mock_failure(:message =>NO_MATCH_ERROR_MESSAGE, :deep => true, :line => __LINE__+1) {
|
497
|
+
m.hi(2)
|
498
498
|
}
|
499
499
|
end
|
500
500
|
end
|
@@ -502,7 +502,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
502
502
|
def test_arg_matching_with_string_doesnt_over_match
|
503
503
|
FlexMock.use do |m|
|
504
504
|
m.should_receive(:hi).with(String).returns(20)
|
505
|
-
|
505
|
+
assert_mock_failure(:message =>NO_MATCH_ERROR_MESSAGE, :deep => true, :line => __LINE__+1) {
|
506
506
|
m.hi(1.0)
|
507
507
|
}
|
508
508
|
end
|
@@ -511,7 +511,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
511
511
|
def test_block_arg_given_to_no_args
|
512
512
|
FlexMock.use do |m|
|
513
513
|
m.should_receive(:hi).with_no_args.returns(20)
|
514
|
-
|
514
|
+
assert_mock_failure(:message =>NO_MATCH_ERROR_MESSAGE, :deep => true, :line => __LINE__+1) {
|
515
515
|
m.hi { 1 }
|
516
516
|
}
|
517
517
|
end
|
@@ -551,7 +551,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
551
551
|
end
|
552
552
|
|
553
553
|
def test_never_and_called_once
|
554
|
-
|
554
|
+
assert_mock_failure(:message =>COUNT_ERROR_MESSAGE, :deep => true, :line => __LINE__+2) do
|
555
555
|
FlexMock.use do |m|
|
556
556
|
m.should_receive(:hi).with(1).never
|
557
557
|
m.hi(1)
|
@@ -567,7 +567,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
567
567
|
end
|
568
568
|
|
569
569
|
def test_once_but_never_called
|
570
|
-
|
570
|
+
assert_mock_failure(:message =>COUNT_ERROR_MESSAGE, :line => __LINE__+2) do
|
571
571
|
FlexMock.use do |m|
|
572
572
|
m.should_receive(:hi).with(1).returns(10).once
|
573
573
|
end
|
@@ -575,7 +575,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
575
575
|
end
|
576
576
|
|
577
577
|
def test_once_but_called_twice
|
578
|
-
|
578
|
+
assert_mock_failure(:message =>COUNT_ERROR_MESSAGE, :line => __LINE__+2) do
|
579
579
|
FlexMock.use do |m|
|
580
580
|
m.should_receive(:hi).with(1).returns(10).once
|
581
581
|
m.hi(1)
|
@@ -627,7 +627,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
627
627
|
end
|
628
628
|
|
629
629
|
def test_at_least_but_never_called
|
630
|
-
|
630
|
+
assert_mock_failure(:message =>AT_LEAST_ERROR_MESSAGE, :line => __LINE__+2) do
|
631
631
|
FlexMock.use do |m|
|
632
632
|
m.should_receive(:hi).with(1).returns(10).at_least.once
|
633
633
|
end
|
@@ -643,7 +643,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
643
643
|
end
|
644
644
|
|
645
645
|
def test_at_least_and_exact
|
646
|
-
|
646
|
+
assert_mock_failure(:message =>COUNT_ERROR_MESSAGE, :line => __LINE__+2) do
|
647
647
|
FlexMock.use do |m|
|
648
648
|
m.should_receive(:hi).with(1).returns(10).at_least.once.once
|
649
649
|
m.hi(1)
|
@@ -666,21 +666,23 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
666
666
|
end
|
667
667
|
|
668
668
|
def test_at_most_called_twice
|
669
|
-
|
669
|
+
ex = assert_mock_failure(:message =>AT_MOST_ERROR_MESSAGE, :line => __LINE__+2) do
|
670
670
|
FlexMock.use do |m|
|
671
671
|
m.should_receive(:hi).with(1).returns(10).at_most.once
|
672
672
|
m.hi(1)
|
673
673
|
m.hi(1)
|
674
674
|
end
|
675
675
|
end
|
676
|
+
assert_match(/at most 1/i, ex.message)
|
676
677
|
end
|
677
678
|
|
678
679
|
def test_at_most_and_at_least_called_never
|
679
|
-
|
680
|
+
ex = assert_mock_failure(:message =>AT_LEAST_ERROR_MESSAGE, :line => __LINE__+2) do
|
680
681
|
FlexMock.use do |m|
|
681
682
|
m.should_receive(:hi).with(1).returns(10).at_least.once.at_most.twice
|
682
683
|
end
|
683
684
|
end
|
685
|
+
assert_match(/at least 1/i, ex.message)
|
684
686
|
end
|
685
687
|
|
686
688
|
def test_at_most_and_at_least_called_once
|
@@ -699,7 +701,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
699
701
|
end
|
700
702
|
|
701
703
|
def test_at_most_and_at_least_called_three_times
|
702
|
-
|
704
|
+
assert_mock_failure(:message =>AT_MOST_ERROR_MESSAGE, :line => __LINE__+2) do
|
703
705
|
FlexMock.use do |m|
|
704
706
|
m.should_receive(:hi).with(1).returns(10).at_least.once.at_most.twice
|
705
707
|
m.hi(1)
|
@@ -722,7 +724,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
722
724
|
end
|
723
725
|
|
724
726
|
def test_call_counts_only_apply_to_matching_args_with_mismatch
|
725
|
-
ex =
|
727
|
+
ex = assert_mock_failure(:message =>COUNT_ERROR_MESSAGE, :line => __LINE__+3) do
|
726
728
|
FlexMock.use do |m|
|
727
729
|
m.should_receive(:hi).with(1).once
|
728
730
|
m.should_receive(:hi).with(2).twice
|
@@ -748,7 +750,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
748
750
|
end
|
749
751
|
|
750
752
|
def test_ordered_calls_out_of_order_will_fail
|
751
|
-
|
753
|
+
assert_mock_failure(:message =>OUT_OF_ORDER_ERROR_MESSAGE, :deep => true, :line => __LINE__+6) do
|
752
754
|
FlexMock.use 'm' do |m|
|
753
755
|
m.should_receive(:hi).ordered
|
754
756
|
m.should_receive(:lo).ordered
|
@@ -770,7 +772,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
770
772
|
end
|
771
773
|
|
772
774
|
def test_order_calls_with_different_arg_lists_and_out_of_order_will_fail
|
773
|
-
|
775
|
+
assert_mock_failure(:message =>OUT_OF_ORDER_ERROR_MESSAGE, :deep => true, :line => __LINE__+6) do
|
774
776
|
FlexMock.use 'm' do |m|
|
775
777
|
m.should_receive(:hi).with("one").ordered
|
776
778
|
m.should_receive(:hi).with("two").ordered
|
@@ -848,7 +850,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
848
850
|
end
|
849
851
|
|
850
852
|
def test_explicit_ordering_with_explicit_misorders
|
851
|
-
|
853
|
+
assert_mock_failure(:message =>OUT_OF_ORDER_ERROR_MESSAGE, :deep => true, :line => __LINE__+6) do
|
852
854
|
FlexMock.use 'm' do |m|
|
853
855
|
m.should_receive(:hi).ordered(:first_group)
|
854
856
|
m.should_receive(:lo).ordered(:second_group)
|
@@ -899,7 +901,7 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
899
901
|
end
|
900
902
|
|
901
903
|
def test_ordering_between_mocks_is_honored_for_global_ordering
|
902
|
-
|
904
|
+
assert_mock_failure(:message =>OUT_OF_ORDER_ERROR_MESSAGE, :deep => true, :line => __LINE__+6) do
|
903
905
|
FlexMock.use("x", "y") do |x, y|
|
904
906
|
x.should_receive(:one).globally.ordered
|
905
907
|
y.should_receive(:two).globally.ordered
|
@@ -1078,6 +1080,20 @@ class TestFlexMockShoulds < Test::Unit::TestCase
|
|
1078
1080
|
assert ! mock.respond_to?(:phoo, true)
|
1079
1081
|
end
|
1080
1082
|
|
1083
|
+
def test_backtraces_point_to_should_receive_line
|
1084
|
+
mock = flexmock("a mock")
|
1085
|
+
file_name_re = Regexp.quote(__FILE__)
|
1086
|
+
line_no = __LINE__ + 1
|
1087
|
+
mock.should_receive(:foo).and_return(:bar).once
|
1088
|
+
begin
|
1089
|
+
flexmock_verify
|
1090
|
+
rescue Exception => ex
|
1091
|
+
exception = ex
|
1092
|
+
end
|
1093
|
+
assert_not_nil exception
|
1094
|
+
assert_match(/#{file_name_re}:#{line_no}/, exception.backtrace.first)
|
1095
|
+
end
|
1096
|
+
|
1081
1097
|
def test_can_mock_operators
|
1082
1098
|
assert_operator(:[]) { |m| m[1] }
|
1083
1099
|
assert_operator(:[]=) { |m| m[1] = :value }
|
data/test/test_setup.rb
CHANGED
@@ -13,7 +13,9 @@ class FlexMock
|
|
13
13
|
# Assertion helper used to assert validation failure. If a
|
14
14
|
# message is given, then the error message should match the
|
15
15
|
# expected error message.
|
16
|
-
def assert_failure(
|
16
|
+
def assert_failure(options={}, &block)
|
17
|
+
message = options[:message]
|
18
|
+
no_location = options[:no_location]
|
17
19
|
ex = assert_raises(assertion_failed_error) { yield }
|
18
20
|
if message
|
19
21
|
case message
|
@@ -25,5 +27,43 @@ class FlexMock
|
|
25
27
|
end
|
26
28
|
ex
|
27
29
|
end
|
30
|
+
|
31
|
+
# Similar to assert_failure, but assumes that a mock generated
|
32
|
+
# error object is return, so additional tests on the backtrace are
|
33
|
+
# added.
|
34
|
+
def assert_mock_failure(options={}, &block)
|
35
|
+
ex = assert_failure(options, &block)
|
36
|
+
file = eval("__FILE__", block.binding)
|
37
|
+
assert_matching_line(ex, file, options)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Assert that there is a line matching file in the backtrace.
|
41
|
+
# Options are:
|
42
|
+
#
|
43
|
+
# deep: true -- matching line can be anywhere in backtrace,
|
44
|
+
# otherwise it must be the first.
|
45
|
+
#
|
46
|
+
# line: n -- Add a line number to the match
|
47
|
+
#
|
48
|
+
def assert_matching_line(ex, file, options)
|
49
|
+
line = options[:line]
|
50
|
+
search_all = options[:deep]
|
51
|
+
if line
|
52
|
+
loc_re = /#{Regexp.quote(file)}:#{line}/
|
53
|
+
else
|
54
|
+
loc_re = Regexp.compile(Regexp.quote(file))
|
55
|
+
end
|
56
|
+
|
57
|
+
if search_all
|
58
|
+
bts = ex.backtrace.join("\n")
|
59
|
+
assert_block("expected a backtrace line to match #{loc_re}\nBACKTRACE:\n#{bts}") {
|
60
|
+
ex.backtrace.any? { |bt| loc_re =~ bt }
|
61
|
+
}
|
62
|
+
else
|
63
|
+
assert_match(loc_re, ex.backtrace.first)
|
64
|
+
end
|
65
|
+
|
66
|
+
ex
|
67
|
+
end
|
28
68
|
end
|
29
69
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: flexmock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.0.
|
5
|
+
version: 1.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jim Weirich
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-09-
|
13
|
+
date: 2012-09-18 00:00:00 Z
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description: "\n FlexMock is a extremely simple mock object class compatible\n with the Test::Unit framework. Although the FlexMock's\n interface is simple, it is very flexible.\n "
|