rr 1.1.2 → 1.2.0
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.
- checksums.yaml +4 -4
- data/Appraisals +3 -43
- data/CHANGES.md +46 -0
- data/CREDITS.md +5 -0
- data/Gemfile +3 -12
- data/README.md +25 -24
- data/Rakefile +16 -38
- data/doc/02_syntax_comparison.md +1 -0
- data/lib/rr/core_ext/array.rb +2 -0
- data/lib/rr/core_ext/hash.rb +2 -0
- data/lib/rr/deprecations.rb +97 -0
- data/lib/rr/double_definitions/double_injections/any_instance_of.rb +1 -1
- data/lib/rr/double_definitions/double_injections/instance.rb +2 -2
- data/lib/rr/dsl.rb +152 -0
- data/lib/rr/injections/method_missing_injection.rb +6 -2
- data/lib/rr/integrations/minitest_4.rb +1 -1
- data/lib/rr/integrations/minitest_4_active_support.rb +1 -1
- data/lib/rr/integrations/rspec/invocation_matcher.rb +0 -8
- data/lib/rr/integrations/rspec_2.rb +20 -2
- data/lib/rr/recorded_call.rb +29 -0
- data/lib/rr/recorded_calls.rb +8 -4
- data/lib/rr/space.rb +1 -1
- data/lib/rr/spy_verification.rb +13 -5
- data/lib/rr/version.rb +1 -1
- data/lib/rr/wildcard_matchers.rb +10 -10
- data/lib/rr/without_autohook.rb +5 -13
- data/rr.gemspec +3 -3
- data/spec/defines_spec_suite_tasks.rb +12 -0
- data/spec/global_helper.rb +5 -0
- data/spec/spec_suite_configuration.rb +1 -7
- data/spec/suites.yml +1 -1
- data/spec/suites/rspec_2/functional/any_instance_of_spec.rb +133 -33
- data/spec/suites/rspec_2/functional/dont_allow_spec.rb +13 -8
- data/spec/suites/rspec_2/functional/mock_bang_spec.rb +20 -0
- data/spec/suites/rspec_2/functional/mock_instance_of_spec.rb +14 -0
- data/spec/suites/rspec_2/functional/mock_instance_of_strong_spec.rb +15 -0
- data/spec/suites/rspec_2/functional/mock_proxy_instance_of_spec.rb +15 -0
- data/spec/suites/rspec_2/functional/mock_proxy_spec.rb +14 -0
- data/spec/suites/rspec_2/functional/mock_spec.rb +8 -232
- data/spec/suites/rspec_2/functional/mock_strong_spec.rb +14 -0
- data/spec/suites/rspec_2/functional/received_spec.rb +16 -0
- data/spec/suites/rspec_2/functional/spy_spec.rb +89 -28
- data/spec/suites/rspec_2/functional/stub_bang_spec.rb +20 -0
- data/spec/suites/rspec_2/functional/stub_instance_of_spec.rb +15 -0
- data/spec/suites/rspec_2/functional/stub_instance_of_strong_spec.rb +15 -0
- data/spec/suites/rspec_2/functional/stub_proxy_instance_of_spec.rb +16 -0
- data/spec/suites/rspec_2/functional/stub_proxy_spec.rb +45 -0
- data/spec/suites/rspec_2/functional/stub_spec.rb +42 -161
- data/spec/suites/rspec_2/functional/stub_strong_spec.rb +15 -0
- data/spec/suites/rspec_2/helper.rb +2 -2
- data/spec/suites/rspec_2/support/mixins/double_definition_creator_helpers.rb +173 -0
- data/spec/suites/rspec_2/support/mixins/mock_definition_creator_helpers.rb +45 -0
- data/spec/suites/rspec_2/support/mixins/proxy_definition_creator_helpers.rb +33 -0
- data/spec/suites/rspec_2/support/mixins/stub_creator_helpers.rb +43 -0
- data/spec/suites/rspec_2/support/mixins/stub_definition_creator_helpers.rb +45 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_with_never_called_qualifier.rb +39 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_with_times_called_qualifier.rb +50 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_without_qualifiers.rb +131 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/dont_allow.rb +148 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_instance_of.rb +26 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_instance_of_strong.rb +28 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_proxy.rb +11 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_strong.rb +37 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mocking.rb +107 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_instance_of.rb +32 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_instance_of_strong.rb +39 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_proxy.rb +11 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_strong.rb +37 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stubbing.rb +57 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/array_flatten_bug.rb +35 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/block_form.rb +31 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/comparing_arity.rb +63 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/object_is_proxy.rb +43 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/sequential_invocations.rb +26 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/setting_implementation.rb +51 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/yields.rb +81 -0
- data/spec/suites/rspec_2/unit/core_ext/enumerable_spec.rb +0 -28
- data/spec/suites/rspec_2/unit/deprecations_spec.rb +27 -0
- data/spec/suites/rspec_2/unit/dsl/double_creators_spec.rb +133 -0
- data/spec/suites/rspec_2/unit/dsl/space_spec.rb +99 -0
- data/spec/suites/rspec_2/unit/dsl/wildcard_matchers_spec.rb +67 -0
- data/spec/suites/rspec_2/unit/integrations/rspec_spec.rb +4 -19
- data/spec/suites/rspec_2/unit/space_spec.rb +5 -3
- data/spec/suites/rspec_2/unit/spy_verification_spec.rb +1 -1
- data/spec/support/adapter.rb +1 -1
- data/spec/support/adapter_tests/rspec.rb +19 -15
- data/spec/support/project/generator.rb +0 -4
- metadata +55 -48
- data/gemfiles/ruby_18_rspec_1.gemfile +0 -14
- data/gemfiles/ruby_18_rspec_1.gemfile.lock +0 -38
- data/gemfiles/ruby_18_rspec_1_rails_2.gemfile +0 -18
- data/gemfiles/ruby_18_rspec_1_rails_2.gemfile.lock +0 -64
- data/gemfiles/ruby_19_rspec_2_rails_3.gemfile +0 -15
- data/gemfiles/ruby_19_rspec_2_rails_3.gemfile.lock +0 -123
- data/lib/rr/adapters.rb +0 -34
- data/lib/rr/adapters/rr_methods.rb +0 -142
- data/lib/rr/integrations/rspec_1.rb +0 -46
- data/lib/rr/integrations/test_unit_1.rb +0 -63
- data/lib/rr/integrations/test_unit_2.rb +0 -17
- data/lib/rr/integrations/test_unit_200.rb +0 -27
- data/lib/rr/integrations/test_unit_200_active_support.rb +0 -25
- data/lib/rr/integrations/test_unit_2_active_support.rb +0 -38
- data/spec/suites/rspec_1/helper.rb +0 -24
- data/spec/suites/rspec_1/integration/rspec_1_spec.rb +0 -93
- data/spec/suites/rspec_1/integration/test_unit_1_spec.rb +0 -102
- data/spec/suites/rspec_1/integration/test_unit_2_spec.rb +0 -109
- data/spec/suites/rspec_1/spec_helper.rb +0 -3
- data/spec/suites/rspec_1_rails_2/integration/astc_rails_2_spec.rb +0 -141
- data/spec/suites/rspec_1_rails_2/integration/rspec_1_rails_2_spec.rb +0 -132
- data/spec/suites/rspec_1_rails_2/integration/test_unit_1_rails_2_spec.rb +0 -141
- data/spec/suites/rspec_1_rails_2/integration/test_unit_2_rails_2_spec.rb +0 -148
- data/spec/suites/rspec_1_rails_2/spec_helper.rb +0 -3
- data/spec/suites/rspec_2/functional/dsl_spec.rb +0 -13
- data/spec/suites/rspec_2/functional/instance_of_spec.rb +0 -14
- data/spec/suites/rspec_2/functional/proxy_spec.rb +0 -136
- data/spec/suites/rspec_2/functional/strong_spec.rb +0 -79
- data/spec/suites/rspec_2/integration/test_unit_200_spec.rb +0 -102
- data/spec/suites/rspec_2/integration/test_unit_2_spec.rb +0 -109
- data/spec/suites/rspec_2/unit/adapters/rr_methods/double_creators_spec.rb +0 -135
- data/spec/suites/rspec_2/unit/adapters/rr_methods/space_spec.rb +0 -101
- data/spec/suites/rspec_2/unit/adapters/rr_methods/wildcard_matchers_spec.rb +0 -69
- data/spec/suites/rspec_2_rails_3/integration/astc_rails_3_spec.rb +0 -141
- data/spec/suites/rspec_2_rails_3/integration/minitest_4_rails_3_spec.rb +0 -148
- data/spec/suites/rspec_2_rails_3/integration/rspec_2_rails_3_spec.rb +0 -172
- data/spec/suites/rspec_2_rails_3/integration/test_unit_200_rails_3_spec.rb +0 -141
- data/spec/suites/rspec_2_rails_3/integration/test_unit_2_rails_3_spec.rb +0 -148
- data/spec/suites/rspec_2_rails_3/spec_helper.rb +0 -3
- data/spec/suites/rspec_2_rails_4/integration/test_unit_200_rails_4_spec.rb +0 -142
- data/spec/suites/rspec_2_rails_4/integration/test_unit_2_rails_4_spec.rb +0 -149
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
require File.expand_path('../../spec_helper', __FILE__)
|
|
2
|
-
|
|
3
|
-
class StrongSpecFixture
|
|
4
|
-
def method_with_no_arguments
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
def method_with_one_argument(string)
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def method_with_two_arguments(string, integer)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def method_with_three_arguments_including_varargs(string, integer, *args)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def method_with_varargs(*args)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe '#strong' do
|
|
21
|
-
subject { Object.new }
|
|
22
|
-
|
|
23
|
-
context "when the method does not exist" do
|
|
24
|
-
it "raises an exception" do
|
|
25
|
-
expect {
|
|
26
|
-
strong.stub(StrongSpecFixture.new).something
|
|
27
|
-
}.to raise_error(RR::Errors::SubjectDoesNotImplementMethodError)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
context "when the method exists with no arguments" do
|
|
32
|
-
it "does not raise an exception" do
|
|
33
|
-
strong.stub(StrongSpecFixture.new).method_with_no_arguments
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
context "when the method has a different arity" do
|
|
38
|
-
it "raises an exception" do
|
|
39
|
-
expect {
|
|
40
|
-
strong.stub(StrongSpecFixture.new).method_with_one_argument
|
|
41
|
-
}.to raise_error(RR::Errors::SubjectHasDifferentArityError)
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
context "when the method has accepts a variable number of arguments" do
|
|
46
|
-
it "does not raise an exception" do
|
|
47
|
-
strong.stub(StrongSpecFixture.new).method_with_varargs
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
context "when the method does not provide the required parameters before varargs" do
|
|
52
|
-
it "raises an exception" do
|
|
53
|
-
expect {
|
|
54
|
-
strong.stub(StrongSpecFixture.new).method_with_three_arguments_including_varargs
|
|
55
|
-
}.to raise_error(RR::Errors::SubjectHasDifferentArityError)
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
context "when the minimum number of parameters are provided" do
|
|
60
|
-
it "does not raise an exception" do
|
|
61
|
-
strong.stub(StrongSpecFixture.new).method_with_three_arguments_including_varargs("one", 2)
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
context "when using instance_of and the method does not exist" do
|
|
66
|
-
it "raises an exception" do
|
|
67
|
-
expect {
|
|
68
|
-
strong.stub.instance_of(StrongSpecFixture).something
|
|
69
|
-
StrongSpecFixture.new
|
|
70
|
-
}.to raise_error(RR::Errors::SubjectDoesNotImplementMethodError)
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
context "when using instance_of and the method does exist" do
|
|
75
|
-
it "does not raise an exception" do
|
|
76
|
-
strong.stub.instance_of(StrongSpecFixture).method_with_no_arguments
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
require File.expand_path('../../spec_helper', __FILE__)
|
|
2
|
-
|
|
3
|
-
describe 'Integration with Test::Unit 2.0.0' do
|
|
4
|
-
include IntegrationTests::RubyTestUnit
|
|
5
|
-
|
|
6
|
-
def self.including_the_adapter_manually_works
|
|
7
|
-
specify "including the adapter manually works" do
|
|
8
|
-
project = generate_project do |project|
|
|
9
|
-
project.add_to_prelude <<-EOT
|
|
10
|
-
class Test::Unit::TestCase
|
|
11
|
-
include RR::Adapters::TestUnit
|
|
12
|
-
end
|
|
13
|
-
EOT
|
|
14
|
-
end
|
|
15
|
-
project.add_test_file do |file|
|
|
16
|
-
file.add_working_test_case_with_adapter_tests do |test_case|
|
|
17
|
-
test_case.add_to_body <<-EOT
|
|
18
|
-
def test_the_correct_adapters_are_loaded
|
|
19
|
-
assert_adapters_loaded #{adapters_that_should_be_loaded.inspect}
|
|
20
|
-
end
|
|
21
|
-
EOT
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
result = project.run_tests
|
|
25
|
-
result.should be_success
|
|
26
|
-
result.should_not have_errors_or_failures
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def self.rr_hooks_into_the_test_framework_automatically
|
|
31
|
-
specify "RR hooks into the test framework automatically" do
|
|
32
|
-
project = generate_project
|
|
33
|
-
project.add_test_file do |file|
|
|
34
|
-
file.add_working_test_case
|
|
35
|
-
end
|
|
36
|
-
result = project.run_tests
|
|
37
|
-
result.should be_success
|
|
38
|
-
result.should_not have_errors_or_failures
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context 'when Bundler is autorequiring RR' do
|
|
43
|
-
def configure_project_generator(project_generator)
|
|
44
|
-
super
|
|
45
|
-
project_generator.configure do |project|
|
|
46
|
-
project.autorequire_gems = true
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def adapters_that_should_be_loaded
|
|
51
|
-
[:TestUnit200]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
including_the_adapter_manually_works
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
context 'when RR is being required manually' do
|
|
58
|
-
def configure_project_generator(project_generator)
|
|
59
|
-
super
|
|
60
|
-
project_generator.configure do |project|
|
|
61
|
-
project.autorequire_gems = false
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def adapters_that_should_be_loaded
|
|
66
|
-
[:TestUnit200]
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
rr_hooks_into_the_test_framework_automatically
|
|
70
|
-
including_the_adapter_manually_works
|
|
71
|
-
|
|
72
|
-
specify "when RR raises an error it raises a failure not an exception" do
|
|
73
|
-
project = generate_project
|
|
74
|
-
project.add_test_file do |file|
|
|
75
|
-
file.add_test_case do |test_case|
|
|
76
|
-
test_case.add_test <<-EOT
|
|
77
|
-
object = Object.new
|
|
78
|
-
mock(object).foo
|
|
79
|
-
EOT
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
result = project.run_tests
|
|
83
|
-
result.should fail_with_output(/1 failure/)
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
specify "throwing an error in teardown doesn't mess things up" do
|
|
87
|
-
project = generate_project
|
|
88
|
-
project.add_test_file do |file|
|
|
89
|
-
file.add_test_case do |test_case|
|
|
90
|
-
test_case.add_to_body <<-EOT
|
|
91
|
-
def teardown
|
|
92
|
-
raise 'hell'
|
|
93
|
-
end
|
|
94
|
-
EOT
|
|
95
|
-
test_case.add_test("") # doesn't matter
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
result = project.run_tests
|
|
99
|
-
result.should fail_with_output(/1 error/)
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
end
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
require File.expand_path('../../spec_helper', __FILE__)
|
|
2
|
-
|
|
3
|
-
describe 'Integration with Test::Unit >= 2.5' do
|
|
4
|
-
include IntegrationTests::RubyTestUnit
|
|
5
|
-
|
|
6
|
-
def configure_project_generator(project_generator)
|
|
7
|
-
super
|
|
8
|
-
project_generator.configure do |project|
|
|
9
|
-
project.test_unit_gem_version = '>= 2.5'
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def self.including_the_adapter_manually_works
|
|
14
|
-
specify "including the adapter manually works" do
|
|
15
|
-
project = generate_project do |project|
|
|
16
|
-
project.add_to_prelude <<-EOT
|
|
17
|
-
class Test::Unit::TestCase
|
|
18
|
-
include RR::Adapters::TestUnit
|
|
19
|
-
end
|
|
20
|
-
EOT
|
|
21
|
-
end
|
|
22
|
-
project.add_test_file do |file|
|
|
23
|
-
file.add_working_test_case_with_adapter_tests do |test_case|
|
|
24
|
-
test_case.add_to_body <<-EOT
|
|
25
|
-
def test_the_correct_adapters_are_loaded
|
|
26
|
-
assert_adapters_loaded #{adapters_that_should_be_loaded.inspect}
|
|
27
|
-
end
|
|
28
|
-
EOT
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
result = project.run_tests
|
|
32
|
-
result.should be_success
|
|
33
|
-
result.should_not have_errors_or_failures
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def self.rr_hooks_into_the_test_framework_automatically
|
|
38
|
-
specify "RR hooks into the test framework automatically" do
|
|
39
|
-
project = generate_project
|
|
40
|
-
project.add_test_file do |file|
|
|
41
|
-
file.add_working_test_case
|
|
42
|
-
end
|
|
43
|
-
result = project.run_tests
|
|
44
|
-
result.should be_success
|
|
45
|
-
result.should_not have_errors_or_failures
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
context 'when Bundler is autorequiring RR' do
|
|
50
|
-
def configure_project_generator(project_generator)
|
|
51
|
-
super
|
|
52
|
-
project_generator.configure do |project|
|
|
53
|
-
project.autorequire_gems = true
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def adapters_that_should_be_loaded
|
|
58
|
-
[:TestUnit2]
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
including_the_adapter_manually_works
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
context 'when RR is being required manually' do
|
|
65
|
-
def configure_project_generator(project_generator)
|
|
66
|
-
super
|
|
67
|
-
project_generator.configure do |project|
|
|
68
|
-
project.autorequire_gems = false
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def adapters_that_should_be_loaded
|
|
73
|
-
[:TestUnit2]
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
rr_hooks_into_the_test_framework_automatically
|
|
77
|
-
including_the_adapter_manually_works
|
|
78
|
-
|
|
79
|
-
specify "when RR raises an error it raises a failure not an exception" do
|
|
80
|
-
project = generate_project
|
|
81
|
-
project.add_test_file do |file|
|
|
82
|
-
file.add_test_case do |test_case|
|
|
83
|
-
test_case.add_test <<-EOT
|
|
84
|
-
object = Object.new
|
|
85
|
-
mock(object).foo
|
|
86
|
-
EOT
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
result = project.run_tests
|
|
90
|
-
result.should fail_with_output(/1 failure/)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
specify "throwing an error in teardown doesn't mess things up" do
|
|
94
|
-
project = generate_project
|
|
95
|
-
project.add_test_file do |file|
|
|
96
|
-
file.add_test_case do |test_case|
|
|
97
|
-
test_case.add_to_body <<-EOT
|
|
98
|
-
def teardown
|
|
99
|
-
raise 'hell'
|
|
100
|
-
end
|
|
101
|
-
EOT
|
|
102
|
-
test_case.add_test("") # doesn't matter
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
result = project.run_tests
|
|
106
|
-
result.should fail_with_output(/1 error/)
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
require File.expand_path("#{File.dirname(__FILE__)}/../../../spec_helper")
|
|
2
|
-
|
|
3
|
-
module RR
|
|
4
|
-
module Adapters
|
|
5
|
-
describe RRMethods do
|
|
6
|
-
subject { Object.new }
|
|
7
|
-
|
|
8
|
-
after(:each) do
|
|
9
|
-
RR.reset
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
describe "normal strategy definitions" do
|
|
13
|
-
attr_reader :strategy_method_name
|
|
14
|
-
|
|
15
|
-
def call_strategy(*args, &block)
|
|
16
|
-
__send__(strategy_method_name, *args, &block)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
describe "#mock" do
|
|
20
|
-
before do
|
|
21
|
-
@strategy_method_name = :mock
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
context "when passing no args" do
|
|
25
|
-
it "returns a DoubleDefinitionCreate" do
|
|
26
|
-
expect(call_strategy.class).to eq RR::DoubleDefinitions::DoubleDefinitionCreate
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
context "when passed a method_name argument" do
|
|
31
|
-
it "creates a mock Double for method" do
|
|
32
|
-
double_definition = mock(subject, :foobar).returns {:baz}
|
|
33
|
-
expect(double_definition.times_matcher).to eq RR::TimesCalledMatchers::IntegerMatcher.new(1)
|
|
34
|
-
expect(double_definition.argument_expectation.class).to eq RR::Expectations::ArgumentEqualityExpectation
|
|
35
|
-
expect(double_definition.argument_expectation.expected_arguments).to eq []
|
|
36
|
-
expect(subject.foobar).to eq :baz
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
describe "#stub" do
|
|
42
|
-
before do
|
|
43
|
-
@strategy_method_name = :stub
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
context "when passing no args" do
|
|
47
|
-
it "returns a DoubleDefinitionCreate" do
|
|
48
|
-
expect(call_strategy.class).to eq RR::DoubleDefinitions::DoubleDefinitionCreate
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
context "when passed a method_name argument" do
|
|
53
|
-
it "creates a stub Double for method when passed a method_name argument" do
|
|
54
|
-
double_definition = stub(subject, :foobar).returns {:baz}
|
|
55
|
-
expect(double_definition.times_matcher).to eq RR::TimesCalledMatchers::AnyTimesMatcher.new
|
|
56
|
-
expect(double_definition.argument_expectation.class).to eq RR::Expectations::AnyArgumentExpectation
|
|
57
|
-
expect(subject.foobar).to eq :baz
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
describe "#dont_allow" do
|
|
63
|
-
before do
|
|
64
|
-
@strategy_method_name = :dont_allow
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
context "when passing no args" do
|
|
68
|
-
it "returns a DoubleDefinitionCreate" do
|
|
69
|
-
expect(call_strategy.class).to eq RR::DoubleDefinitions::DoubleDefinitionCreate
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
context "when passed a method_name argument_expectation" do
|
|
74
|
-
it "creates a mock Double for method" do
|
|
75
|
-
double_definition = dont_allow(subject, :foobar)
|
|
76
|
-
expect(double_definition.times_matcher).to eq RR::TimesCalledMatchers::NeverMatcher.new
|
|
77
|
-
expect(double_definition.argument_expectation.class).to eq RR::Expectations::AnyArgumentExpectation
|
|
78
|
-
|
|
79
|
-
expect {
|
|
80
|
-
subject.foobar
|
|
81
|
-
}.to raise_error(RR::Errors::TimesCalledError)
|
|
82
|
-
RR.reset
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
describe "! strategy definitions" do
|
|
89
|
-
attr_reader :strategy_method_name
|
|
90
|
-
def call_strategy(*args, &definition_eval_block)
|
|
91
|
-
__send__(strategy_method_name, *args, &definition_eval_block)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
describe "#mock!" do
|
|
95
|
-
before do
|
|
96
|
-
@strategy_method_name = :mock!
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
context "when passed a method_name argument" do
|
|
100
|
-
it "sets #verification_strategy to Mock" do
|
|
101
|
-
proxy = mock!(:foobar)
|
|
102
|
-
expect(proxy.double_definition_create.verification_strategy.class).to eq RR::DoubleDefinitions::Strategies::Verification::Mock
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
describe "#stub!" do
|
|
108
|
-
before do
|
|
109
|
-
@strategy_method_name = :stub!
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
context "when passed a method_name argument" do
|
|
113
|
-
it "sets #verification_strategy to Stub" do
|
|
114
|
-
proxy = stub!(:foobar)
|
|
115
|
-
expect(proxy.double_definition_create.verification_strategy.class).to eq RR::DoubleDefinitions::Strategies::Verification::Stub
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
describe "#dont_allow!" do
|
|
121
|
-
before do
|
|
122
|
-
@strategy_method_name = :dont_allow!
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
context "when passed a method_name argument" do
|
|
126
|
-
it "sets #verification_strategy to DontAllow" do
|
|
127
|
-
proxy = dont_allow!(:foobar)
|
|
128
|
-
expect(proxy.double_definition_create.verification_strategy.class).to eq RR::DoubleDefinitions::Strategies::Verification::DontAllow
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
end
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
require File.expand_path("#{File.dirname(__FILE__)}/../../../spec_helper")
|
|
2
|
-
|
|
3
|
-
module RR
|
|
4
|
-
module Adapters
|
|
5
|
-
describe RRMethods do
|
|
6
|
-
attr_reader :space, :subject_1, :subject_2, :method_name
|
|
7
|
-
|
|
8
|
-
include_examples "Swapped Space"
|
|
9
|
-
|
|
10
|
-
include RR::Adapters::RRMethods
|
|
11
|
-
|
|
12
|
-
before do
|
|
13
|
-
@subject_1 = Object.new
|
|
14
|
-
@subject_2 = Object.new
|
|
15
|
-
@method_name = :foobar
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
describe "#verify" do
|
|
19
|
-
it "aliases #rr_verify" do
|
|
20
|
-
expect(RRMethods.instance_method("verify")).to eq RRMethods.instance_method("rr_verify")
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
describe "#rr_verify" do
|
|
25
|
-
it "verifies and deletes the double_injections" do
|
|
26
|
-
double_1 = ::RR::Injections::DoubleInjection.find_or_create_by_subject(subject_1, method_name)
|
|
27
|
-
double_1_verify_calls = 0
|
|
28
|
-
double_1_reset_calls = 0
|
|
29
|
-
(
|
|
30
|
-
class << double_1;
|
|
31
|
-
self;
|
|
32
|
-
end).class_eval do
|
|
33
|
-
define_method(:verify) do ||
|
|
34
|
-
double_1_verify_calls += 1
|
|
35
|
-
end
|
|
36
|
-
define_method(:reset) do ||
|
|
37
|
-
double_1_reset_calls += 1
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
double_2 = ::RR::Injections::DoubleInjection.find_or_create_by_subject(subject_2, method_name)
|
|
41
|
-
double_2_verify_calls = 0
|
|
42
|
-
double_2_reset_calls = 0
|
|
43
|
-
( class << double_2; self; end).class_eval do
|
|
44
|
-
define_method(:verify) do ||
|
|
45
|
-
double_2_verify_calls += 1
|
|
46
|
-
end
|
|
47
|
-
define_method(:reset) do ||
|
|
48
|
-
double_2_reset_calls += 1
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
rr_verify
|
|
53
|
-
expect(double_1_verify_calls).to eq 1
|
|
54
|
-
expect(double_2_verify_calls).to eq 1
|
|
55
|
-
expect(double_1_reset_calls).to eq 1
|
|
56
|
-
expect(double_1_reset_calls).to eq 1
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
describe "#reset" do
|
|
61
|
-
it "aliases #rr_reset" do
|
|
62
|
-
expect(RRMethods.instance_method("reset")).to eq RRMethods.instance_method("rr_reset")
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
describe "#rr_reset" do
|
|
67
|
-
it "removes the ordered doubles" do
|
|
68
|
-
mock(subject_1).foobar1.ordered
|
|
69
|
-
mock(subject_2).foobar2.ordered
|
|
70
|
-
|
|
71
|
-
::RR::Injections::DoubleInjection.instances.should_not be_empty
|
|
72
|
-
|
|
73
|
-
rr_reset
|
|
74
|
-
::RR::Injections::DoubleInjection.instances
|
|
75
|
-
expect(::RR::Injections::DoubleInjection.instances).to be_empty
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "resets all double_injections" do
|
|
79
|
-
double_1 = ::RR::Injections::DoubleInjection.find_or_create_by_subject(subject_1, method_name)
|
|
80
|
-
double_1_reset_calls = 0
|
|
81
|
-
( class << double_1; self; end).class_eval do
|
|
82
|
-
define_method(:reset) do ||
|
|
83
|
-
double_1_reset_calls += 1
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
double_2 = ::RR::Injections::DoubleInjection.find_or_create_by_subject(subject_2, method_name)
|
|
87
|
-
double_2_reset_calls = 0
|
|
88
|
-
( class << double_2; self; end).class_eval do
|
|
89
|
-
define_method(:reset) do ||
|
|
90
|
-
double_2_reset_calls += 1
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
rr_reset
|
|
95
|
-
expect(double_1_reset_calls).to eq 1
|
|
96
|
-
expect(double_2_reset_calls).to eq 1
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
end
|