rr 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +3 -43
  3. data/CHANGES.md +46 -0
  4. data/CREDITS.md +5 -0
  5. data/Gemfile +3 -12
  6. data/README.md +25 -24
  7. data/Rakefile +16 -38
  8. data/doc/02_syntax_comparison.md +1 -0
  9. data/lib/rr/core_ext/array.rb +2 -0
  10. data/lib/rr/core_ext/hash.rb +2 -0
  11. data/lib/rr/deprecations.rb +97 -0
  12. data/lib/rr/double_definitions/double_injections/any_instance_of.rb +1 -1
  13. data/lib/rr/double_definitions/double_injections/instance.rb +2 -2
  14. data/lib/rr/dsl.rb +152 -0
  15. data/lib/rr/injections/method_missing_injection.rb +6 -2
  16. data/lib/rr/integrations/minitest_4.rb +1 -1
  17. data/lib/rr/integrations/minitest_4_active_support.rb +1 -1
  18. data/lib/rr/integrations/rspec/invocation_matcher.rb +0 -8
  19. data/lib/rr/integrations/rspec_2.rb +20 -2
  20. data/lib/rr/recorded_call.rb +29 -0
  21. data/lib/rr/recorded_calls.rb +8 -4
  22. data/lib/rr/space.rb +1 -1
  23. data/lib/rr/spy_verification.rb +13 -5
  24. data/lib/rr/version.rb +1 -1
  25. data/lib/rr/wildcard_matchers.rb +10 -10
  26. data/lib/rr/without_autohook.rb +5 -13
  27. data/rr.gemspec +3 -3
  28. data/spec/defines_spec_suite_tasks.rb +12 -0
  29. data/spec/global_helper.rb +5 -0
  30. data/spec/spec_suite_configuration.rb +1 -7
  31. data/spec/suites.yml +1 -1
  32. data/spec/suites/rspec_2/functional/any_instance_of_spec.rb +133 -33
  33. data/spec/suites/rspec_2/functional/dont_allow_spec.rb +13 -8
  34. data/spec/suites/rspec_2/functional/mock_bang_spec.rb +20 -0
  35. data/spec/suites/rspec_2/functional/mock_instance_of_spec.rb +14 -0
  36. data/spec/suites/rspec_2/functional/mock_instance_of_strong_spec.rb +15 -0
  37. data/spec/suites/rspec_2/functional/mock_proxy_instance_of_spec.rb +15 -0
  38. data/spec/suites/rspec_2/functional/mock_proxy_spec.rb +14 -0
  39. data/spec/suites/rspec_2/functional/mock_spec.rb +8 -232
  40. data/spec/suites/rspec_2/functional/mock_strong_spec.rb +14 -0
  41. data/spec/suites/rspec_2/functional/received_spec.rb +16 -0
  42. data/spec/suites/rspec_2/functional/spy_spec.rb +89 -28
  43. data/spec/suites/rspec_2/functional/stub_bang_spec.rb +20 -0
  44. data/spec/suites/rspec_2/functional/stub_instance_of_spec.rb +15 -0
  45. data/spec/suites/rspec_2/functional/stub_instance_of_strong_spec.rb +15 -0
  46. data/spec/suites/rspec_2/functional/stub_proxy_instance_of_spec.rb +16 -0
  47. data/spec/suites/rspec_2/functional/stub_proxy_spec.rb +45 -0
  48. data/spec/suites/rspec_2/functional/stub_spec.rb +42 -161
  49. data/spec/suites/rspec_2/functional/stub_strong_spec.rb +15 -0
  50. data/spec/suites/rspec_2/helper.rb +2 -2
  51. data/spec/suites/rspec_2/support/mixins/double_definition_creator_helpers.rb +173 -0
  52. data/spec/suites/rspec_2/support/mixins/mock_definition_creator_helpers.rb +45 -0
  53. data/spec/suites/rspec_2/support/mixins/proxy_definition_creator_helpers.rb +33 -0
  54. data/spec/suites/rspec_2/support/mixins/stub_creator_helpers.rb +43 -0
  55. data/spec/suites/rspec_2/support/mixins/stub_definition_creator_helpers.rb +45 -0
  56. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_with_never_called_qualifier.rb +39 -0
  57. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_with_times_called_qualifier.rb +50 -0
  58. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_without_qualifiers.rb +131 -0
  59. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/dont_allow.rb +148 -0
  60. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_instance_of.rb +26 -0
  61. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_instance_of_strong.rb +28 -0
  62. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_proxy.rb +11 -0
  63. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_strong.rb +37 -0
  64. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mocking.rb +107 -0
  65. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_instance_of.rb +32 -0
  66. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_instance_of_strong.rb +39 -0
  67. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_proxy.rb +11 -0
  68. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_strong.rb +37 -0
  69. data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stubbing.rb +57 -0
  70. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/array_flatten_bug.rb +35 -0
  71. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/block_form.rb +31 -0
  72. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/comparing_arity.rb +63 -0
  73. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/object_is_proxy.rb +43 -0
  74. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/sequential_invocations.rb +26 -0
  75. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/setting_implementation.rb +51 -0
  76. data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/yields.rb +81 -0
  77. data/spec/suites/rspec_2/unit/core_ext/enumerable_spec.rb +0 -28
  78. data/spec/suites/rspec_2/unit/deprecations_spec.rb +27 -0
  79. data/spec/suites/rspec_2/unit/dsl/double_creators_spec.rb +133 -0
  80. data/spec/suites/rspec_2/unit/dsl/space_spec.rb +99 -0
  81. data/spec/suites/rspec_2/unit/dsl/wildcard_matchers_spec.rb +67 -0
  82. data/spec/suites/rspec_2/unit/integrations/rspec_spec.rb +4 -19
  83. data/spec/suites/rspec_2/unit/space_spec.rb +5 -3
  84. data/spec/suites/rspec_2/unit/spy_verification_spec.rb +1 -1
  85. data/spec/support/adapter.rb +1 -1
  86. data/spec/support/adapter_tests/rspec.rb +19 -15
  87. data/spec/support/project/generator.rb +0 -4
  88. metadata +55 -48
  89. data/gemfiles/ruby_18_rspec_1.gemfile +0 -14
  90. data/gemfiles/ruby_18_rspec_1.gemfile.lock +0 -38
  91. data/gemfiles/ruby_18_rspec_1_rails_2.gemfile +0 -18
  92. data/gemfiles/ruby_18_rspec_1_rails_2.gemfile.lock +0 -64
  93. data/gemfiles/ruby_19_rspec_2_rails_3.gemfile +0 -15
  94. data/gemfiles/ruby_19_rspec_2_rails_3.gemfile.lock +0 -123
  95. data/lib/rr/adapters.rb +0 -34
  96. data/lib/rr/adapters/rr_methods.rb +0 -142
  97. data/lib/rr/integrations/rspec_1.rb +0 -46
  98. data/lib/rr/integrations/test_unit_1.rb +0 -63
  99. data/lib/rr/integrations/test_unit_2.rb +0 -17
  100. data/lib/rr/integrations/test_unit_200.rb +0 -27
  101. data/lib/rr/integrations/test_unit_200_active_support.rb +0 -25
  102. data/lib/rr/integrations/test_unit_2_active_support.rb +0 -38
  103. data/spec/suites/rspec_1/helper.rb +0 -24
  104. data/spec/suites/rspec_1/integration/rspec_1_spec.rb +0 -93
  105. data/spec/suites/rspec_1/integration/test_unit_1_spec.rb +0 -102
  106. data/spec/suites/rspec_1/integration/test_unit_2_spec.rb +0 -109
  107. data/spec/suites/rspec_1/spec_helper.rb +0 -3
  108. data/spec/suites/rspec_1_rails_2/integration/astc_rails_2_spec.rb +0 -141
  109. data/spec/suites/rspec_1_rails_2/integration/rspec_1_rails_2_spec.rb +0 -132
  110. data/spec/suites/rspec_1_rails_2/integration/test_unit_1_rails_2_spec.rb +0 -141
  111. data/spec/suites/rspec_1_rails_2/integration/test_unit_2_rails_2_spec.rb +0 -148
  112. data/spec/suites/rspec_1_rails_2/spec_helper.rb +0 -3
  113. data/spec/suites/rspec_2/functional/dsl_spec.rb +0 -13
  114. data/spec/suites/rspec_2/functional/instance_of_spec.rb +0 -14
  115. data/spec/suites/rspec_2/functional/proxy_spec.rb +0 -136
  116. data/spec/suites/rspec_2/functional/strong_spec.rb +0 -79
  117. data/spec/suites/rspec_2/integration/test_unit_200_spec.rb +0 -102
  118. data/spec/suites/rspec_2/integration/test_unit_2_spec.rb +0 -109
  119. data/spec/suites/rspec_2/unit/adapters/rr_methods/double_creators_spec.rb +0 -135
  120. data/spec/suites/rspec_2/unit/adapters/rr_methods/space_spec.rb +0 -101
  121. data/spec/suites/rspec_2/unit/adapters/rr_methods/wildcard_matchers_spec.rb +0 -69
  122. data/spec/suites/rspec_2_rails_3/integration/astc_rails_3_spec.rb +0 -141
  123. data/spec/suites/rspec_2_rails_3/integration/minitest_4_rails_3_spec.rb +0 -148
  124. data/spec/suites/rspec_2_rails_3/integration/rspec_2_rails_3_spec.rb +0 -172
  125. data/spec/suites/rspec_2_rails_3/integration/test_unit_200_rails_3_spec.rb +0 -141
  126. data/spec/suites/rspec_2_rails_3/integration/test_unit_2_rails_3_spec.rb +0 -148
  127. data/spec/suites/rspec_2_rails_3/spec_helper.rb +0 -3
  128. data/spec/suites/rspec_2_rails_4/integration/test_unit_200_rails_4_spec.rb +0 -142
  129. data/spec/suites/rspec_2_rails_4/integration/test_unit_2_rails_4_spec.rb +0 -149
