rspec-mocks 2.0.0.beta.20 → 2.0.0.beta.22
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -3
- data/History.md +10 -0
- data/Rakefile +2 -27
- data/features/stubs/stub_chain.feature +44 -0
- data/lib/rspec/mocks/methods.rb +20 -9
- data/lib/rspec/mocks/mock.rb +4 -0
- data/lib/rspec/mocks/proxy.rb +1 -1
- data/lib/rspec/mocks/version.rb +1 -1
- data/rspec-mocks.gemspec +20 -162
- data/spec/rspec/mocks/null_object_mock_spec.rb +40 -21
- data/spec/rspec/mocks/partial_mock_spec.rb +3 -18
- data/spec/rspec/mocks/stub_chain_spec.rb +73 -6
- data/spec/rspec/mocks/stub_implementation_spec.rb +2 -2
- data/spec/spec_helper.rb +4 -12
- metadata +21 -16
- data/VERSION +0 -1
- data/lib/rspec/mocks/extensions.rb +0 -0
- data/spec/support/macros.rb +0 -29
data/Gemfile
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
3
|
gem "rake"
|
4
|
-
gem "jeweler"
|
5
4
|
gem "cucumber"
|
6
5
|
gem "aruba", ">= 0.2.0"
|
7
6
|
gem "autotest"
|
8
7
|
gem "rspec-mocks", :path => "."
|
9
8
|
gem "rspec-core", :path => "../rspec-core"
|
10
9
|
gem "rspec-expectations", :path => "../rspec-expectations"
|
11
|
-
|
10
|
+
|
11
|
+
case RUBY_VERSION.to_s
|
12
|
+
when '1.9.2'
|
12
13
|
gem "ruby-debug19"
|
13
|
-
|
14
|
+
when /^1.8/
|
14
15
|
gem "ruby-debug"
|
15
16
|
end
|
data/History.md
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
## rspec-mocks release history (incomplete)
|
2
|
+
|
3
|
+
### 2.0.0.beta.22 / 2010-09-12
|
4
|
+
|
5
|
+
[full changelog](http://github.com/rspec/rspec-mocks/compare/v2.0.0.beta.20...v2.0.0.beta.22)
|
6
|
+
|
7
|
+
* Bug fixes
|
8
|
+
* fixed regression that broke obj.stub_chain(:a, :b => :c)
|
9
|
+
* fixed regression that broke obj.stub_chain(:a, :b) { :c }
|
10
|
+
* respond_to? always returns true when using as_null_object
|
data/Rakefile
CHANGED
@@ -1,36 +1,11 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler.setup
|
3
|
+
Bundler::GemHelper.install_tasks
|
3
4
|
|
4
5
|
require 'rake'
|
5
|
-
require 'rspec/mocks/version'
|
6
6
|
require 'rspec/core/rake_task'
|
7
7
|
require 'cucumber/rake/task'
|
8
8
|
|
9
|
-
begin
|
10
|
-
require 'jeweler'
|
11
|
-
Jeweler::Tasks.new do |gem|
|
12
|
-
gem.name = "rspec-mocks"
|
13
|
-
gem.version = RSpec::Mocks::Version::STRING
|
14
|
-
gem.summary = "rspec-mocks-#{RSpec::Mocks::Version::STRING}"
|
15
|
-
gem.description = "RSpec's 'test double' framework, with support for stubbing and mocking"
|
16
|
-
gem.email = "dchelimsky@gmail.com;chad.humphries@gmail.com"
|
17
|
-
gem.homepage = "http://github.com/rspec/mocks"
|
18
|
-
gem.authors = ["David Chelimsky", "Chad Humphries"]
|
19
|
-
gem.rubyforge_project = "rspec"
|
20
|
-
gem.add_development_dependency 'rspec-core', RSpec::Mocks::Version::STRING
|
21
|
-
gem.add_development_dependency 'rspec-expectations', RSpec::Mocks::Version::STRING
|
22
|
-
end
|
23
|
-
rescue LoadError
|
24
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
25
|
-
end
|
26
|
-
|
27
|
-
namespace :gem do
|
28
|
-
desc "push to gemcutter"
|
29
|
-
task :push => :build do
|
30
|
-
system "gem push pkg/rspec-mocks-#{RSpec::Mocks::Version::STRING}.gem"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
9
|
RSpec::Core::RakeTask.new(:spec)
|
35
10
|
|
36
11
|
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
@@ -64,4 +39,4 @@ Rake::RDocTask.new do |rdoc|
|
|
64
39
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
65
40
|
end
|
66
41
|
|
67
|
-
task :default => [:
|
42
|
+
task :default => [:spec, :cucumber]
|
@@ -0,0 +1,44 @@
|
|
1
|
+
Feature: stub_chain
|
2
|
+
|
3
|
+
The stub_chain method lets you to stub a chain of methods in one statement.
|
4
|
+
Method chains are considered a design smell, but it's not really the method
|
5
|
+
chain that is the problem - it's the dependency chain represented by a chain
|
6
|
+
of messages to different objects:
|
7
|
+
|
8
|
+
foo.get_bar.get_baz
|
9
|
+
|
10
|
+
This is a Law of Demeter violation if get_bar() returns an object other than
|
11
|
+
foo, and get_baz() returns yet another object.
|
12
|
+
|
13
|
+
Fluent interfaces look similar from a caller's perspective, but don't
|
14
|
+
represent a dependency chain (the caller depends only on the object it is
|
15
|
+
calling). Consider this common example from Ruby on Rails:
|
16
|
+
|
17
|
+
Article.recent.by(current_user)
|
18
|
+
|
19
|
+
The recent() and by() methods return the same object, so this is not
|
20
|
+
a Law of Demeter violation.
|
21
|
+
|
22
|
+
Scenario: stub a chain of methods
|
23
|
+
Given a file named "stub_chain_spec.rb" with:
|
24
|
+
"""
|
25
|
+
describe "stubbing a chain of methods" do
|
26
|
+
subject { Object.new }
|
27
|
+
|
28
|
+
context "given symbols representing methods" do
|
29
|
+
it "returns the correct value" do
|
30
|
+
subject.stub_chain(:one, :two, :three).and_return(:four)
|
31
|
+
subject.one.two.three.should eq(:four)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "given a string of methods separated by dots" do
|
36
|
+
it "returns the correct value" do
|
37
|
+
subject.stub_chain("one.two.three").and_return(:four)
|
38
|
+
subject.one.two.three.should eq(:four)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
"""
|
43
|
+
When I run "rspec stub_chain_spec.rb"
|
44
|
+
Then the output should contain "2 examples, 0 failures"
|
data/lib/rspec/mocks/methods.rb
CHANGED
@@ -34,19 +34,19 @@ module RSpec
|
|
34
34
|
# == Examples
|
35
35
|
#
|
36
36
|
# Article.stub_chain("recent.published") { [Article.new] }
|
37
|
-
def stub_chain(*chain)
|
38
|
-
|
39
|
-
if
|
40
|
-
if matching_stub = __mock_proxy.__send__(:find_matching_method_stub,
|
41
|
-
|
42
|
-
matching_stub.invoke.stub_chain(*
|
37
|
+
def stub_chain(*chain, &blk)
|
38
|
+
chain, blk = format_chain(*chain, &blk)
|
39
|
+
if chain.length > 1
|
40
|
+
if matching_stub = __mock_proxy.__send__(:find_matching_method_stub, chain[0].to_sym)
|
41
|
+
chain.shift
|
42
|
+
matching_stub.invoke.stub_chain(*chain)
|
43
43
|
else
|
44
44
|
next_in_chain = Object.new
|
45
|
-
stub(
|
46
|
-
next_in_chain.stub_chain(*
|
45
|
+
stub(chain.shift) { next_in_chain }
|
46
|
+
next_in_chain.stub_chain(*chain, &blk)
|
47
47
|
end
|
48
48
|
else
|
49
|
-
stub(
|
49
|
+
stub(chain.shift, &blk)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -79,6 +79,17 @@ module RSpec
|
|
79
79
|
@mock_proxy ||= Proxy.new(self)
|
80
80
|
end
|
81
81
|
end
|
82
|
+
|
83
|
+
def format_chain(*chain, &blk)
|
84
|
+
if Hash === chain.last
|
85
|
+
hash = chain.pop
|
86
|
+
hash.each do |k,v|
|
87
|
+
chain << k
|
88
|
+
blk = lambda { v }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
return chain.join('.').split('.'), blk
|
92
|
+
end
|
82
93
|
end
|
83
94
|
end
|
84
95
|
end
|
data/lib/rspec/mocks/mock.rb
CHANGED
data/lib/rspec/mocks/proxy.rb
CHANGED
data/lib/rspec/mocks/version.rb
CHANGED
data/rspec-mocks.gemspec
CHANGED
@@ -1,170 +1,28 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
3
|
+
require "rspec/mocks/version"
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
6
|
+
s.name = "rspec-mocks"
|
7
|
+
s.version = RSpec::Mocks::Version::STRING
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["David Chelimsky", "Chad Humphries"]
|
10
|
+
s.email = "dchelimsky@gmail.com;chad.humphries@gmail.com"
|
11
|
+
s.homepage = "http://github.com/rspec/rspec-mocks"
|
12
|
+
s.summary = "rspec-mocks-#{RSpec::Mocks::Version::STRING}"
|
13
|
+
s.description = "RSpec's 'test double' framework, with support for stubbing and mocking"
|
9
14
|
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.date = %q{2010-08-24}
|
13
|
-
s.description = %q{RSpec's 'test double' framework, with support for stubbing and mocking}
|
14
|
-
s.email = %q{dchelimsky@gmail.com;chad.humphries@gmail.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"README.markdown"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
".autotest",
|
20
|
-
".document",
|
21
|
-
".gitignore",
|
22
|
-
"Gemfile",
|
23
|
-
"License.txt",
|
24
|
-
"README.markdown",
|
25
|
-
"Rakefile",
|
26
|
-
"VERSION",
|
27
|
-
"autotest/discover.rb",
|
28
|
-
"cucumber.yml",
|
29
|
-
"features/README.markdown",
|
30
|
-
"features/configuration.feature",
|
31
|
-
"features/mocks/block_local_expectations.feature",
|
32
|
-
"features/mocks/warn_when_expectation_is_set_on_nil.feature",
|
33
|
-
"features/stubs/stub_implementation.feature",
|
34
|
-
"features/support/env.rb",
|
35
|
-
"lib/rspec/mocks.rb",
|
36
|
-
"lib/rspec/mocks/argument_expectation.rb",
|
37
|
-
"lib/rspec/mocks/argument_matchers.rb",
|
38
|
-
"lib/rspec/mocks/error_generator.rb",
|
39
|
-
"lib/rspec/mocks/errors.rb",
|
40
|
-
"lib/rspec/mocks/extensions.rb",
|
41
|
-
"lib/rspec/mocks/extensions/instance_exec.rb",
|
42
|
-
"lib/rspec/mocks/extensions/object.rb",
|
43
|
-
"lib/rspec/mocks/framework.rb",
|
44
|
-
"lib/rspec/mocks/message_expectation.rb",
|
45
|
-
"lib/rspec/mocks/method_double.rb",
|
46
|
-
"lib/rspec/mocks/methods.rb",
|
47
|
-
"lib/rspec/mocks/mock.rb",
|
48
|
-
"lib/rspec/mocks/order_group.rb",
|
49
|
-
"lib/rspec/mocks/proxy.rb",
|
50
|
-
"lib/rspec/mocks/space.rb",
|
51
|
-
"lib/rspec/mocks/spec_methods.rb",
|
52
|
-
"lib/rspec/mocks/version.rb",
|
53
|
-
"lib/spec/mocks.rb",
|
54
|
-
"rspec-mocks.gemspec",
|
55
|
-
"spec/rspec/mocks/and_yield_spec.rb",
|
56
|
-
"spec/rspec/mocks/any_number_of_times_spec.rb",
|
57
|
-
"spec/rspec/mocks/argument_expectation_spec.rb",
|
58
|
-
"spec/rspec/mocks/at_least_spec.rb",
|
59
|
-
"spec/rspec/mocks/at_most_spec.rb",
|
60
|
-
"spec/rspec/mocks/block_return_value_spec.rb",
|
61
|
-
"spec/rspec/mocks/bug_report_10260_spec.rb",
|
62
|
-
"spec/rspec/mocks/bug_report_10263_spec.rb",
|
63
|
-
"spec/rspec/mocks/bug_report_11545_spec.rb",
|
64
|
-
"spec/rspec/mocks/bug_report_15719_spec.rb",
|
65
|
-
"spec/rspec/mocks/bug_report_496_spec.rb",
|
66
|
-
"spec/rspec/mocks/bug_report_600_spec.rb",
|
67
|
-
"spec/rspec/mocks/bug_report_7611_spec.rb",
|
68
|
-
"spec/rspec/mocks/bug_report_7805_spec.rb",
|
69
|
-
"spec/rspec/mocks/bug_report_8165_spec.rb",
|
70
|
-
"spec/rspec/mocks/bug_report_8302_spec.rb",
|
71
|
-
"spec/rspec/mocks/bug_report_830_spec.rb",
|
72
|
-
"spec/rspec/mocks/bug_report_957_spec.rb",
|
73
|
-
"spec/rspec/mocks/double_spec.rb",
|
74
|
-
"spec/rspec/mocks/failing_argument_matchers_spec.rb",
|
75
|
-
"spec/rspec/mocks/hash_including_matcher_spec.rb",
|
76
|
-
"spec/rspec/mocks/hash_not_including_matcher_spec.rb",
|
77
|
-
"spec/rspec/mocks/mock_ordering_spec.rb",
|
78
|
-
"spec/rspec/mocks/mock_space_spec.rb",
|
79
|
-
"spec/rspec/mocks/mock_spec.rb",
|
80
|
-
"spec/rspec/mocks/multiple_return_value_spec.rb",
|
81
|
-
"spec/rspec/mocks/nil_expectation_warning_spec.rb",
|
82
|
-
"spec/rspec/mocks/null_object_mock_spec.rb",
|
83
|
-
"spec/rspec/mocks/once_counts_spec.rb",
|
84
|
-
"spec/rspec/mocks/options_hash_spec.rb",
|
85
|
-
"spec/rspec/mocks/partial_mock_spec.rb",
|
86
|
-
"spec/rspec/mocks/partial_mock_using_mocks_directly_spec.rb",
|
87
|
-
"spec/rspec/mocks/passing_argument_matchers_spec.rb",
|
88
|
-
"spec/rspec/mocks/precise_counts_spec.rb",
|
89
|
-
"spec/rspec/mocks/record_messages_spec.rb",
|
90
|
-
"spec/rspec/mocks/stash_spec.rb",
|
91
|
-
"spec/rspec/mocks/stub_chain_spec.rb",
|
92
|
-
"spec/rspec/mocks/stub_implementation_spec.rb",
|
93
|
-
"spec/rspec/mocks/stub_spec.rb",
|
94
|
-
"spec/rspec/mocks/stubbed_message_expectations_spec.rb",
|
95
|
-
"spec/rspec/mocks/twice_counts_spec.rb",
|
96
|
-
"spec/rspec/mocks_spec.rb",
|
97
|
-
"spec/spec_helper.rb",
|
98
|
-
"spec/support/macros.rb",
|
99
|
-
"specs.watchr"
|
100
|
-
]
|
101
|
-
s.homepage = %q{http://github.com/rspec/mocks}
|
102
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
103
|
-
s.require_paths = ["lib"]
|
104
|
-
s.rubyforge_project = %q{rspec}
|
105
|
-
s.rubygems_version = %q{1.3.7}
|
106
|
-
s.summary = %q{rspec-mocks-2.0.0.beta.20}
|
107
|
-
s.test_files = [
|
108
|
-
"spec/rspec/mocks/and_yield_spec.rb",
|
109
|
-
"spec/rspec/mocks/any_number_of_times_spec.rb",
|
110
|
-
"spec/rspec/mocks/argument_expectation_spec.rb",
|
111
|
-
"spec/rspec/mocks/at_least_spec.rb",
|
112
|
-
"spec/rspec/mocks/at_most_spec.rb",
|
113
|
-
"spec/rspec/mocks/block_return_value_spec.rb",
|
114
|
-
"spec/rspec/mocks/bug_report_10260_spec.rb",
|
115
|
-
"spec/rspec/mocks/bug_report_10263_spec.rb",
|
116
|
-
"spec/rspec/mocks/bug_report_11545_spec.rb",
|
117
|
-
"spec/rspec/mocks/bug_report_15719_spec.rb",
|
118
|
-
"spec/rspec/mocks/bug_report_496_spec.rb",
|
119
|
-
"spec/rspec/mocks/bug_report_600_spec.rb",
|
120
|
-
"spec/rspec/mocks/bug_report_7611_spec.rb",
|
121
|
-
"spec/rspec/mocks/bug_report_7805_spec.rb",
|
122
|
-
"spec/rspec/mocks/bug_report_8165_spec.rb",
|
123
|
-
"spec/rspec/mocks/bug_report_8302_spec.rb",
|
124
|
-
"spec/rspec/mocks/bug_report_830_spec.rb",
|
125
|
-
"spec/rspec/mocks/bug_report_957_spec.rb",
|
126
|
-
"spec/rspec/mocks/double_spec.rb",
|
127
|
-
"spec/rspec/mocks/failing_argument_matchers_spec.rb",
|
128
|
-
"spec/rspec/mocks/hash_including_matcher_spec.rb",
|
129
|
-
"spec/rspec/mocks/hash_not_including_matcher_spec.rb",
|
130
|
-
"spec/rspec/mocks/mock_ordering_spec.rb",
|
131
|
-
"spec/rspec/mocks/mock_space_spec.rb",
|
132
|
-
"spec/rspec/mocks/mock_spec.rb",
|
133
|
-
"spec/rspec/mocks/multiple_return_value_spec.rb",
|
134
|
-
"spec/rspec/mocks/nil_expectation_warning_spec.rb",
|
135
|
-
"spec/rspec/mocks/null_object_mock_spec.rb",
|
136
|
-
"spec/rspec/mocks/once_counts_spec.rb",
|
137
|
-
"spec/rspec/mocks/options_hash_spec.rb",
|
138
|
-
"spec/rspec/mocks/partial_mock_spec.rb",
|
139
|
-
"spec/rspec/mocks/partial_mock_using_mocks_directly_spec.rb",
|
140
|
-
"spec/rspec/mocks/passing_argument_matchers_spec.rb",
|
141
|
-
"spec/rspec/mocks/precise_counts_spec.rb",
|
142
|
-
"spec/rspec/mocks/record_messages_spec.rb",
|
143
|
-
"spec/rspec/mocks/stash_spec.rb",
|
144
|
-
"spec/rspec/mocks/stub_chain_spec.rb",
|
145
|
-
"spec/rspec/mocks/stub_implementation_spec.rb",
|
146
|
-
"spec/rspec/mocks/stub_spec.rb",
|
147
|
-
"spec/rspec/mocks/stubbed_message_expectations_spec.rb",
|
148
|
-
"spec/rspec/mocks/twice_counts_spec.rb",
|
149
|
-
"spec/rspec/mocks_spec.rb",
|
150
|
-
"spec/spec_helper.rb",
|
151
|
-
"spec/support/macros.rb"
|
152
|
-
]
|
15
|
+
s.rubygems_version = "1.3.7"
|
16
|
+
s.rubyforge_project = "rspec"
|
153
17
|
|
154
|
-
|
155
|
-
|
156
|
-
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
|
+
s.extra_rdoc_files = [ "README.markdown" ]
|
22
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
23
|
+
s.require_path = "lib"
|
157
24
|
|
158
|
-
|
159
|
-
|
160
|
-
s.add_development_dependency(%q<rspec-expectations>, ["= 2.0.0.beta.20"])
|
161
|
-
else
|
162
|
-
s.add_dependency(%q<rspec-core>, ["= 2.0.0.beta.20"])
|
163
|
-
s.add_dependency(%q<rspec-expectations>, ["= 2.0.0.beta.20"])
|
164
|
-
end
|
165
|
-
else
|
166
|
-
s.add_dependency(%q<rspec-core>, ["= 2.0.0.beta.20"])
|
167
|
-
s.add_dependency(%q<rspec-expectations>, ["= 2.0.0.beta.20"])
|
168
|
-
end
|
25
|
+
s.add_dependency "rspec-core", RSpec::Mocks::Version::STRING
|
26
|
+
s.add_dependency "rspec-expectations", RSpec::Mocks::Version::STRING
|
169
27
|
end
|
170
28
|
|
@@ -2,45 +2,57 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module RSpec
|
4
4
|
module Mocks
|
5
|
-
describe "a
|
5
|
+
describe "a double _not_ acting as a null object" do
|
6
6
|
before(:each) do
|
7
|
-
@
|
7
|
+
@double = double('non-null object')
|
8
|
+
end
|
9
|
+
|
10
|
+
it "says it does not respond to messages it doesn't understand" do
|
11
|
+
@double.should_not respond_to(:foo)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "says it responds to messages it does understand" do
|
15
|
+
@double.stub(:foo)
|
16
|
+
@double.should respond_to(:foo)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "a double acting as a null object" do
|
21
|
+
before(:each) do
|
22
|
+
@double = double('null object').as_null_object
|
23
|
+
end
|
24
|
+
|
25
|
+
it "says it responds to everything" do
|
26
|
+
@double.should respond_to(:any_message_it_gets)
|
8
27
|
end
|
9
28
|
|
10
29
|
it "allows explicit expectation" do
|
11
|
-
@
|
12
|
-
@
|
30
|
+
@double.should_receive(:something)
|
31
|
+
@double.something
|
13
32
|
end
|
14
33
|
|
15
34
|
it "fails verification when explicit exception not met" do
|
16
35
|
lambda do
|
17
|
-
@
|
18
|
-
@
|
36
|
+
@double.should_receive(:something)
|
37
|
+
@double.rspec_verify
|
19
38
|
end.should raise_error(RSpec::Mocks::MockExpectationError)
|
20
39
|
end
|
21
40
|
|
22
41
|
it "ignores unexpected methods" do
|
23
|
-
@
|
24
|
-
@
|
42
|
+
@double.random_call("a", "d", "c")
|
43
|
+
@double.rspec_verify
|
25
44
|
end
|
26
45
|
|
27
46
|
it "allows expected message with different args first" do
|
28
|
-
@
|
29
|
-
@
|
30
|
-
@
|
47
|
+
@double.should_receive(:message).with(:expected_arg)
|
48
|
+
@double.message(:unexpected_arg)
|
49
|
+
@double.message(:expected_arg)
|
31
50
|
end
|
32
51
|
|
33
52
|
it "allows expected message with different args second" do
|
34
|
-
@
|
35
|
-
@
|
36
|
-
@
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#null_object?" do
|
41
|
-
it "defaults to false" do
|
42
|
-
obj = double('anything')
|
43
|
-
obj.should_not be_null_object
|
53
|
+
@double.should_receive(:message).with(:expected_arg)
|
54
|
+
@double.message(:expected_arg)
|
55
|
+
@double.message(:unexpected_arg)
|
44
56
|
end
|
45
57
|
end
|
46
58
|
|
@@ -50,5 +62,12 @@ module RSpec
|
|
50
62
|
obj.should be_null_object
|
51
63
|
end
|
52
64
|
end
|
65
|
+
|
66
|
+
describe "#null_object?" do
|
67
|
+
it "defaults to false" do
|
68
|
+
obj = double('anything')
|
69
|
+
obj.should_not be_null_object
|
70
|
+
end
|
71
|
+
end
|
53
72
|
end
|
54
73
|
end
|
@@ -134,34 +134,19 @@ module RSpec
|
|
134
134
|
|
135
135
|
it 'keeps public methods public' do
|
136
136
|
@object.should_receive(:public_method)
|
137
|
-
|
138
|
-
@object.public_methods.should include(:public_method)
|
139
|
-
end
|
140
|
-
with_ruby('1.8') do
|
141
|
-
@object.public_methods.should include('public_method')
|
142
|
-
end
|
137
|
+
@object.public_methods.should include_method(:public_method)
|
143
138
|
@object.public_method
|
144
139
|
end
|
145
140
|
|
146
141
|
it 'keeps private methods private' do
|
147
142
|
@object.should_receive(:private_method)
|
148
|
-
|
149
|
-
@object.private_methods.should include(:private_method)
|
150
|
-
end
|
151
|
-
with_ruby('1.8') do
|
152
|
-
@object.private_methods.should include('private_method')
|
153
|
-
end
|
143
|
+
@object.private_methods.should include_method(:private_method)
|
154
144
|
@object.public_method
|
155
145
|
end
|
156
146
|
|
157
147
|
it 'keeps protected methods protected' do
|
158
148
|
@object.should_receive(:protected_method)
|
159
|
-
|
160
|
-
@object.protected_methods.should include(:protected_method)
|
161
|
-
end
|
162
|
-
with_ruby('1.8') do
|
163
|
-
@object.protected_methods.should include('protected_method')
|
164
|
-
end
|
149
|
+
@object.protected_methods.should include_method(:protected_method)
|
165
150
|
@object.public_method
|
166
151
|
end
|
167
152
|
|
@@ -7,14 +7,81 @@ module RSpec
|
|
7
7
|
@subject = Object.new
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
|
11
|
+
context "with one method in chain" do
|
12
|
+
context "using and_return" do
|
13
|
+
it "returns expected value from chaining only one method call" do
|
14
|
+
@subject.stub_chain(:msg1).and_return(:return_value)
|
15
|
+
@subject.msg1.should equal(:return_value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "using a block" do
|
20
|
+
it "returns the correct value" do
|
21
|
+
@subject.stub_chain(:msg1) { :return_value }
|
22
|
+
@subject.msg1.should equal(:return_value)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "using a hash" do
|
27
|
+
it "returns the value of the key/value pair" do
|
28
|
+
@subject.stub_chain(:msg1 => :return_value)
|
29
|
+
@subject.msg1.should equal(:return_value)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with two methods in chain" do
|
35
|
+
context "using and_return" do
|
36
|
+
it "returns expected value from chaining two method calls" do
|
37
|
+
@subject.stub_chain(:msg1, :msg2).and_return(:return_value)
|
38
|
+
@subject.msg1.msg2.should equal(:return_value)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "using a block" do
|
43
|
+
it "returns the correct value" do
|
44
|
+
@subject.stub_chain(:msg1, :msg2) { :return_value }
|
45
|
+
@subject.msg1.msg2.should equal(:return_value)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "using a hash" do
|
50
|
+
it "returns the value of the key/value pair" do
|
51
|
+
@subject.stub_chain(:msg1, :msg2 => :return_value)
|
52
|
+
@subject.msg1.msg2.should equal(:return_value)
|
53
|
+
end
|
54
|
+
end
|
13
55
|
end
|
14
56
|
|
15
|
-
|
16
|
-
|
17
|
-
|
57
|
+
context "with four methods in chain" do
|
58
|
+
context "using and_return" do
|
59
|
+
it "returns expected value from chaining two method calls" do
|
60
|
+
@subject.stub_chain(:msg1, :msg2, :msg3, :msg4).and_return(:return_value)
|
61
|
+
@subject.msg1.msg2.msg3.msg4.should equal(:return_value)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "using a block" do
|
66
|
+
it "returns the correct value" do
|
67
|
+
@subject.stub_chain(:msg1, :msg2, :msg3, :msg4) { :return_value }
|
68
|
+
@subject.msg1.msg2.msg3.msg4.should equal(:return_value)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context "using a hash" do
|
73
|
+
it "returns the value of the key/value pair" do
|
74
|
+
@subject.stub_chain(:msg1, :msg2, :msg3, :msg4 => :return_value)
|
75
|
+
@subject.msg1.msg2.msg3.msg4.should equal(:return_value)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context "using a hash with a string key" do
|
80
|
+
it "returns the value of the key/value pair" do
|
81
|
+
@subject.stub_chain("msg1.msg2.msg3.msg4" => :return_value)
|
82
|
+
@subject.msg1.msg2.msg3.msg4.should equal(:return_value)
|
83
|
+
end
|
84
|
+
end
|
18
85
|
end
|
19
86
|
|
20
87
|
it "returns expected value from chaining four method calls" do
|
data/spec/spec_helper.rb
CHANGED
@@ -5,12 +5,7 @@ require 'rspec/expectations'
|
|
5
5
|
module Macros
|
6
6
|
def treats_method_missing_as_private(options = {:noop => true, :subject => nil})
|
7
7
|
it "has method_missing as private" do
|
8
|
-
|
9
|
-
self.class.describes.private_instance_methods.should include("method_missing")
|
10
|
-
end
|
11
|
-
with_ruby 1.9 do
|
12
|
-
self.class.describes.private_instance_methods.should include(:method_missing)
|
13
|
-
end
|
8
|
+
self.class.describes.private_instance_methods.should include_method(:method_missing)
|
14
9
|
end
|
15
10
|
|
16
11
|
it "does not respond_to? method_missing (because it's private)" do
|
@@ -32,11 +27,9 @@ module Macros
|
|
32
27
|
end
|
33
28
|
end
|
34
29
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
yield if RUBY_VERSION =~ Regexp.compile("^#{version.to_s}")
|
39
|
-
end
|
30
|
+
RSpec::Matchers.define :include_method do |expected|
|
31
|
+
match do |actual|
|
32
|
+
actual.map { |m| m.to_s }.include?(expected.to_s)
|
40
33
|
end
|
41
34
|
end
|
42
35
|
|
@@ -44,6 +37,5 @@ RSpec.configure do |config|
|
|
44
37
|
config.mock_with :rspec
|
45
38
|
config.color_enabled = true
|
46
39
|
config.extend(Macros)
|
47
|
-
config.include(RSpec::Matchers)
|
48
40
|
config.include(RSpec::Mocks::Methods)
|
49
41
|
end
|
metadata
CHANGED
@@ -7,8 +7,8 @@ version: !ruby/object:Gem::Version
|
|
7
7
|
- 0
|
8
8
|
- 0
|
9
9
|
- beta
|
10
|
-
-
|
11
|
-
version: 2.0.0.beta.
|
10
|
+
- 22
|
11
|
+
version: 2.0.0.beta.22
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- David Chelimsky
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2010-
|
20
|
+
date: 2010-09-12 00:00:00 -05:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -32,9 +32,9 @@ dependencies:
|
|
32
32
|
- 0
|
33
33
|
- 0
|
34
34
|
- beta
|
35
|
-
-
|
36
|
-
version: 2.0.0.beta.
|
37
|
-
type: :
|
35
|
+
- 22
|
36
|
+
version: 2.0.0.beta.22
|
37
|
+
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: *id001
|
40
40
|
- !ruby/object:Gem::Dependency
|
@@ -49,9 +49,9 @@ dependencies:
|
|
49
49
|
- 0
|
50
50
|
- 0
|
51
51
|
- beta
|
52
|
-
-
|
53
|
-
version: 2.0.0.beta.
|
54
|
-
type: :
|
52
|
+
- 22
|
53
|
+
version: 2.0.0.beta.22
|
54
|
+
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: *id002
|
57
57
|
description: RSpec's 'test double' framework, with support for stubbing and mocking
|
@@ -67,16 +67,17 @@ files:
|
|
67
67
|
- .document
|
68
68
|
- .gitignore
|
69
69
|
- Gemfile
|
70
|
+
- History.md
|
70
71
|
- License.txt
|
71
72
|
- README.markdown
|
72
73
|
- Rakefile
|
73
|
-
- VERSION
|
74
74
|
- autotest/discover.rb
|
75
75
|
- cucumber.yml
|
76
76
|
- features/README.markdown
|
77
77
|
- features/configuration.feature
|
78
78
|
- features/mocks/block_local_expectations.feature
|
79
79
|
- features/mocks/warn_when_expectation_is_set_on_nil.feature
|
80
|
+
- features/stubs/stub_chain.feature
|
80
81
|
- features/stubs/stub_implementation.feature
|
81
82
|
- features/support/env.rb
|
82
83
|
- lib/rspec/mocks.rb
|
@@ -84,7 +85,6 @@ files:
|
|
84
85
|
- lib/rspec/mocks/argument_matchers.rb
|
85
86
|
- lib/rspec/mocks/error_generator.rb
|
86
87
|
- lib/rspec/mocks/errors.rb
|
87
|
-
- lib/rspec/mocks/extensions.rb
|
88
88
|
- lib/rspec/mocks/extensions/instance_exec.rb
|
89
89
|
- lib/rspec/mocks/extensions/object.rb
|
90
90
|
- lib/rspec/mocks/framework.rb
|
@@ -142,10 +142,9 @@ files:
|
|
142
142
|
- spec/rspec/mocks/twice_counts_spec.rb
|
143
143
|
- spec/rspec/mocks_spec.rb
|
144
144
|
- spec/spec_helper.rb
|
145
|
-
- spec/support/macros.rb
|
146
145
|
- specs.watchr
|
147
146
|
has_rdoc: true
|
148
|
-
homepage: http://github.com/rspec/mocks
|
147
|
+
homepage: http://github.com/rspec/rspec-mocks
|
149
148
|
licenses: []
|
150
149
|
|
151
150
|
post_install_message:
|
@@ -158,7 +157,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
157
|
requirements:
|
159
158
|
- - ">="
|
160
159
|
- !ruby/object:Gem::Version
|
161
|
-
hash: -
|
160
|
+
hash: -2717904534021083883
|
162
161
|
segments:
|
163
162
|
- 0
|
164
163
|
version: "0"
|
@@ -178,8 +177,15 @@ rubyforge_project: rspec
|
|
178
177
|
rubygems_version: 1.3.7
|
179
178
|
signing_key:
|
180
179
|
specification_version: 3
|
181
|
-
summary: rspec-mocks-2.0.0.beta.
|
180
|
+
summary: rspec-mocks-2.0.0.beta.22
|
182
181
|
test_files:
|
182
|
+
- features/README.markdown
|
183
|
+
- features/configuration.feature
|
184
|
+
- features/mocks/block_local_expectations.feature
|
185
|
+
- features/mocks/warn_when_expectation_is_set_on_nil.feature
|
186
|
+
- features/stubs/stub_chain.feature
|
187
|
+
- features/stubs/stub_implementation.feature
|
188
|
+
- features/support/env.rb
|
183
189
|
- spec/rspec/mocks/and_yield_spec.rb
|
184
190
|
- spec/rspec/mocks/any_number_of_times_spec.rb
|
185
191
|
- spec/rspec/mocks/argument_expectation_spec.rb
|
@@ -223,4 +229,3 @@ test_files:
|
|
223
229
|
- spec/rspec/mocks/twice_counts_spec.rb
|
224
230
|
- spec/rspec/mocks_spec.rb
|
225
231
|
- spec/spec_helper.rb
|
226
|
-
- spec/support/macros.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.0.0.beta.20
|
File without changes
|
data/spec/support/macros.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
module Macros
|
2
|
-
def treats_method_missing_as_private(options = {:noop => true, :subject => nil})
|
3
|
-
it "has method_missing as private" do
|
4
|
-
with_ruby 1.8 do
|
5
|
-
described_class.private_instance_methods.should include("method_missing")
|
6
|
-
end
|
7
|
-
with_ruby 1.9 do
|
8
|
-
described_class.private_instance_methods.should include(:method_missing)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
it "does not respond_to? method_missing (because it's private)" do
|
13
|
-
formatter = options[:subject] || described_class.new({ }, StringIO.new)
|
14
|
-
formatter.should_not respond_to(:method_missing)
|
15
|
-
end
|
16
|
-
|
17
|
-
if options[:noop]
|
18
|
-
it "should respond_to? all messages" do
|
19
|
-
formatter = described_class.new({ }, StringIO.new)
|
20
|
-
formatter.should respond_to(:just_about_anything)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should respond_to? anything, when given the private flag" do
|
24
|
-
formatter = described_class.new({ }, StringIO.new)
|
25
|
-
formatter.respond_to?(:method_missing, true).should be_true
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|