rspec-mocks 2.0.0.beta.20 → 2.0.0.beta.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/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
|