@@ -0,0 +1,152 @@
1
+ module RR
2
+ module DSL
3
+ METHODS_TO_EXCLUDE_FROM_SPYING = [
4
+ :methods,
5
+ :==,
6
+ :__send__,
7
+ :__id__,
8
+ :object_id,
9
+ :class,
10
+ :respond_to?,
11
+ :inspect,
12
+ :to_s,
13
+ :respond_to_missing?,
14
+ :instance_eval,
15
+ :instance_exec
16
+ ]
17
+
18
+ include DoubleDefinitions::Strategies::StrategyMethods
19
+
20
+ def mock(subject=DoubleDefinitions::DoubleDefinitionCreate::NO_SUBJECT, method_name=nil, &definition_eval_block)
21
+ double_definition_create = DoubleDefinitions::DoubleDefinitionCreate.new
22
+ double_definition_create.mock(subject, method_name, &definition_eval_block)
23
+ end
24
+
25
+ def stub(subject=DoubleDefinitions::DoubleDefinitionCreate::NO_SUBJECT, method_name=nil, &definition_eval_block)
26
+ double_definition_create = DoubleDefinitions::DoubleDefinitionCreate.new
27
+ double_definition_create.stub(subject, method_name, &definition_eval_block)
28
+ end
29
+
30
+ def dont_allow(subject=DoubleDefinitions::DoubleDefinitionCreate::NO_SUBJECT, method_name=nil, &definition_eval_block)
31
+ double_definition_create = DoubleDefinitions::DoubleDefinitionCreate.new
32
+ double_definition_create.dont_allow(subject, method_name, &definition_eval_block)
33
+ end
34
+
35
+ def proxy(subject=DoubleDefinitions::DoubleDefinitionCreate::NO_SUBJECT, method_name=nil, &definition_eval_block)
36
+ double_definition_create = DoubleDefinitions::DoubleDefinitionCreate.new
37
+ double_definition_create.proxy(subject, method_name, &definition_eval_block)
38
+ end
39
+
40
+ def strong(subject=DoubleDefinitions::DoubleDefinitionCreate::NO_SUBJECT, method_name=nil, &definition_eval_block)
41
+ double_definition_create = DoubleDefinitions::DoubleDefinitionCreate.new
42
+ double_definition_create.strong(subject, method_name, &definition_eval_block)
43
+ end
44
+
45
+ def instance_of(subject=DoubleDefinitions::DoubleDefinitionCreate::NO_SUBJECT, method_name=nil, &definition_eval_block)
46
+ double_definition_create = DoubleDefinitions::DoubleDefinitionCreate.new
47
+ double_definition_create.instance_of(subject, method_name, &definition_eval_block)
48
+ end
49
+
50
+ def any_instance_of(*args, &block)
51
+ RR::DoubleDefinitions::DoubleInjections::AnyInstanceOf.call(*args, &block)
52
+ end
53
+
54
+ # Verifies all the DoubleInjection objects have met their
55
+ # TimesCalledExpectations.
56
+ def verify
57
+ RR::Space.instance.verify_doubles
58
+ end
59
+
60
+ # Resets the registered Doubles and ordered Doubles
61
+ def reset
62
+ RR::Space.instance.reset
63
+ end
64
+
65
+ # Returns a AnyTimesMatcher. This is meant to be passed in as an argument
66
+ # to Double#times.
67
+ #
68
+ # mock(object).method_name(anything).times(any_times) {return_value}
69
+ def any_times
70
+ TimesCalledMatchers::AnyTimesMatcher.new
71
+ end
72
+
73
+ # Sets up an Anything wildcard ArgumentEqualityExpectation
74
+ # that succeeds when passed any argument.
75
+ # mock(object).method_name(anything) {return_value}
76
+ # object.method_name("an arbitrary value") # passes
77
+ def anything
78
+ RR::WildcardMatchers::Anything.new
79
+ end
80
+
81
+ # Sets up an IsA wildcard ArgumentEqualityExpectation
82
+ # that succeeds when passed an argument of a certain type.
83
+ # mock(object).method_name(is_a(String)) {return_value}
84
+ # object.method_name("A String") # passes
85
+ def is_a(klass)
86
+ RR::WildcardMatchers::IsA.new(klass)
87
+ end
88
+
89
+ # Sets up an Numeric wildcard ArgumentEqualityExpectation
90
+ # that succeeds when passed an argument that is ::Numeric.
91
+ # mock(object).method_name(numeric) {return_value}
92
+ # object.method_name(99) # passes
93
+ def numeric
94
+ RR::WildcardMatchers::Numeric.new
95
+ end
96
+
97
+ # Sets up an Boolean wildcard ArgumentEqualityExpectation
98
+ # that succeeds when passed an argument that is a ::Boolean.
99
+ # mock(object).method_name(boolean) {return_value}
100
+ # object.method_name(false) # passes
101
+ def boolean
102
+ RR::WildcardMatchers::Boolean.new
103
+ end
104
+
105
+ # Sets up a DuckType wildcard ArgumentEqualityExpectation
106
+ # that succeeds when the passed argument implements the methods.
107
+ # arg = Object.new
108
+ # def arg.foo; end
109
+ # def arg.bar; end
110
+ # mock(object).method_name(duck_type(:foo, :bar)) {return_value}
111
+ # object.method_name(arg) # passes
112
+ def duck_type(*args)
113
+ RR::WildcardMatchers::DuckType.new(*args)
114
+ end
115
+
116
+ # Sets up a HashIncluding wildcard ArgumentEqualityExpectation
117
+ # that succeeds when the passed argument contains at least those keys
118
+ # and values of the expectation.
119
+ # mock(object).method_name(hash_including(:foo => 1)) {return_value}
120
+ # object.method_name({:foo => 1, :bar => 2) # passes
121
+ def hash_including(expected_hash)
122
+ RR::WildcardMatchers::HashIncluding.new(expected_hash)
123
+ end
124
+
125
+ # Sets up a Satisfy wildcard ArgumentEqualityExpectation
126
+ # that succeeds when the passed argument causes the expectation's
127
+ # proc to return true.
128
+ # mock(object).method_name(satisfy {|arg| arg == :foo}) {return_value}
129
+ # object.method_name(:foo) # passes
130
+ def satisfy(expectation_proc=nil, &block)
131
+ expectation_proc ||= block
132
+ RR::WildcardMatchers::Satisfy.new(expectation_proc)
133
+ end
134
+
135
+ def spy(subject)
136
+ subject_methods = subject.public_methods.map {|method_name| method_name.to_sym }
137
+ methods_to_stub = subject_methods - METHODS_TO_EXCLUDE_FROM_SPYING
138
+
139
+ methods_to_stub.each do |method|
140
+ stub.proxy(subject, method)
141
+ end
142
+ end
143
+
144
+ def received(subject)
145
+ RR::SpyVerificationProxy.new(subject)
146
+ end
147
+
148
+ instance_methods.each do |name|
149
+ alias_method "rr_#{name}", name
150
+ end
151
+ end
152
+ end
@@ -73,8 +73,12 @@ module RR
73
73
 
