surrogate 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +0 -1
- data/.travis.yml +11 -5
- data/Gemfile +2 -0
- data/Rakefile +4 -5
- data/Readme.md +2 -3
- data/Readme.md.mountain_berry_fields +2 -3
- data/lib/surrogate/rspec.rb +4 -2
- data/lib/surrogate/rspec/invocation_matcher.rb +2 -2
- data/lib/surrogate/rspec/substitution_matcher.rb +2 -2
- data/lib/surrogate/rspec/with_filter.rb +5 -1
- data/lib/surrogate/version.rb +1 -1
- data/spec/defining_api_methods_spec.rb +3 -3
- data/spec/rspec/substitute_for_spec.rb +2 -2
- data/spec/unit/argument_errorizer_spec.rb +24 -7
- data/surrogate.gemspec +4 -4
- metadata +22 -55
- data/.rvmrc +0 -7
- data/gemfiles/rspec_mocks_2.10 +0 -8
- data/gemfiles/rspec_mocks_2.11 +0 -8
- data/gemfiles/rspec_mocks_2.2 +0 -8
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e5519647b998e324731c5f4077ab0902717266ff
|
4
|
+
data.tar.gz: 28ddc396ed4f356a85ebf882466eab96cbb4b34f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fcec1624106b21f4a9bfcc3966d311c8d53d7318f3eac6b1dfdc9268816a4a396d102f951f12c9f3086d2d684c941a69a4fc3dbcaf122b07c41887d3bcf3fb2f
|
7
|
+
data.tar.gz: e5e1e7233a828144ae186a0b057c4c4dd25296bad08bc6662be59c752ee653d653001a1beedc97681481a47a2e0a6daf59dc9bc3f81a7a8f4013782768288af7
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
language: ruby
|
2
|
+
script: "bundle exec rake"
|
2
3
|
rvm:
|
3
4
|
- 1.9.3
|
4
|
-
|
5
|
-
|
6
|
-
-
|
7
|
-
-
|
8
|
-
-
|
5
|
+
- 2.0.0
|
6
|
+
- 2.1.2
|
7
|
+
- ruby-head
|
8
|
+
- rbx-2
|
9
|
+
- jruby-head
|
10
|
+
matrix:
|
11
|
+
allow_failures:
|
12
|
+
- rvm: ruby-head
|
13
|
+
- rvm: jruby-head
|
14
|
+
- rvm: rbx-2
|
data/Gemfile
ADDED
data/Rakefile
CHANGED
@@ -10,8 +10,7 @@ RSpec::Core::RakeTask.new :rspec do |t|
|
|
10
10
|
]
|
11
11
|
end
|
12
12
|
|
13
|
-
require 'mountain_berry_fields/rake_task'
|
14
|
-
MountainBerryFields::RakeTask.new :readme, 'Readme.md.mountain_berry_fields'
|
15
|
-
|
16
|
-
|
17
|
-
task default: [:rspec, :readme]
|
13
|
+
# require 'mountain_berry_fields/rake_task'
|
14
|
+
# MountainBerryFields::RakeTask.new :readme, 'Readme.md.mountain_berry_fields'
|
15
|
+
# task default: [:rspec, :readme]
|
16
|
+
task default: :rspec
|
data/Readme.md
CHANGED
@@ -92,8 +92,7 @@ end
|
|
92
92
|
MockClient.new.request 3 # => ["result1", "result2", "result3"]
|
93
93
|
```
|
94
94
|
|
95
|
-
You don't need a **default if you set the ivar** of the same name (replace `?` with `_p` for predicates, and `!` with `_b` for bang methods, since you can't have question marks or bangs in ivar names)
|
96
|
-
Note that methods without bodies will not have their arguments checked, and will not be asserted against when comparing signatures.
|
95
|
+
You don't need a **default if you set the ivar** of the same name (replace `?` with `_p` for predicates, and `!` with `_b` for bang methods, since you can't have question marks or bangs in ivar names).
|
97
96
|
|
98
97
|
```ruby
|
99
98
|
class MockClient
|
@@ -111,7 +110,7 @@ MockClient.new(12).id # => 12
|
|
111
110
|
```ruby
|
112
111
|
class MockMP3
|
113
112
|
Surrogate.endow self
|
114
|
-
define :play #
|
113
|
+
define :play # default behavior is to do nothing, same as empty block yielding nothing
|
115
114
|
define :info
|
116
115
|
end
|
117
116
|
|
@@ -114,8 +114,7 @@ MockClient.new.request 3 # => ["result1", "result2", "result3"]
|
|
114
114
|
<% end %>
|
115
115
|
```
|
116
116
|
|
117
|
-
You don't need a **default if you set the ivar** of the same name (replace `?` with `_p` for predicates, and `!` with `_b` for bang methods, since you can't have question marks or bangs in ivar names)
|
118
|
-
Note that methods without bodies will not have their arguments checked, and will not be asserted against when comparing signatures.
|
117
|
+
You don't need a **default if you set the ivar** of the same name (replace `?` with `_p` for predicates, and `!` with `_b` for bang methods, since you can't have question marks or bangs in ivar names).
|
119
118
|
|
120
119
|
```ruby
|
121
120
|
<% test 'overriding default by setting the ivar', with: :magic_comments do %>
|
@@ -136,7 +135,7 @@ MockClient.new(12).id # => 12
|
|
136
135
|
<% test 'overriding default by invoking the method', with: :magic_comments do %>
|
137
136
|
class MockMP3
|
138
137
|
Surrogate.endow self
|
139
|
-
define :play #
|
138
|
+
define :play # default behavior is to do nothing, same as empty block yielding nothing
|
140
139
|
define :info
|
141
140
|
end
|
142
141
|
|
data/lib/surrogate/rspec.rb
CHANGED
@@ -38,7 +38,7 @@ class Surrogate
|
|
38
38
|
self
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
41
|
+
def failure_message
|
42
42
|
message_for(
|
43
43
|
if times_predicate.default? && with_filter.default?
|
44
44
|
:FailureMessageShouldDefault
|
@@ -52,7 +52,7 @@ class Surrogate
|
|
52
52
|
)
|
53
53
|
end
|
54
54
|
|
55
|
-
def
|
55
|
+
def failure_message_when_negated
|
56
56
|
message_for(
|
57
57
|
if times_predicate.default? && with_filter.default?
|
58
58
|
:FailureMessageShouldNotDefault
|
@@ -15,7 +15,7 @@ class Surrogate
|
|
15
15
|
end
|
16
16
|
|
17
17
|
|
18
|
-
def
|
18
|
+
def failure_message
|
19
19
|
extra_instance_methods = @comparison[:instance][:not_on_actual ].to_a # these come in as sets
|
20
20
|
extra_class_methods = @comparison[:class ][:not_on_actual ].to_a
|
21
21
|
missing_instance_methods = @comparison[:instance][:not_on_surrogate].to_a
|
@@ -44,7 +44,7 @@ class Surrogate
|
|
44
44
|
"Was not substitutable because surrogate " << differences.join("\n")
|
45
45
|
end
|
46
46
|
|
47
|
-
def
|
47
|
+
def failure_message_when_negated
|
48
48
|
"Should not have been substitute, but was"
|
49
49
|
end
|
50
50
|
|
@@ -17,13 +17,17 @@ class Surrogate
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def matcher_class
|
20
|
-
return ::RSpec::Mocks::ArgumentListMatcher if approximate_2_11?
|
20
|
+
return ::RSpec::Mocks::ArgumentListMatcher if approximate_2_11? || approximate_3_0_0_rc?
|
21
21
|
::RSpec::Mocks::ArgumentExpectation
|
22
22
|
end
|
23
23
|
|
24
24
|
def approximate_2_11?
|
25
25
|
Gem::Requirement.create('~> 2.11').satisfied_by? Gem::Version.new(::RSpec::Mocks::Version::STRING)
|
26
26
|
end
|
27
|
+
|
28
|
+
def approximate_3_0_0_rc?
|
29
|
+
Gem::Requirement.create('~> 3.0.0.rc').satisfied_by? Gem::Version.new(::RSpec::Mocks::Version::STRING)
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
|
data/lib/surrogate/version.rb
CHANGED
@@ -172,8 +172,8 @@ describe 'define' do
|
|
172
172
|
it 'has the same arity as the method' do
|
173
173
|
mocked_class.define(:meth) { |a| a }
|
174
174
|
mocked_class.new.meth(1).should == 1
|
175
|
-
expect { mocked_class.new.meth }.to raise_error ArgumentError, /0 for 1/
|
176
|
-
expect { mocked_class.new.meth 1, 2 }.to raise_error ArgumentError, /2 for 1/
|
175
|
+
expect { mocked_class.new.meth }.to raise_error ArgumentError, /0(, expected| for) 1/
|
176
|
+
expect { mocked_class.new.meth 1, 2 }.to raise_error ArgumentError, /2(, expected| for) 1/
|
177
177
|
end
|
178
178
|
|
179
179
|
it "can be defined with symbols or strings" do
|
@@ -219,7 +219,7 @@ describe 'define' do
|
|
219
219
|
it 'raises arity errors, even if the value is overridden' do
|
220
220
|
mocked_class.define(:meth) { }
|
221
221
|
instance.instance_variable_set :@meth, "abc"
|
222
|
-
expect { instance.meth "extra", "args" }.to raise_error ArgumentError, /
|
222
|
+
expect { instance.meth "extra", "args" }.to raise_error ArgumentError, /2(, expected| for) 0/
|
223
223
|
end
|
224
224
|
|
225
225
|
it 'treats bastard methods as having no arity' do
|
@@ -199,7 +199,7 @@ describe 'substutability matchers' do
|
|
199
199
|
end
|
200
200
|
|
201
201
|
it 'disregards when real object has natively implemented methods that cannot be reflected on' do
|
202
|
-
Array.method(:[]).parameters
|
202
|
+
next unless Array.method(:[]).parameters == [[:rest]] # e.g. rbx names all their params, so we can reflect to some extent
|
203
203
|
Array.instance_method(:insert).parameters.should == [[:rest]]
|
204
204
|
surrogate = Surrogate.endow(Class.new) { define(:[]) { |a,b,c| } }.define(:insert) { |a,b,c| }
|
205
205
|
Array.should substitute_for surrogate, subset: true, types: true
|
@@ -311,7 +311,7 @@ describe 'substutability matchers' do
|
|
311
311
|
end
|
312
312
|
|
313
313
|
it 'disregards when real object has natively implemented methods that cannot be reflected on' do
|
314
|
-
Array.method(:[]).parameters
|
314
|
+
next unless Array.method(:[]).parameters == [[:rest]] # not all implementations do this
|
315
315
|
Array.instance_method(:insert).parameters.should == [[:rest]]
|
316
316
|
surrogate = Surrogate.endow(Class.new) { define(:[]) { |a,b,c| } }.define(:insert) { |a,b,c| }
|
317
317
|
Array.should substitute_for surrogate, subset: true, names: true
|
@@ -40,13 +40,30 @@ describe Surrogate::ArgumentErrorizer do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'has useful error messages' do
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
43
|
+
if defined?(RUBY_PLATFORM) && RUBY_ENGINE == 'rbx'
|
44
|
+
assert_message ->(){}, [1], /given 1, expected 0 in #{meth_name}\(\)/
|
45
|
+
assert_message ->(a){}, [], /given 0, expected 1 in #{meth_name}\(a\)/
|
46
|
+
assert_message ->(a){}, [], /given 0, expected 1 in #{meth_name}\(a\)/
|
47
|
+
assert_message ->(a=1){}, [1,2], /given 2, expected 0 in #{meth_name}\(a='\?'\)/
|
48
|
+
assert_message ->(a, *b){}, [], /given 0, expected 1+ in #{meth_name}\(a, \*b\)/
|
49
|
+
assert_message ->(a, *b, &c){}, [], /given 0, expected 1+ in #{meth_name}\(a, \*b, &c\)/
|
50
|
+
assert_message ->(a, b, c=1, d=1, *e, f, &g){}, [], /given 0, expected 3+ in #{meth_name}\(a, b, c='\?', d='\?', \*e, f, &g\)/
|
51
|
+
else
|
52
|
+
assert_message ->(){}, [1], "wrong number of arguments (1 for 0) in #{meth_name}()"
|
53
|
+
assert_message ->(a){}, [], "wrong number of arguments (0 for 1) in #{meth_name}(a)"
|
54
|
+
assert_message ->(a){}, [], "wrong number of arguments (0 for 1) in #{meth_name}(a)"
|
55
|
+
if RUBY_VERSION == '1.9.3'
|
56
|
+
assert_message ->(a=1){}, [1,2], "wrong number of arguments (2 for 1) in #{meth_name}(a='?')"
|
57
|
+
assert_message ->(a, *b){}, [], "wrong number of arguments (0 for 1) in #{meth_name}(a, *b)"
|
58
|
+
assert_message ->(a, *b, &c){}, [], "wrong number of arguments (0 for 1) in #{meth_name}(a, *b, &c)"
|
59
|
+
assert_message ->(a, b, c=1, d=1, *e, f, &g){}, [], "wrong number of arguments (0 for 3) in #{meth_name}(a, b, c='?', d='?', *e, f, &g)"
|
60
|
+
else
|
61
|
+
assert_message ->(a=1){}, [1,2], "wrong number of arguments (2 for 0..1) in #{meth_name}(a='?')"
|
62
|
+
assert_message ->(a, *b){}, [], "wrong number of arguments (0 for 1+) in #{meth_name}(a, *b)"
|
63
|
+
assert_message ->(a, *b, &c){}, [], "wrong number of arguments (0 for 1+) in #{meth_name}(a, *b, &c)"
|
64
|
+
assert_message ->(a, b, c=1, d=1, *e, f, &g){}, [], "wrong number of arguments (0 for 3+) in #{meth_name}(a, b, c='?', d='?', *e, f, &g)"
|
65
|
+
end
|
66
|
+
end
|
50
67
|
end
|
51
68
|
|
52
69
|
it 'raises an ArgumentError if initialized with a non lambda/method' do
|
data/surrogate.gemspec
CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_development_dependency "rake"
|
22
|
-
s.add_development_dependency "rspec", "~>
|
23
|
-
s.add_development_dependency "mountain_berry_fields", "~> 1.0.3"
|
24
|
-
s.add_development_dependency "mountain_berry_fields-rspec", "~> 1.0.3"
|
25
|
-
s.add_development_dependency "mountain_berry_fields-magic_comments", "~> 1.0.1"
|
22
|
+
s.add_development_dependency "rspec", "~> 3.0"
|
23
|
+
# s.add_development_dependency "mountain_berry_fields", "~> 1.0.3"
|
24
|
+
# s.add_development_dependency "mountain_berry_fields-rspec", "~> 1.0.3"
|
25
|
+
# s.add_development_dependency "mountain_berry_fields-magic_comments", "~> 1.0.1"
|
26
26
|
end
|
metadata
CHANGED
@@ -1,71 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: surrogate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.8.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Josh Cheek
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-08-16 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: rspec
|
27
|
-
requirement: &70341864481800 !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
|
-
requirements:
|
30
|
-
- - ~>
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '2.4'
|
33
|
-
type: :development
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: *70341864481800
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: mountain_berry_fields
|
38
|
-
requirement: &70341864496820 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
23
|
requirements:
|
41
|
-
- -
|
24
|
+
- - ">="
|
42
25
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
44
|
-
type: :development
|
45
|
-
prerelease: false
|
46
|
-
version_requirements: *70341864496820
|
26
|
+
version: '0'
|
47
27
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement:
|
50
|
-
none: false
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
51
30
|
requirements:
|
52
|
-
- - ~>
|
31
|
+
- - "~>"
|
53
32
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
33
|
+
version: '3.0'
|
55
34
|
type: :development
|
56
35
|
prerelease: false
|
57
|
-
version_requirements:
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: mountain_berry_fields-magic_comments
|
60
|
-
requirement: &70341864495600 !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
62
37
|
requirements:
|
63
|
-
- - ~>
|
38
|
+
- - "~>"
|
64
39
|
- !ruby/object:Gem::Version
|
65
|
-
version:
|
66
|
-
type: :development
|
67
|
-
prerelease: false
|
68
|
-
version_requirements: *70341864495600
|
40
|
+
version: '3.0'
|
69
41
|
description: Framework to aid in handrolling mock/spy objects.
|
70
42
|
email:
|
71
43
|
- josh.cheek@gmail.com
|
@@ -73,16 +45,13 @@ executables: []
|
|
73
45
|
extensions: []
|
74
46
|
extra_rdoc_files: []
|
75
47
|
files:
|
76
|
-
- .gitignore
|
77
|
-
- .
|
78
|
-
- .travis.yml
|
48
|
+
- ".gitignore"
|
49
|
+
- ".travis.yml"
|
79
50
|
- Changelog.md
|
51
|
+
- Gemfile
|
80
52
|
- Rakefile
|
81
53
|
- Readme.md
|
82
54
|
- Readme.md.mountain_berry_fields
|
83
|
-
- gemfiles/rspec_mocks_2.10
|
84
|
-
- gemfiles/rspec_mocks_2.11
|
85
|
-
- gemfiles/rspec_mocks_2.2
|
86
55
|
- lib/surrogate.rb
|
87
56
|
- lib/surrogate/api_comparer.rb
|
88
57
|
- lib/surrogate/argument_errorizer.rb
|
@@ -126,27 +95,26 @@ files:
|
|
126
95
|
- todo
|
127
96
|
homepage: https://github.com/JoshCheek/surrogate
|
128
97
|
licenses: []
|
98
|
+
metadata: {}
|
129
99
|
post_install_message:
|
130
100
|
rdoc_options: []
|
131
101
|
require_paths:
|
132
102
|
- lib
|
133
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
134
|
-
none: false
|
135
104
|
requirements:
|
136
|
-
- -
|
105
|
+
- - ">="
|
137
106
|
- !ruby/object:Gem::Version
|
138
107
|
version: '0'
|
139
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
|
-
none: false
|
141
109
|
requirements:
|
142
|
-
- -
|
110
|
+
- - ">="
|
143
111
|
- !ruby/object:Gem::Version
|
144
112
|
version: '0'
|
145
113
|
requirements: []
|
146
114
|
rubyforge_project: surrogate
|
147
|
-
rubygems_version:
|
115
|
+
rubygems_version: 2.2.2
|
148
116
|
signing_key:
|
149
|
-
specification_version:
|
117
|
+
specification_version: 4
|
150
118
|
summary: Framework to aid in handrolling mock/spy objects.
|
151
119
|
test_files:
|
152
120
|
- spec/acceptance_spec.rb
|
@@ -164,4 +132,3 @@ test_files:
|
|
164
132
|
- spec/unit/api_comparer_spec.rb
|
165
133
|
- spec/unit/argument_errorizer_spec.rb
|
166
134
|
- spec/unit/map_method_name_to_ivar_spec.rb
|
167
|
-
has_rdoc:
|
data/.rvmrc
DELETED
data/gemfiles/rspec_mocks_2.10
DELETED
data/gemfiles/rspec_mocks_2.11
DELETED