rspec-mocks 2.11.3 → 2.12.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog.md +16 -0
- data/README.md +26 -1
- data/features/argument_matchers/explicit.feature +2 -2
- data/features/argument_matchers/general_matchers.feature +4 -4
- data/features/argument_matchers/type_matchers.feature +1 -1
- data/features/message_expectations/README.md +4 -0
- data/features/message_expectations/any_instance.feature +1 -1
- data/features/message_expectations/call_original.feature +24 -0
- data/features/message_expectations/expect_message.feature +5 -5
- data/features/message_expectations/receive_counts.feature +7 -7
- data/features/message_expectations/warn_when_expectation_is_set_on_nil.feature +3 -3
- data/features/method_stubs/any_instance.feature +6 -7
- data/features/method_stubs/as_null_object.feature +1 -1
- data/features/method_stubs/simple_return_value.feature +2 -2
- data/features/method_stubs/stub_chain.feature +1 -1
- data/features/method_stubs/stub_implementation.feature +1 -1
- data/features/method_stubs/to_ary.feature +1 -1
- data/features/{stubbing_constants → mutating_constants}/README.md +21 -1
- data/features/mutating_constants/hiding_defined_constant.feature +64 -0
- data/features/{stubbing_constants → mutating_constants}/stub_defined_constant.feature +0 -0
- data/features/{stubbing_constants → mutating_constants}/stub_undefined_constant.feature +0 -0
- data/features/outside_rspec/configuration.feature +3 -3
- data/features/outside_rspec/standalone.feature +6 -5
- data/lib/rspec/mocks.rb +17 -1
- data/lib/rspec/mocks/any_instance.rb +12 -12
- data/lib/rspec/mocks/configuration.rb +28 -0
- data/lib/rspec/mocks/error_generator.rb +6 -0
- data/lib/rspec/mocks/example_methods.rb +34 -9
- data/lib/rspec/mocks/framework.rb +3 -2
- data/lib/rspec/mocks/instance_method_stasher.rb +70 -0
- data/lib/rspec/mocks/message_expectation.rb +49 -29
- data/lib/rspec/mocks/method_double.rb +84 -7
- data/lib/rspec/mocks/{stub_const.rb → mutate_const.rb} +117 -40
- data/lib/rspec/mocks/proxy.rb +16 -5
- data/lib/rspec/mocks/version.rb +1 -1
- data/spec/rspec/mocks/and_call_original_spec.rb +162 -0
- data/spec/rspec/mocks/any_instance_spec.rb +18 -7
- data/spec/rspec/mocks/configuration_spec.rb +26 -0
- data/spec/rspec/mocks/failing_argument_matchers_spec.rb +9 -10
- data/spec/rspec/mocks/instance_method_stasher_spec.rb +58 -0
- data/spec/rspec/mocks/mock_spec.rb +35 -35
- data/spec/rspec/mocks/{stub_const_spec.rb → mutate_const_spec.rb} +142 -13
- data/spec/rspec/mocks/null_object_mock_spec.rb +3 -2
- data/spec/rspec/mocks/partial_mock_spec.rb +102 -77
- data/spec/rspec/mocks/serialization_spec.rb +1 -2
- data/spec/rspec/mocks/stub_implementation_spec.rb +6 -6
- data/spec/rspec/mocks_spec.rb +7 -0
- data/spec/spec_helper.rb +11 -0
- metadata +79 -80
- data/lib/rspec/mocks/stashed_instance_method.rb +0 -60
- data/spec/rspec/mocks/stashed_instance_method_spec.rb +0 -53
@@ -18,17 +18,14 @@ end
|
|
18
18
|
|
19
19
|
module RSpec
|
20
20
|
module Mocks
|
21
|
-
describe "Constant
|
21
|
+
describe "Constant Mutating" do
|
22
22
|
include RSpec::Mocks::RecursiveConstMethods
|
23
23
|
|
24
24
|
def reset_rspec_mocks
|
25
25
|
::RSpec::Mocks.space.reset_all
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
let!(:original_const_value) { const }
|
30
|
-
after { change_const_value_to(original_const_value) }
|
31
|
-
|
28
|
+
shared_context "constant example methods" do |const_name|
|
32
29
|
define_method :const do
|
33
30
|
recursive_const_get(const_name)
|
34
31
|
end
|
@@ -40,6 +37,13 @@ module RSpec
|
|
40
37
|
define_method :last_const_part do
|
41
38
|
const_name.split('::').last
|
42
39
|
end
|
40
|
+
end
|
41
|
+
|
42
|
+
shared_examples_for "loaded constant stubbing" do |const_name|
|
43
|
+
include_context "constant example methods", const_name
|
44
|
+
|
45
|
+
let!(:original_const_value) { const }
|
46
|
+
after { change_const_value_to(original_const_value) }
|
43
47
|
|
44
48
|
def change_const_value_to(value)
|
45
49
|
parent_const.send(:remove_const, last_const_part)
|
@@ -65,20 +69,29 @@ module RSpec
|
|
65
69
|
end
|
66
70
|
end
|
67
71
|
|
68
|
-
shared_examples_for "
|
69
|
-
before { recursive_const_defined?(const_name).should
|
72
|
+
shared_examples_for "loaded constant hiding" do |const_name|
|
73
|
+
before { recursive_const_defined?(const_name).should be_true }
|
70
74
|
|
71
|
-
|
72
|
-
|
75
|
+
it 'allows it to be hidden' do
|
76
|
+
hide_const(const_name)
|
77
|
+
recursive_const_defined?(const_name).should be_false
|
73
78
|
end
|
74
79
|
|
75
|
-
|
76
|
-
|
80
|
+
it 'resets the constant when rspec clear its mocks' do
|
81
|
+
hide_const(const_name)
|
82
|
+
reset_rspec_mocks
|
83
|
+
recursive_const_defined?(const_name).should be_true
|
77
84
|
end
|
78
85
|
|
79
|
-
|
80
|
-
const_name
|
86
|
+
it 'returns nil' do
|
87
|
+
hide_const(const_name).should be_nil
|
81
88
|
end
|
89
|
+
end
|
90
|
+
|
91
|
+
shared_examples_for "unloaded constant stubbing" do |const_name|
|
92
|
+
include_context "constant example methods", const_name
|
93
|
+
|
94
|
+
before { recursive_const_defined?(const_name).should be_false }
|
82
95
|
|
83
96
|
it 'allows it to be stubbed' do
|
84
97
|
stub_const(const_name, 7)
|
@@ -102,6 +115,85 @@ module RSpec
|
|
102
115
|
end
|
103
116
|
end
|
104
117
|
|
118
|
+
shared_examples_for "unloaded constant hiding" do |const_name|
|
119
|
+
include_context "constant example methods", const_name
|
120
|
+
|
121
|
+
before { recursive_const_defined?(const_name).should be_false }
|
122
|
+
|
123
|
+
it 'allows it to be hidden, though the operation has no effect' do
|
124
|
+
hide_const(const_name)
|
125
|
+
recursive_const_defined?(const_name).should be_false
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'remains undefined after rspec clears its mocks' do
|
129
|
+
hide_const(const_name)
|
130
|
+
reset_rspec_mocks
|
131
|
+
recursive_const_defined?(const_name).should be_false
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'returns nil' do
|
135
|
+
hide_const(const_name).should be_nil
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe "#hide_const" do
|
140
|
+
context 'for a loaded nested constant' do
|
141
|
+
it_behaves_like "loaded constant hiding", "TestClass::Nested"
|
142
|
+
end
|
143
|
+
|
144
|
+
context 'for an unloaded constant with nested name that matches a top-level constant' do
|
145
|
+
it_behaves_like "unloaded constant hiding", "TestClass::Hash"
|
146
|
+
|
147
|
+
it 'does not hide the top-level constant' do
|
148
|
+
top_level_hash = ::Hash
|
149
|
+
|
150
|
+
hide_const("TestClass::Hash")
|
151
|
+
expect(::Hash).to equal(top_level_hash)
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'does not affect the ability to access the top-level constant from nested contexts', :silence_warnings do
|
155
|
+
top_level_hash = ::Hash
|
156
|
+
|
157
|
+
hide_const("TestClass::Hash")
|
158
|
+
expect(TestClass::Hash).to equal(top_level_hash)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context 'for a loaded deeply nested constant' do
|
163
|
+
it_behaves_like "loaded constant hiding", "TestClass::Nested::NestedEvenMore"
|
164
|
+
end
|
165
|
+
|
166
|
+
context 'for an unloaded unnested constant' do
|
167
|
+
it_behaves_like "unloaded constant hiding", "X"
|
168
|
+
end
|
169
|
+
|
170
|
+
context 'for an unloaded nested constant' do
|
171
|
+
it_behaves_like "unloaded constant hiding", "X::Y"
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'can be hidden multiple times but still restores the original value properly' do
|
175
|
+
orig_value = TestClass
|
176
|
+
hide_const("TestClass")
|
177
|
+
hide_const("TestClass")
|
178
|
+
|
179
|
+
reset_rspec_mocks
|
180
|
+
TestClass.should be(orig_value)
|
181
|
+
end
|
182
|
+
|
183
|
+
it 'allows a constant to be hidden, then stubbed, restoring it to its original value properly' do
|
184
|
+
orig_value = TOP_LEVEL_VALUE_CONST
|
185
|
+
|
186
|
+
hide_const("TOP_LEVEL_VALUE_CONST")
|
187
|
+
recursive_const_defined?("TOP_LEVEL_VALUE_CONST").should be_false
|
188
|
+
|
189
|
+
stub_const("TOP_LEVEL_VALUE_CONST", 12345)
|
190
|
+
TOP_LEVEL_VALUE_CONST.should == 12345
|
191
|
+
|
192
|
+
reset_rspec_mocks
|
193
|
+
TOP_LEVEL_VALUE_CONST.should == orig_value
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
105
197
|
describe "#stub_const" do
|
106
198
|
context 'for a loaded unnested constant' do
|
107
199
|
it_behaves_like "loaded constant stubbing", "TestClass"
|
@@ -273,7 +365,9 @@ module RSpec
|
|
273
365
|
|
274
366
|
it("exposes its name") { const.name.should eq("TestClass::M") }
|
275
367
|
it("indicates it was previously defined") { const.should be_previously_defined }
|
368
|
+
it("indicates it has not been mutated") { const.should_not be_mutated }
|
276
369
|
it("indicates it has not been stubbed") { const.should_not be_stubbed }
|
370
|
+
it("indicates it has not been hidden") { const.should_not be_hidden }
|
277
371
|
it("exposes its original value") { const.original_value.should eq(:m) }
|
278
372
|
end
|
279
373
|
|
@@ -283,7 +377,9 @@ module RSpec
|
|
283
377
|
|
284
378
|
it("exposes its name") { const.name.should eq("TestClass::M") }
|
285
379
|
it("indicates it was previously defined") { const.should be_previously_defined }
|
380
|
+
it("indicates it has been mutated") { const.should be_mutated }
|
286
381
|
it("indicates it has been stubbed") { const.should be_stubbed }
|
382
|
+
it("indicates it has not been hidden") { const.should_not be_hidden }
|
287
383
|
it("exposes its original value") { const.original_value.should eq(:m) }
|
288
384
|
end
|
289
385
|
|
@@ -293,7 +389,9 @@ module RSpec
|
|
293
389
|
|
294
390
|
it("exposes its name") { const.name.should eq("TestClass::Undefined") }
|
295
391
|
it("indicates it was not previously defined") { const.should_not be_previously_defined }
|
392
|
+
it("indicates it has been mutated") { const.should be_mutated }
|
296
393
|
it("indicates it has been stubbed") { const.should be_stubbed }
|
394
|
+
it("indicates it has not been hidden") { const.should_not be_hidden }
|
297
395
|
it("returns nil for the original value") { const.original_value.should be_nil }
|
298
396
|
end
|
299
397
|
|
@@ -302,7 +400,9 @@ module RSpec
|
|
302
400
|
|
303
401
|
it("exposes its name") { const.name.should eq("TestClass::Undefined") }
|
304
402
|
it("indicates it was not previously defined") { const.should_not be_previously_defined }
|
403
|
+
it("indicates it has not been mutated") { const.should_not be_mutated }
|
305
404
|
it("indicates it has not been stubbed") { const.should_not be_stubbed }
|
405
|
+
it("indicates it has not been hidden") { const.should_not be_hidden }
|
306
406
|
it("returns nil for the original value") { const.original_value.should be_nil }
|
307
407
|
end
|
308
408
|
|
@@ -313,7 +413,9 @@ module RSpec
|
|
313
413
|
|
314
414
|
it("exposes its name") { const.name.should eq("TestClass::M") }
|
315
415
|
it("indicates it was previously defined") { const.should be_previously_defined }
|
416
|
+
it("indicates it has been mutated") { const.should be_mutated }
|
316
417
|
it("indicates it has been stubbed") { const.should be_stubbed }
|
418
|
+
it("indicates it has not been hidden") { const.should_not be_hidden }
|
317
419
|
it("exposes its original value") { const.original_value.should eq(:m) }
|
318
420
|
end
|
319
421
|
|
@@ -324,9 +426,36 @@ module RSpec
|
|
324
426
|
|
325
427
|
it("exposes its name") { const.name.should eq("TestClass::Undefined") }
|
326
428
|
it("indicates it was not previously defined") { const.should_not be_previously_defined }
|
429
|
+
it("indicates it has been mutated") { const.should be_mutated }
|
327
430
|
it("indicates it has been stubbed") { const.should be_stubbed }
|
431
|
+
it("indicates it has not been hidden") { const.should_not be_hidden }
|
328
432
|
it("returns nil for the original value") { const.original_value.should be_nil }
|
329
433
|
end
|
434
|
+
|
435
|
+
context 'for a previously defined hidden constant' do
|
436
|
+
before { hide_const("TestClass::M") }
|
437
|
+
let(:const) { Constant.original("TestClass::M") }
|
438
|
+
|
439
|
+
it("exposes its name") { const.name.should eq("TestClass::M") }
|
440
|
+
it("indicates it was previously defined") { const.should be_previously_defined }
|
441
|
+
it("indicates it has been mutated") { const.should be_mutated }
|
442
|
+
it("indicates it has not been stubbed") { const.should_not be_stubbed }
|
443
|
+
it("indicates it has been hidden") { const.should be_hidden }
|
444
|
+
it("exposes its original value") { const.original_value.should eq(:m) }
|
445
|
+
end
|
446
|
+
|
447
|
+
context 'for a previously defined constant that has been hidden twice' do
|
448
|
+
before { hide_const("TestClass::M") }
|
449
|
+
before { hide_const("TestClass::M") }
|
450
|
+
let(:const) { Constant.original("TestClass::M") }
|
451
|
+
|
452
|
+
it("exposes its name") { const.name.should eq("TestClass::M") }
|
453
|
+
it("indicates it was previously defined") { const.should be_previously_defined }
|
454
|
+
it("indicates it has been mutated") { const.should be_mutated }
|
455
|
+
it("indicates it has not been stubbed") { const.should_not be_stubbed }
|
456
|
+
it("indicates it has been hidden") { const.should be_hidden }
|
457
|
+
it("exposes its original value") { const.original_value.should eq(:m) }
|
458
|
+
end
|
330
459
|
end
|
331
460
|
end
|
332
461
|
end
|
@@ -17,8 +17,9 @@ module RSpec
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "raises an error when interpolated in a string as an integer" do
|
20
|
-
# Not sure why, but 1.9.2
|
21
|
-
|
20
|
+
# Not sure why, but 1.9.2 (but not JRuby --1.9) raises a different
|
21
|
+
# error than 1.8.7 and 1.9.3...
|
22
|
+
expected_error = (RUBY_VERSION == '1.9.2' && RUBY_PLATFORM !~ /java/) ?
|
22
23
|
RSpec::Mocks::MockExpectationError :
|
23
24
|
TypeError
|
24
25
|
|
@@ -3,93 +3,91 @@ require 'spec_helper'
|
|
3
3
|
module RSpec
|
4
4
|
module Mocks
|
5
5
|
describe "using a Partial Mock," do
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
-
|
6
|
+
let(:object) { Object.new }
|
7
|
+
|
10
8
|
it "names the class in the failure message" do
|
11
|
-
|
9
|
+
object.should_receive(:foo)
|
12
10
|
expect do
|
13
|
-
|
11
|
+
object.rspec_verify
|
14
12
|
end.to raise_error(RSpec::Mocks::MockExpectationError, /\(#<Object:.*>\).foo/)
|
15
13
|
end
|
16
|
-
|
14
|
+
|
17
15
|
it "names the class in the failure message when expectation is on class" do
|
18
16
|
Object.should_receive(:foo)
|
19
17
|
lambda do
|
20
18
|
Object.rspec_verify
|
21
19
|
end.should raise_error(RSpec::Mocks::MockExpectationError, /<Object \(class\)>/)
|
22
20
|
end
|
23
|
-
|
21
|
+
|
24
22
|
it "does not conflict with @options in the object" do
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
object.instance_eval { @options = Object.new }
|
24
|
+
object.should_receive(:blah)
|
25
|
+
object.blah
|
28
26
|
end
|
29
|
-
|
27
|
+
|
30
28
|
it "should_not_receive mocks out the method" do
|
31
|
-
|
29
|
+
object.should_not_receive(:fuhbar)
|
32
30
|
expect {
|
33
|
-
|
31
|
+
object.fuhbar
|
34
32
|
}.to raise_error(
|
35
|
-
RSpec::Mocks::MockExpectationError,
|
33
|
+
RSpec::Mocks::MockExpectationError,
|
36
34
|
/expected\: 0 times\n received\: 1 time/
|
37
35
|
)
|
38
36
|
end
|
39
|
-
|
37
|
+
|
40
38
|
it "should_not_receive returns a negative message expectation" do
|
41
|
-
|
39
|
+
object.should_not_receive(:foobar).should be_kind_of(RSpec::Mocks::NegativeMessageExpectation)
|
42
40
|
end
|
43
|
-
|
41
|
+
|
44
42
|
it "should_receive mocks out the method" do
|
45
|
-
|
46
|
-
|
43
|
+
object.should_receive(:foobar).with(:test_param).and_return(1)
|
44
|
+
object.foobar(:test_param).should equal(1)
|
47
45
|
end
|
48
|
-
|
46
|
+
|
49
47
|
it "should_receive handles a hash" do
|
50
|
-
|
51
|
-
|
48
|
+
object.should_receive(:foobar).with(:key => "value").and_return(1)
|
49
|
+
object.foobar(:key => "value").should equal(1)
|
52
50
|
end
|
53
|
-
|
51
|
+
|
54
52
|
it "should_receive handles an inner hash" do
|
55
53
|
hash = {:a => {:key => "value"}}
|
56
|
-
|
57
|
-
|
54
|
+
object.should_receive(:foobar).with(:key => "value").and_return(1)
|
55
|
+
object.foobar(hash[:a]).should equal(1)
|
58
56
|
end
|
59
|
-
|
57
|
+
|
60
58
|
it "should_receive returns a message expectation" do
|
61
|
-
|
62
|
-
|
59
|
+
object.should_receive(:foobar).should be_kind_of(RSpec::Mocks::MessageExpectation)
|
60
|
+
object.foobar
|
63
61
|
end
|
64
|
-
|
62
|
+
|
65
63
|
it "should_receive verifies method was called" do
|
66
|
-
|
64
|
+
object.should_receive(:foobar).with(:test_param).and_return(1)
|
67
65
|
lambda do
|
68
|
-
|
66
|
+
object.rspec_verify
|
69
67
|
end.should raise_error(RSpec::Mocks::MockExpectationError)
|
70
68
|
end
|
71
|
-
|
69
|
+
|
72
70
|
it "should_receive also takes a String argument" do
|
73
|
-
|
74
|
-
|
71
|
+
object.should_receive('foobar')
|
72
|
+
object.foobar
|
75
73
|
end
|
76
|
-
|
74
|
+
|
77
75
|
it "should_not_receive also takes a String argument" do
|
78
|
-
|
76
|
+
object.should_not_receive('foobar')
|
79
77
|
lambda do
|
80
|
-
|
78
|
+
object.foobar
|
81
79
|
end.should raise_error(RSpec::Mocks::MockExpectationError)
|
82
80
|
end
|
83
|
-
|
81
|
+
|
84
82
|
it "uses reports nil in the error message" do
|
85
83
|
allow_message_expectations_on_nil
|
86
|
-
|
87
|
-
|
88
|
-
|
84
|
+
|
85
|
+
_nil = nil
|
86
|
+
_nil.should_receive(:foobar)
|
89
87
|
expect {
|
90
|
-
|
88
|
+
_nil.rspec_verify
|
91
89
|
}.to raise_error(
|
92
|
-
RSpec::Mocks::MockExpectationError,
|
90
|
+
RSpec::Mocks::MockExpectationError,
|
93
91
|
%Q|(nil).foobar(any args)\n expected: 1 time\n received: 0 times|
|
94
92
|
)
|
95
93
|
end
|
@@ -109,61 +107,88 @@ module RSpec
|
|
109
107
|
}.to raise_error(RSpec::Mocks::MockExpectationError, /MyClass/)
|
110
108
|
end
|
111
109
|
end
|
112
|
-
|
110
|
+
|
111
|
+
describe "Using a partial mock on a proxy object", :if => defined?(::BasicObject) do
|
112
|
+
let(:proxy_class) do
|
113
|
+
Class.new(::BasicObject) do
|
114
|
+
def initialize(target)
|
115
|
+
@target = target
|
116
|
+
end
|
117
|
+
|
118
|
+
def proxied?
|
119
|
+
true
|
120
|
+
end
|
121
|
+
|
122
|
+
def method_missing(*a)
|
123
|
+
@target.send(*a)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
let(:instance) { proxy_class.new(Object.new) }
|
129
|
+
|
130
|
+
it 'works properly' do
|
131
|
+
instance.should_receive(:proxied?).and_return(false)
|
132
|
+
instance.should_not be_proxied
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
113
136
|
describe "Partially mocking an object that defines ==, after another mock has been defined" do
|
114
137
|
before(:each) do
|
115
138
|
stub("existing mock", :foo => :foo)
|
116
139
|
end
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
140
|
+
|
141
|
+
let(:klass) do
|
142
|
+
Class.new do
|
143
|
+
attr_reader :val
|
144
|
+
def initialize(val)
|
145
|
+
@val = val
|
146
|
+
end
|
147
|
+
|
148
|
+
def ==(other)
|
149
|
+
@val == other.val
|
150
|
+
end
|
126
151
|
end
|
127
152
|
end
|
128
|
-
|
153
|
+
|
129
154
|
it "does not raise an error when stubbing the object" do
|
130
|
-
o =
|
131
|
-
|
155
|
+
o = klass.new :foo
|
156
|
+
expect { o.stub(:bar) }.not_to raise_error(NoMethodError)
|
132
157
|
end
|
133
158
|
end
|
134
159
|
|
135
160
|
describe "Method visibility when using partial mocks" do
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
161
|
+
let(:klass) do
|
162
|
+
Class.new do
|
163
|
+
def public_method
|
164
|
+
private_method
|
165
|
+
protected_method
|
166
|
+
end
|
167
|
+
protected
|
168
|
+
def protected_method; end
|
169
|
+
private
|
170
|
+
def private_method; end
|
140
171
|
end
|
141
|
-
protected
|
142
|
-
def protected_method; end
|
143
|
-
private
|
144
|
-
def private_method; end
|
145
172
|
end
|
146
173
|
|
147
|
-
|
148
|
-
@object = MockableClass.new
|
149
|
-
end
|
174
|
+
let(:object) { klass.new }
|
150
175
|
|
151
176
|
it 'keeps public methods public' do
|
152
|
-
|
153
|
-
|
154
|
-
|
177
|
+
object.should_receive(:public_method)
|
178
|
+
object.public_methods.should include_method(:public_method)
|
179
|
+
object.public_method
|
155
180
|
end
|
156
181
|
|
157
182
|
it 'keeps private methods private' do
|
158
|
-
|
159
|
-
|
160
|
-
|
183
|
+
object.should_receive(:private_method)
|
184
|
+
object.private_methods.should include_method(:private_method)
|
185
|
+
object.public_method
|
161
186
|
end
|
162
187
|
|
163
188
|
it 'keeps protected methods protected' do
|
164
|
-
|
165
|
-
|
166
|
-
|
189
|
+
object.should_receive(:protected_method)
|
190
|
+
object.protected_methods.should include_method(:protected_method)
|
191
|
+
object.public_method
|
167
192
|
end
|
168
193
|
|
169
194
|
end
|