aidmock 0.2.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +12 -3
- data/VERSION +1 -1
- data/aidmock.gemspec +8 -3
- data/examples/autointerface_spec.rb +42 -0
- data/examples/integration_spec.rb +2 -0
- data/examples/mock_spec.rb +2 -0
- data/lib/aidmock.rb +10 -2
- data/lib/aidmock/auto_interface.rb +72 -0
- data/lib/aidmock/matchers.rb +52 -0
- data/spec/aidmock/auto_interface_spec.rb +109 -0
- data/spec/aidmock/interface_spec.rb +2 -0
- data/spec/aidmock/matchers_spec.rb +2 -0
- data/spec/aidmock/method_descriptor_spec.rb +2 -0
- data/spec/aidmock/sanity_spec.rb +2 -0
- data/spec/aidmock_spec.rb +36 -5
- metadata +9 -4
data/README.textile
CHANGED
@@ -22,8 +22,7 @@ h2. Configuration
|
|
22
22
|
|
23
23
|
In order to use Aidmock, you need to configure it on your test environment. Since it's only working on RSpec for now you need to configure your @spec_helper@:
|
24
24
|
|
25
|
-
bc..
|
26
|
-
RSpec.configure do |config|
|
25
|
+
bc.. RSpec.configure do |config|
|
27
26
|
config.before :all do
|
28
27
|
Aidmock.setup # it will do any nescessary setup, like extending your framework mocks
|
29
28
|
end
|
@@ -233,10 +232,20 @@ Aidmock.interface Animal do
|
|
233
232
|
end
|
234
233
|
|
235
234
|
it "test inheritance" do
|
236
|
-
dog = Dog
|
235
|
+
dog = mock.constrained_to(Dog)
|
237
236
|
dog.stub(:scream).with("ha").and_return("ha!!!") # this stub will be verified as you expect
|
238
237
|
end
|
239
238
|
|
239
|
+
h2. Changelog
|
240
|
+
|
241
|
+
h3. 0.2.0
|
242
|
+
|
243
|
+
* Added .constrained_to to mocks
|
244
|
+
|
245
|
+
h3. 0.1.0
|
246
|
+
|
247
|
+
* initial version
|
248
|
+
|
240
249
|
h2. Feedback
|
241
250
|
|
242
251
|
Aidmock still be somekind of experimental project, any feedback will help a lot. Please use github issues for reporting any bug and/or suggestion :)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.1
|
data/aidmock.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{aidmock}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Wilker Lucio"]
|
12
|
-
s.date = %q{2011-01-
|
12
|
+
s.date = %q{2011-01-24}
|
13
13
|
s.description = %q{Aidmock, safe mocking and interfacing for Ruby}
|
14
14
|
s.email = %q{wilkerlucio@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -23,9 +23,11 @@ Gem::Specification.new do |s|
|
|
23
23
|
"Rakefile",
|
24
24
|
"VERSION",
|
25
25
|
"aidmock.gemspec",
|
26
|
+
"examples/autointerface_spec.rb",
|
26
27
|
"examples/integration_spec.rb",
|
27
28
|
"examples/mock_spec.rb",
|
28
29
|
"lib/aidmock.rb",
|
30
|
+
"lib/aidmock/auto_interface.rb",
|
29
31
|
"lib/aidmock/basic_object.rb",
|
30
32
|
"lib/aidmock/errors.rb",
|
31
33
|
"lib/aidmock/frameworks.rb",
|
@@ -35,6 +37,7 @@ Gem::Specification.new do |s|
|
|
35
37
|
"lib/aidmock/method_descriptor.rb",
|
36
38
|
"lib/aidmock/sanity.rb",
|
37
39
|
"lib/aidmock/void_class.rb",
|
40
|
+
"spec/aidmock/auto_interface_spec.rb",
|
38
41
|
"spec/aidmock/frameworks/rspec_spec.rb",
|
39
42
|
"spec/aidmock/interface_spec.rb",
|
40
43
|
"spec/aidmock/matchers_spec.rb",
|
@@ -49,13 +52,15 @@ Gem::Specification.new do |s|
|
|
49
52
|
s.rubygems_version = %q{1.3.7}
|
50
53
|
s.summary = %q{Aidmock, safe mocking and interfacing for Ruby}
|
51
54
|
s.test_files = [
|
52
|
-
"spec/aidmock/
|
55
|
+
"spec/aidmock/auto_interface_spec.rb",
|
56
|
+
"spec/aidmock/frameworks/rspec_spec.rb",
|
53
57
|
"spec/aidmock/interface_spec.rb",
|
54
58
|
"spec/aidmock/matchers_spec.rb",
|
55
59
|
"spec/aidmock/method_descriptor_spec.rb",
|
56
60
|
"spec/aidmock/sanity_spec.rb",
|
57
61
|
"spec/aidmock_spec.rb",
|
58
62
|
"spec/spec_helper.rb",
|
63
|
+
"examples/autointerface_spec.rb",
|
59
64
|
"examples/integration_spec.rb",
|
60
65
|
"examples/mock_spec.rb"
|
61
66
|
]
|
@@ -0,0 +1,42 @@
|
|
1
|
+
$: << File.expand_path("../../lib", __FILE__)
|
2
|
+
require 'aidmock'
|
3
|
+
|
4
|
+
RSpec.configure do |config|
|
5
|
+
config.after :each do
|
6
|
+
Aidmock.verify
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Person
|
11
|
+
def self.something(hi)
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
def first_name
|
16
|
+
"first"
|
17
|
+
end
|
18
|
+
|
19
|
+
def last_name
|
20
|
+
"last"
|
21
|
+
end
|
22
|
+
|
23
|
+
def full_name
|
24
|
+
first_name + " " + last_name
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
Aidmock::Sanity.sanitize
|
29
|
+
|
30
|
+
describe Person do
|
31
|
+
before :each do
|
32
|
+
@person = Person.new
|
33
|
+
end
|
34
|
+
|
35
|
+
context ".first_name" do
|
36
|
+
it "should return some" do
|
37
|
+
@person.stub(:first_name).and_return("f")
|
38
|
+
@person.stub(:last_name).and_return("l")
|
39
|
+
@person.full_name.should == "f l"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/examples/mock_spec.rb
CHANGED
data/lib/aidmock.rb
CHANGED
@@ -22,17 +22,18 @@ require 'aidmock/errors'
|
|
22
22
|
require 'aidmock/basic_object' unless Kernel.const_defined? :BasicObject
|
23
23
|
|
24
24
|
module Aidmock
|
25
|
+
autoload :AutoInterface, 'aidmock/auto_interface'
|
25
26
|
autoload :Interface, 'aidmock/interface'
|
26
27
|
autoload :MethodDescriptor, 'aidmock/method_descriptor'
|
27
28
|
autoload :VoidClass, 'aidmock/void_class'
|
28
29
|
autoload :Frameworks, 'aidmock/frameworks'
|
29
|
-
autoload :TestFrameworks, 'aidmock/test_frameworks'
|
30
30
|
autoload :Matchers, 'aidmock/matchers'
|
31
31
|
autoload :Sanity, 'aidmock/sanity'
|
32
32
|
|
33
33
|
class << self
|
34
|
-
attr_accessor :warn_undefined_interface
|
34
|
+
attr_accessor :warn_undefined_interface, :autointerface
|
35
35
|
alias :warn_undefined_interface? :warn_undefined_interface
|
36
|
+
alias :autointerface? :autointerface
|
36
37
|
|
37
38
|
def interface(klass, &block)
|
38
39
|
interfaces[klass] = create_or_update_interface(klass, &block)
|
@@ -51,6 +52,10 @@ module Aidmock
|
|
51
52
|
@interfaces ||= {}
|
52
53
|
end
|
53
54
|
|
55
|
+
def has_interface?(klass)
|
56
|
+
interfaces[klass] ? true : false
|
57
|
+
end
|
58
|
+
|
54
59
|
def framework
|
55
60
|
::Aidmock::Frameworks::RSpec
|
56
61
|
end
|
@@ -71,6 +76,8 @@ module Aidmock
|
|
71
76
|
|
72
77
|
if chain.length > 0
|
73
78
|
verify_double_on_chain(double, chain)
|
79
|
+
elsif autointerface?
|
80
|
+
AutoInterface.define(klass)
|
74
81
|
else
|
75
82
|
puts "Aidmock Warning: unsafe mocking on class #{klass}, please interface it" if warn_undefined_interface?
|
76
83
|
end
|
@@ -113,3 +120,4 @@ module Aidmock
|
|
113
120
|
end
|
114
121
|
|
115
122
|
Aidmock.warn_undefined_interface = true
|
123
|
+
Aidmock.autointerface = true
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Copyright (c) 2011 Wilker Lúcio
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
module Aidmock
|
22
|
+
module AutoInterface
|
23
|
+
class << self
|
24
|
+
def define(klass)
|
25
|
+
klass.ancestors.each do |k|
|
26
|
+
define_interface(k)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def define_interface(klass)
|
33
|
+
return false if Aidmock.has_interface?(klass)
|
34
|
+
|
35
|
+
interface = initialize_interface(klass)
|
36
|
+
|
37
|
+
klass_methods(klass).each do |method|
|
38
|
+
args = method_arity_arguments(klass.method(method).arity)
|
39
|
+
interface.class_method method, nil, *args
|
40
|
+
end
|
41
|
+
|
42
|
+
klass_instance_methods(klass).each do |method|
|
43
|
+
args = method_arity_arguments(klass.instance_method(method).arity)
|
44
|
+
interface.method method, nil, *args
|
45
|
+
end
|
46
|
+
|
47
|
+
Aidmock.interfaces[klass] = interface
|
48
|
+
end
|
49
|
+
|
50
|
+
def initialize_interface(klass)
|
51
|
+
Interface.new(klass)
|
52
|
+
end
|
53
|
+
|
54
|
+
def method_arity_arguments(arity)
|
55
|
+
if arity >= 0
|
56
|
+
[nil] * arity
|
57
|
+
else
|
58
|
+
required_arity = arity * -1 - 1
|
59
|
+
[nil] * required_arity + [Matchers::SplatArgMatcher.new(nil)]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def klass_methods(klass)
|
64
|
+
(klass.public_methods(false) + klass.protected_methods(false) + klass.private_methods(false)).map { |m| m.to_sym }
|
65
|
+
end
|
66
|
+
|
67
|
+
def klass_instance_methods(klass)
|
68
|
+
(klass.public_instance_methods(false) + klass.protected_instance_methods(false) + klass.private_instance_methods(false)).map { |m| m.to_sym }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/aidmock/matchers.rb
CHANGED
@@ -32,6 +32,8 @@ module Aidmock
|
|
32
32
|
end
|
33
33
|
|
34
34
|
class AnyMatcher
|
35
|
+
attr_reader :matchers
|
36
|
+
|
35
37
|
def initialize(*matchers)
|
36
38
|
@matchers = matchers.map { |matcher| ::Aidmock::Matchers.create(matcher) }
|
37
39
|
end
|
@@ -39,6 +41,10 @@ module Aidmock
|
|
39
41
|
def match?(object)
|
40
42
|
@matchers.any? { |matcher| matcher.match? object }
|
41
43
|
end
|
44
|
+
|
45
|
+
def ==(object)
|
46
|
+
object.class == AnyMatcher and object.matchers == @matchers
|
47
|
+
end
|
42
48
|
end
|
43
49
|
|
44
50
|
def any_of(*matchers)
|
@@ -49,6 +55,10 @@ module Aidmock
|
|
49
55
|
def match?(object)
|
50
56
|
true
|
51
57
|
end
|
58
|
+
|
59
|
+
def ==(object)
|
60
|
+
object.class == AnythingMatcher
|
61
|
+
end
|
52
62
|
end
|
53
63
|
|
54
64
|
def anything
|
@@ -56,6 +66,8 @@ module Aidmock
|
|
56
66
|
end
|
57
67
|
|
58
68
|
class DuckTypeMatcher
|
69
|
+
attr_reader :methods
|
70
|
+
|
59
71
|
def initialize(*methods)
|
60
72
|
@methods = methods
|
61
73
|
end
|
@@ -64,6 +76,10 @@ module Aidmock
|
|
64
76
|
return true if object.nil?
|
65
77
|
@methods.all? { |method| object.respond_to? method }
|
66
78
|
end
|
79
|
+
|
80
|
+
def ==(object)
|
81
|
+
object.class == DuckTypeMatcher and object.methods == @methods
|
82
|
+
end
|
67
83
|
end
|
68
84
|
|
69
85
|
def respond_to(*methods)
|
@@ -71,6 +87,8 @@ module Aidmock
|
|
71
87
|
end
|
72
88
|
|
73
89
|
class InstanceOfMatcher
|
90
|
+
attr_reader :klass
|
91
|
+
|
74
92
|
def initialize(klass)
|
75
93
|
@klass = klass
|
76
94
|
end
|
@@ -79,6 +97,10 @@ module Aidmock
|
|
79
97
|
return true if object.nil?
|
80
98
|
object.instance_of? @klass
|
81
99
|
end
|
100
|
+
|
101
|
+
def ==(object)
|
102
|
+
object.class == InstanceOfMatcher and object.klass == @klass
|
103
|
+
end
|
82
104
|
end
|
83
105
|
|
84
106
|
def instance_of(klass)
|
@@ -86,6 +108,8 @@ module Aidmock
|
|
86
108
|
end
|
87
109
|
|
88
110
|
class KindOfMatcher
|
111
|
+
attr_reader :klass
|
112
|
+
|
89
113
|
def initialize(klass)
|
90
114
|
@klass = klass
|
91
115
|
end
|
@@ -94,6 +118,10 @@ module Aidmock
|
|
94
118
|
return true if object.nil?
|
95
119
|
object.kind_of? @klass
|
96
120
|
end
|
121
|
+
|
122
|
+
def ==(object)
|
123
|
+
object.class == KindOfMatcher and object.klass == @klass
|
124
|
+
end
|
97
125
|
end
|
98
126
|
|
99
127
|
def kind_of(klass)
|
@@ -101,6 +129,8 @@ module Aidmock
|
|
101
129
|
end
|
102
130
|
|
103
131
|
class HashMatcher
|
132
|
+
attr_reader :hash, :strict
|
133
|
+
|
104
134
|
def initialize(check_hash, strict = false)
|
105
135
|
@hash = {}
|
106
136
|
@strict = strict
|
@@ -123,6 +153,10 @@ module Aidmock
|
|
123
153
|
|
124
154
|
true
|
125
155
|
end
|
156
|
+
|
157
|
+
def ==(object)
|
158
|
+
object.class == HashMatcher and object.hash == @hash and object.strict == @strict
|
159
|
+
end
|
126
160
|
end
|
127
161
|
|
128
162
|
def hash_including(hash, strict = false)
|
@@ -130,6 +164,8 @@ module Aidmock
|
|
130
164
|
end
|
131
165
|
|
132
166
|
class NotNilArgMatcher
|
167
|
+
attr_reader :matcher
|
168
|
+
|
133
169
|
def initialize(matcher)
|
134
170
|
@matcher = ::Aidmock::Matchers.create(matcher)
|
135
171
|
end
|
@@ -138,6 +174,10 @@ module Aidmock
|
|
138
174
|
return false if object.nil?
|
139
175
|
@matcher.match? object
|
140
176
|
end
|
177
|
+
|
178
|
+
def ==(object)
|
179
|
+
object.class == NotNilArgMatcher and object.matcher == @matcher
|
180
|
+
end
|
141
181
|
end
|
142
182
|
|
143
183
|
def not_nil(value)
|
@@ -147,6 +187,8 @@ module Aidmock
|
|
147
187
|
alias_method :nn, :not_nil
|
148
188
|
|
149
189
|
class OptionalArgMatcher
|
190
|
+
attr_reader :matcher
|
191
|
+
|
150
192
|
def initialize(matcher)
|
151
193
|
@matcher = ::Aidmock::Matchers.create(matcher)
|
152
194
|
end
|
@@ -154,6 +196,10 @@ module Aidmock
|
|
154
196
|
def match?(object)
|
155
197
|
@matcher.match? object
|
156
198
|
end
|
199
|
+
|
200
|
+
def ==(object)
|
201
|
+
object.class == OptionalArgMatcher and object.matcher == @matcher
|
202
|
+
end
|
157
203
|
end
|
158
204
|
|
159
205
|
def optional(value)
|
@@ -163,6 +209,8 @@ module Aidmock
|
|
163
209
|
alias_method :o, :optional
|
164
210
|
|
165
211
|
class SplatArgMatcher
|
212
|
+
attr_reader :matcher
|
213
|
+
|
166
214
|
def initialize(matcher = nil)
|
167
215
|
@matcher = ::Aidmock::Matchers.create(matcher)
|
168
216
|
end
|
@@ -170,6 +218,10 @@ module Aidmock
|
|
170
218
|
def match?(values)
|
171
219
|
values.all? { |value| @matcher.match? value }
|
172
220
|
end
|
221
|
+
|
222
|
+
def ==(other)
|
223
|
+
other.class == SplatArgMatcher and other.matcher == @matcher
|
224
|
+
end
|
173
225
|
end
|
174
226
|
|
175
227
|
def splat(value)
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# Copyright (c) 2011 Wilker Lúcio
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
22
|
+
|
23
|
+
class AidmockAutoInterfaceSample
|
24
|
+
class << self
|
25
|
+
def pb_method; end
|
26
|
+
protected
|
27
|
+
def pr_method; end
|
28
|
+
private
|
29
|
+
def pv_method; end
|
30
|
+
end
|
31
|
+
|
32
|
+
def ipb_method(arg); end
|
33
|
+
protected
|
34
|
+
def ipr_method(arg, *args); end
|
35
|
+
private
|
36
|
+
def ipv_method(*args); end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe Aidmock::AutoInterface do
|
40
|
+
context ".define" do
|
41
|
+
it "define interface for each class on ancestors chain" do
|
42
|
+
m1 = mock
|
43
|
+
m2 = mock
|
44
|
+
|
45
|
+
k = mock
|
46
|
+
k.stub!(:ancestors) { [m1, m2] }
|
47
|
+
|
48
|
+
Aidmock::AutoInterface.should_receive(:define_interface).with(m1)
|
49
|
+
Aidmock::AutoInterface.should_receive(:define_interface).with(m2)
|
50
|
+
|
51
|
+
Aidmock::AutoInterface.define(k)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context ".define_inteface" do
|
56
|
+
it "return false if the interface is already defined" do
|
57
|
+
Aidmock.stub!(:has_interface?).with(String) { true }
|
58
|
+
|
59
|
+
Aidmock::AutoInterface.send(:define_interface, String).should be_false
|
60
|
+
end
|
61
|
+
|
62
|
+
it "define each do klass methods" do
|
63
|
+
klass = mock
|
64
|
+
|
65
|
+
String.stub_chain(:method, :arity) { 0 }
|
66
|
+
String.stub_chain(:instance_method, :arity) { 0 }
|
67
|
+
|
68
|
+
Aidmock::AutoInterface.stub!(:klass_methods) { [:test] }
|
69
|
+
Aidmock::AutoInterface.stub!(:klass_instance_methods) { [:test2] }
|
70
|
+
Aidmock::AutoInterface.stub!(:initialize_interface) { klass }
|
71
|
+
Aidmock::AutoInterface.stub!(:method_arity_arguments) { [] }
|
72
|
+
|
73
|
+
klass.should_receive(:class_method).with :test, nil
|
74
|
+
klass.should_receive(:method).with :test2, nil
|
75
|
+
|
76
|
+
Aidmock::AutoInterface.send :define_interface, String
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context ".method_arity_arguments" do
|
81
|
+
it "return blank array if arity is 0" do
|
82
|
+
Aidmock::AutoInterface.send(:method_arity_arguments, 0).should == []
|
83
|
+
end
|
84
|
+
|
85
|
+
it "return an array of nils with argument numbers if it's positive" do
|
86
|
+
Aidmock::AutoInterface.send(:method_arity_arguments, 2).should == [nil, nil]
|
87
|
+
end
|
88
|
+
|
89
|
+
it "return an splat with nil if it's -1" do
|
90
|
+
Aidmock::AutoInterface.send(:method_arity_arguments, -1).should == [Aidmock::Matchers::SplatArgMatcher.new(nil)]
|
91
|
+
end
|
92
|
+
|
93
|
+
it "return array with required arguments plus splat if negative value" do
|
94
|
+
Aidmock::AutoInterface.send(:method_arity_arguments, -4).should == [nil, nil, nil, Aidmock::Matchers::SplatArgMatcher.new(nil)]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context ".klass_method" do
|
99
|
+
it "return all class methods" do
|
100
|
+
Aidmock::AutoInterface.send(:klass_methods, AidmockAutoInterfaceSample).should include(:pb_method, :pr_method, :pv_method)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context ".klass_instance_method" do
|
105
|
+
it "return all instance methods" do
|
106
|
+
Aidmock::AutoInterface.send(:klass_instance_methods, AidmockAutoInterfaceSample).should include(:ipb_method, :ipr_method, :ipv_method)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -18,6 +18,8 @@
|
|
18
18
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
19
|
# THE SOFTWARE.
|
20
20
|
|
21
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
22
|
+
|
21
23
|
describe Aidmock::Interface do
|
22
24
|
Interface = Aidmock::Interface
|
23
25
|
MockDescriptor = Aidmock::Frameworks::MockDescriptor
|
@@ -18,6 +18,8 @@
|
|
18
18
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
19
|
# THE SOFTWARE.
|
20
20
|
|
21
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
22
|
+
|
21
23
|
describe Aidmock::MethodDescriptor do
|
22
24
|
mock_descriptor = Aidmock::Frameworks::MockDescriptor
|
23
25
|
md = Aidmock::MethodDescriptor
|
data/spec/aidmock/sanity_spec.rb
CHANGED
@@ -18,6 +18,8 @@
|
|
18
18
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
19
|
# THE SOFTWARE.
|
20
20
|
|
21
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
22
|
+
|
21
23
|
describe Aidmock::Sanity do
|
22
24
|
context ".sanitize_interfaces" do
|
23
25
|
it "check each defined interface" do
|
data/spec/aidmock_spec.rb
CHANGED
@@ -18,6 +18,8 @@
|
|
18
18
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
19
|
# THE SOFTWARE.
|
20
20
|
|
21
|
+
require File.expand_path("../spec_helper", __FILE__)
|
22
|
+
|
21
23
|
describe Aidmock do
|
22
24
|
context ".interface" do
|
23
25
|
end
|
@@ -40,13 +42,42 @@ describe Aidmock do
|
|
40
42
|
end
|
41
43
|
|
42
44
|
context ".verify_double" do
|
43
|
-
|
44
|
-
|
45
|
+
context "has a chain" do
|
46
|
+
it "call to verify chain" do
|
47
|
+
double = Aidmock::Frameworks::MockDescriptor.new("object", :to_s, nil, [])
|
48
|
+
|
49
|
+
Aidmock.stub!(:chain_for).with(String) { [String] }
|
50
|
+
Aidmock.should_receive(:verify_double_on_chain).with(double, [String])
|
51
|
+
|
52
|
+
Aidmock.send :verify_double, double
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "don't has a chain" do
|
57
|
+
context "autointerace enabled" do
|
58
|
+
it "define interface with autointerface" do
|
59
|
+
double = Aidmock::Frameworks::MockDescriptor.new("object", :to_s, nil, [])
|
60
|
+
|
61
|
+
Aidmock.stub!(:autointerface?) { true }
|
62
|
+
Aidmock.stub!(:chain_for).with(String) { [] }
|
63
|
+
Aidmock::AutoInterface.should_receive(:define).with(String) {}
|
64
|
+
|
65
|
+
Aidmock.send :verify_double, double
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "autointerface disabled" do
|
70
|
+
it "don't define autointerface and show a warning" do
|
71
|
+
double = Aidmock::Frameworks::MockDescriptor.new("object", :to_s, nil, [])
|
45
72
|
|
46
|
-
|
47
|
-
|
73
|
+
Aidmock.stub!(:warn_undefined_interface?) { false }
|
74
|
+
Aidmock.stub!(:autointerface?) { false }
|
75
|
+
Aidmock.stub!(:chain_for).with(String) { [] }
|
76
|
+
Aidmock::AutoInterface.should_not_receive(:define).with(String) {}
|
48
77
|
|
49
|
-
|
78
|
+
Aidmock.send :verify_double, double
|
79
|
+
end
|
80
|
+
end
|
50
81
|
end
|
51
82
|
end
|
52
83
|
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 3
|
8
|
+
- 1
|
9
|
+
version: 0.3.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Wilker Lucio
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-24 00:00:00 -03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -34,9 +34,11 @@ files:
|
|
34
34
|
- Rakefile
|
35
35
|
- VERSION
|
36
36
|
- aidmock.gemspec
|
37
|
+
- examples/autointerface_spec.rb
|
37
38
|
- examples/integration_spec.rb
|
38
39
|
- examples/mock_spec.rb
|
39
40
|
- lib/aidmock.rb
|
41
|
+
- lib/aidmock/auto_interface.rb
|
40
42
|
- lib/aidmock/basic_object.rb
|
41
43
|
- lib/aidmock/errors.rb
|
42
44
|
- lib/aidmock/frameworks.rb
|
@@ -46,6 +48,7 @@ files:
|
|
46
48
|
- lib/aidmock/method_descriptor.rb
|
47
49
|
- lib/aidmock/sanity.rb
|
48
50
|
- lib/aidmock/void_class.rb
|
51
|
+
- spec/aidmock/auto_interface_spec.rb
|
49
52
|
- spec/aidmock/frameworks/rspec_spec.rb
|
50
53
|
- spec/aidmock/interface_spec.rb
|
51
54
|
- spec/aidmock/matchers_spec.rb
|
@@ -86,6 +89,7 @@ signing_key:
|
|
86
89
|
specification_version: 3
|
87
90
|
summary: Aidmock, safe mocking and interfacing for Ruby
|
88
91
|
test_files:
|
92
|
+
- spec/aidmock/auto_interface_spec.rb
|
89
93
|
- spec/aidmock/frameworks/rspec_spec.rb
|
90
94
|
- spec/aidmock/interface_spec.rb
|
91
95
|
- spec/aidmock/matchers_spec.rb
|
@@ -93,5 +97,6 @@ test_files:
|
|
93
97
|
- spec/aidmock/sanity_spec.rb
|
94
98
|
- spec/aidmock_spec.rb
|
95
99
|
- spec/spec_helper.rb
|
100
|
+
- examples/autointerface_spec.rb
|
96
101
|
- examples/integration_spec.rb
|
97
102
|
- examples/mock_spec.rb
|