74
74
  subject_class.class_eval((<<-METHOD), __FILE__, __LINE__ + 1)
75
75
  def method_missing(method_name, *args, &block)
76
- obj = ::RR::Injections::MethodMissingInjection::BoundObjects[#{id}]
77
- MethodDispatches::MethodMissingDispatch.new(self, obj, method_name, args, block).call
76
+ if respond_to_missing?(method_name, true)
77
+ super
78
+ else
79
+ obj = ::RR::Injections::MethodMissingInjection::BoundObjects[#{id}]
80
+ MethodDispatches::MethodMissingDispatch.new(self, obj, method_name, args, block).call
81
+ end
78
82
  end
79
83
  METHOD
80
84
  end
@@ -36,7 +36,7 @@ module RR
36
36
  def hook
37
37
  assertion_error_class = self.assertion_error_class
38
38
  test_case_class.class_eval do
39
- include RR::Adapters::RRMethods
39
+ include RR::DSL
40
40
  include Mixin
41
41
 
42
42
  unless instance_methods.any? { |method_name| method_name.to_sym == :setup_with_rr }
@@ -20,7 +20,7 @@ module RR
20
20
  def hook
21
21
  parent_adapter_class = self.parent_adapter_class
22
22
  ::ActiveSupport::TestCase.class_eval do
23
- include RR::Adapters::RRMethods
23
+ include RR::DSL
24
24
  include parent_adapter_class::Mixin
25
25
 
26
26
  setup do
@@ -37,11 +37,3 @@ module RR
37
37
  end
38
38
  end
39
39
  end
40
-
41
- module RR
42
- module Adapters
43
- module Rspec
44
- InvocationMatcher = RR::Integrations::RSpec::InvocationMatcher
45
- end
46
- end
47
- end
@@ -1,6 +1,24 @@
1
1
  module RR
2
2
  module Integrations
3
- class RSpec2 < RSpec1
3
+ class RSpec2
4
+ module Mixin
5
+ def setup_mocks_for_rspec
6
+ RR.reset
7
+ end
8
+
9
+ def verify_mocks_for_rspec
10
+ RR.verify
11
+ end
12
+
13
+ def teardown_mocks_for_rspec
14
+ RR.reset
15
+ end
16
+
17
+ def have_received(method = nil)
18
+ RSpec::InvocationMatcher.new(method)
19
+ end
20
+ end
21
+
4
22
  def name
5
23
  'RSpec 2'
6
24
  end
@@ -14,7 +32,7 @@ module RR
14
32
  def hook
15
33
  ::RSpec.configure do |config|
16
34
  config.mock_with Mixin
17
- config.include RR::Adapters::RRMethods
35
+ config.include RR::DSL
18
36
  end
19
37
 
20
38
  patterns =
@@ -0,0 +1,29 @@
1
+ module RR
2
+ class RecordedCall < Struct.new(:subject, :method_name, :arguments, :block)
3
+ def inspect
4
+ '[%s, %s, %s, %s]' % [
5
+ subject_to_s,
6
+ method_name.inspect,
7
+ arguments.inspect,
8
+ block.inspect
9
+ ]
10
+ end
11
+
12
+ def ==(other)
13
+ other.is_a?(self.class) &&
14
+ subject == other.subject &&
15
+ method_name == other.method_name &&
16
+ arguments == other.arguments
17
+ end
18
+
19
+ private
20
+
21
+ def subject_to_s
22
+ if subject.respond_to?(:__rr__original_to_s, true)
23
+ subject.__rr__original_to_s
24
+ else
25
+ subject.to_s
26
+ end
27
+ end
28
+ end
29
+ end
@@ -9,13 +9,17 @@ module RR
9
9
 
10
10
  attr_reader :recorded_calls
11
11
 
12
+ def [](index)
13
+ @recorded_calls[index]
14
+ end
15
+
12
16
  def clear
13
17
  self.ordered_index = 0
14
18
  recorded_calls.clear
15
19
  end
16
20
 
17
- def <<(recorded_call)
18
- recorded_calls << recorded_call
21
+ def add(subject, method_name, arguments, block)
22
+ recorded_calls << RecordedCall.new(subject, method_name, arguments, block)
19
23
  end
20
24
 
21
25
  def any?(&block)
@@ -43,9 +47,9 @@ module RR
43
47
  unless Injections::DoubleInjection.exists_by_subject?(spy_verification.subject, spy_verification.method_name)
44
48
  RR::Errors.build_error(RR::Errors::SpyVerificationErrors::DoubleInjectionNotFoundError,
45
49
  "A Double Injection for the subject and method call:\n" <<
46
- "#{spy_verification.subject.inspect}\n" <<
50
+ "#{spy_verification.subject_inspect}\n" <<
47
51
  "#{spy_verification.method_name}\ndoes not exist in:\n" <<
48
- "\t#{recorded_calls.map {|call| call.inspect}.join("\n\t")}"
52
+ "\t#{recorded_calls.map {|call| call.inspect }.join("\n\t")}"
49
53
  )
50
54
  end
51
55
  end
@@ -80,7 +80,7 @@ module RR
80
80
  end
81
81
 
82
82
  def record_call(subject, method_name, arguments, block)
83
- @recorded_calls << [subject, method_name, arguments, block]
83
+ @recorded_calls.add(subject, method_name, arguments, block)
84
84
  end
85
85
 
86
86
  def blank_slate_whitelist
@@ -13,12 +13,12 @@ module RR
13
13
 
14
14
  include RR::DoubleDefinitions::DoubleDefinition::TimesDefinitionConstructionMethods
15
15
  include RR::DoubleDefinitions::DoubleDefinition::ArgumentDefinitionConstructionMethods
16
-
16
+
17
17
  def ordered
18
18
  @ordered = true
19
19
  self
20
20
  end
21
-
21
+
22
22
  def ordered?
23
23
  @ordered
24
24
  end
@@ -32,7 +32,15 @@ module RR
32
32
  call
33
33
  end
34
34
  end
35
-
35
+
36
+ def subject_inspect
37
+ if subject.respond_to?(:__rr__original_inspect, true)
38
+ subject.__rr__original_inspect
39
+ else
40
+ subject.inspect
41
+ end
42
+ end
43
+
36
44
  protected
37
45
  attr_writer :times_matcher
38
46
 
@@ -40,9 +48,9 @@ module RR
40
48
  # with_no_args and with actually set @argument_expectation
41
49
  args.empty? ? with_no_args : with(*args)
42
50
  end
43
-
51
+
44
52
  def install_method_callback(return_value_block)
45
53
  # Do nothing. This is to support DefinitionConstructionMethods
46
54
  end
47
55
  end
48
- end
56
+ end
@@ -1,4 +1,4 @@
1
1
  module RR
2
- VERSION = '1.1.2'.freeze
2
+ VERSION = '1.2.0'.freeze
3
3
  def self.version; VERSION; end
4
4
  end
@@ -12,7 +12,7 @@ divisible by a certain integer. In use, it might look like this:
12
12
 
13
13
  mock(BananaGrabber).bunch_bananas(divisible_by(5))
14
14
 
15
- To implement this, we need a class RR::WildcardMatchers::DivisibleBy with
15
+ To implement this, we need a class RR::WildcardMatchers::DivisibleBy with
16
16
  these instance methods:
17
17
 
18
18
  * ==(other)
@@ -38,7 +38,7 @@ might look like this:
38
38
  DivisibleBy#==(other) should return true if other is a wildcard matcher that
39
39
  matches the same things as self, so a natural way to write DivisibleBy#== is:
40
40
 
41
-
41
+
42
42
  class RR::WildcardMatchers::DivisibleBy
43
43
  def ==(other)
44
44
  # Ensure that other is actually a DivisibleBy
@@ -86,7 +86,7 @@ false otherwise. In the case of DivisibleBy, wildcard_matches? reads:
86
86
  # If other isn't a number, how can it be divisible by anything?
87
87
  return false unless other.is_a?(Numeric)
88
88
 
89
- # If other is in fact divisible by expected_divisor, then
89
+ # If other is in fact divisible by expected_divisor, then
90
90
  # other modulo expected_divisor should be 0.
91
91
 
92
92
  other % expected_divisor == 0
@@ -105,10 +105,10 @@ But that's less expressive than the original:
105
105
  mock(BananaGrabber).bunch_bananas(divisible_by(5))
106
106
 
107
107
  To be able to use the convenient divisible_by matcher rather than the uglier
108
- DivisibleBy.new version, re-open the module RR::Adapters::RRMethods and
109
- define divisible_by there as a simple wrapper around DivisibleBy.new:
108
+ DivisibleBy.new version, re-open the module RR::DSL and define divisible_by
109
+ there as a simple wrapper around DivisibleBy.new:
110
110
 
111
- module RR::Adapters::RRMethods
111
+ module RR::DSL
112
112
  def divisible_by(expected_divisor)
113
113
  RR::WildcardMatchers::DivisibleBy.new(expected_divisor)
114
114
  end
@@ -134,19 +134,19 @@ Here's all the code for DivisibleBy in one place for easy reference:
134
134
  def inspect
135
135
  "integer divisible by #{expected.divisor}"
136
136
  end
137
-
137
+
138
138
  def wildcard_matches?(other)
139
139
  # If other isn't a number, how can it be divisible by anything?
140
140
  return false unless other.is_a?(Numeric)
141
141
 
142
- # If other is in fact divisible by expected_divisor, then
142
+ # If other is in fact divisible by expected_divisor, then
143
143
  # other modulo expected_divisor should be 0.
144
144
 
145
145
  other % expected_divisor == 0
146
146
  end
147
147
  end
148
-
149
- module RR::Adapters::RRMethods
148
+
149
+ module RR::DSL
150
150
  def divisible_by(expected_divisor)
151
151
  RR::WildcardMatchers::DivisibleBy.new(expected_divisor)
152
152
  end
@@ -36,7 +36,7 @@ require 'rr/double_definitions/strategies/implementation/proxy'
36
36
  require 'rr/double_definitions/strategies/double_injection/double_injection_strategy'
37
37
  require 'rr/double_definitions/strategies/double_injection/instance'
38
38
  require 'rr/double_definitions/strategies/double_injection/any_instance_of'
39
- require 'rr/adapters/rr_methods'
39
+ require 'rr/dsl'
40
40
  require 'rr/double_definitions/double_injections/instance'
41
41
  require 'rr/double_definitions/double_injections/any_instance_of'
42
42
  require 'rr/double_definitions/double_definition'
@@ -49,6 +49,7 @@ require 'rr/method_dispatches/base_method_dispatch'
49
49
  require 'rr/method_dispatches/method_dispatch'
50
50
  require 'rr/method_dispatches/method_missing_dispatch'
51
51
  require 'rr/hash_with_object_id_key'
52
+ require 'rr/recorded_call'
52
53
  require 'rr/recorded_calls'
53
54
  require 'rr/proc_from_block'
54
55
 
@@ -88,24 +89,19 @@ require 'rr/spy_verification'
88
89
  require 'rr/integrations'
89
90
  require 'rr/integrations/decorator'
90
91
  require 'rr/integrations/rspec/invocation_matcher'
91
- require 'rr/integrations/rspec_1'
92
92
  require 'rr/integrations/rspec_2'
93
93
  require 'rr/integrations/minitest_4'
94
94
  require 'rr/integrations/minitest_4_active_support'
95
95
  require 'rr/integrations/minitest'
96
96
  require 'rr/integrations/minitest_active_support'
97
- require 'rr/integrations/test_unit_1'
98
- require 'rr/integrations/test_unit_200'
99
- require 'rr/integrations/test_unit_200_active_support'
100
- require 'rr/integrations/test_unit_2'
101
- require 'rr/integrations/test_unit_2_active_support'
102
- require 'rr/adapters'
97
+
98
+ require 'rr/deprecations'
103
99
 
104
100
  require 'rr/version'
105
101
 
106
102
  module RR
107
103
  class << self
108
- include Adapters::RRMethods
104
+ include DSL
109
105
 
110
106
  (RR::Space.instance_methods - Object.instance_methods).each do |method_name|
111
107
  class_eval((<<-METHOD), __FILE__, __LINE__ + 1)
@@ -117,10 +113,6 @@ module RR
117
113
 
118
114
  attr_accessor :debug
119
115
  alias_method :debug?, :debug
120
-
121
- def ruby_18?
122
- RUBY_VERSION =~ /^1\.8/
123
- end
124
116
  end
125
117
  end
126
118