flexmock 1.0.2 → 1.0.3
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/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 "
|