flexmock 2.4.5 → 3.0.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 +4 -4
- data/.github/workflows/test.yml +5 -1
- data/README.md +60 -6
- data/flexmock.gemspec +1 -1
- data/lib/flexmock/argument_matchers.rb +3 -48
- data/lib/flexmock/argument_matching.rb +31 -1
- data/lib/flexmock/argument_types.rb +0 -4
- data/lib/flexmock/call_record.rb +10 -5
- data/lib/flexmock/call_validator.rb +2 -2
- data/lib/flexmock/composite_expectation.rb +5 -6
- data/lib/flexmock/core.rb +21 -18
- data/lib/flexmock/core_class_methods.rb +28 -21
- data/lib/flexmock/expectation.rb +68 -93
- data/lib/flexmock/expectation_builder.rb +9 -3
- data/lib/flexmock/expectation_director.rb +10 -12
- data/lib/flexmock/expectation_recorder.rb +4 -4
- data/lib/flexmock/explicit_needed.rb +2 -2
- data/lib/flexmock/partial_mock.rb +53 -32
- data/lib/flexmock/spy_describers.rb +9 -9
- data/lib/flexmock/test_unit_assert_spy_called.rb +15 -8
- data/lib/flexmock/validators.rb +10 -57
- data/lib/flexmock/version.rb +1 -1
- metadata +7 -7
data/lib/flexmock/validators.rb
CHANGED
@@ -212,74 +212,28 @@ class FlexMock
|
|
212
212
|
#
|
213
213
|
# @param [Array] args
|
214
214
|
# @raise ValidationFailed
|
215
|
-
def validate(args)
|
216
|
-
|
217
|
-
kw_args = Hash.new
|
218
|
-
|
219
|
-
last_is_proc = false
|
220
|
-
begin
|
221
|
-
if args.last.kind_of?(Proc)
|
222
|
-
args.pop
|
223
|
-
last_is_proc = true
|
224
|
-
end
|
225
|
-
rescue NoMethodError
|
226
|
-
end
|
227
|
-
|
228
|
-
last_is_kw_hash = false
|
229
|
-
if expects_keyword_arguments?
|
230
|
-
last_is_kw_hash =
|
231
|
-
begin
|
232
|
-
args.last.kind_of?(Hash)
|
233
|
-
rescue NoMethodError
|
234
|
-
end
|
215
|
+
def validate(args, kw, block)
|
216
|
+
kw ||= Hash.new
|
235
217
|
|
236
|
-
|
237
|
-
|
238
|
-
elsif requires_keyword_arguments?
|
239
|
-
raise ValidationFailed, "#{@exp} expects keyword arguments but none were provided"
|
240
|
-
end
|
218
|
+
if expects_keyword_arguments? && requires_keyword_arguments? && kw.empty?
|
219
|
+
raise ValidationFailed, "#{@exp} expects keyword arguments but none were provided"
|
241
220
|
end
|
242
221
|
|
243
|
-
|
244
|
-
|
245
|
-
positional_count = args.size
|
246
|
-
|
247
|
-
if required_arguments > positional_count
|
248
|
-
if requires_keyword_arguments?
|
249
|
-
raise ValidationFailed, "#{@exp} expects at least #{required_arguments} positional arguments but got only #{positional_count}"
|
250
|
-
end
|
251
|
-
|
252
|
-
if (required_arguments - positional_count) == 1 && (last_is_kw_hash || last_is_proc)
|
253
|
-
if last_is_kw_hash
|
254
|
-
last_is_kw_hash = false
|
255
|
-
kw_args = Hash.new
|
256
|
-
else
|
257
|
-
last_is_proc = false
|
258
|
-
end
|
259
|
-
positional_count += 1
|
260
|
-
elsif (required_arguments - positional_count) == 2 && (last_is_kw_hash && last_is_proc)
|
261
|
-
last_is_kw_hash = false
|
262
|
-
kw_args = Hash.new
|
263
|
-
last_is_proc = false
|
264
|
-
positional_count += 2
|
265
|
-
else
|
266
|
-
raise ValidationFailed, "#{@exp} expects at least #{required_arguments} positional arguments but got only #{positional_count}"
|
267
|
-
end
|
222
|
+
if required_arguments > args.size
|
223
|
+
raise ValidationFailed, "#{@exp} expects at least #{required_arguments} positional arguments but got only #{args.size}"
|
268
224
|
end
|
269
225
|
|
270
|
-
if !splat? && (required_arguments + optional_arguments) <
|
271
|
-
|
272
|
-
raise ValidationFailed, "#{@exp} expects at most #{required_arguments + optional_arguments} positional arguments but got #{positional_count}"
|
273
|
-
end
|
226
|
+
if !splat? && (required_arguments + optional_arguments) < args.size
|
227
|
+
raise ValidationFailed, "#{@exp} expects at most #{required_arguments + optional_arguments} positional arguments but got #{args.size}"
|
274
228
|
end
|
275
229
|
|
276
230
|
missing_keyword_arguments = required_keyword_arguments.
|
277
|
-
find_all { |k| !
|
231
|
+
find_all { |k| !kw.has_key?(k) }
|
278
232
|
if !missing_keyword_arguments.empty?
|
279
233
|
raise ValidationFailed, "#{@exp} missing required keyword arguments #{missing_keyword_arguments.map(&:to_s).sort.join(", ")}"
|
280
234
|
end
|
281
235
|
if !keyword_splat?
|
282
|
-
|
236
|
+
kw.each_key do |k|
|
283
237
|
if !optional_keyword_arguments.include?(k) && !required_keyword_arguments.include?(k)
|
284
238
|
raise ValidationFailed, "#{@exp} given unexpected keyword argument #{k}"
|
285
239
|
end
|
@@ -313,4 +267,3 @@ class FlexMock
|
|
313
267
|
end
|
314
268
|
end
|
315
269
|
end
|
316
|
-
|
data/lib/flexmock/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flexmock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Weirich
|
8
8
|
- Sylvain Joyeux
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2024-08-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -157,7 +157,7 @@ homepage: https://github.com/doudou/flexmock
|
|
157
157
|
licenses:
|
158
158
|
- MIT
|
159
159
|
metadata: {}
|
160
|
-
post_install_message:
|
160
|
+
post_install_message:
|
161
161
|
rdoc_options: []
|
162
162
|
require_paths:
|
163
163
|
- lib
|
@@ -165,15 +165,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
165
165
|
requirements:
|
166
166
|
- - ">="
|
167
167
|
- !ruby/object:Gem::Version
|
168
|
-
version: '
|
168
|
+
version: '3.0'
|
169
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '0'
|
174
174
|
requirements: []
|
175
|
-
rubygems_version: 3.
|
176
|
-
signing_key:
|
175
|
+
rubygems_version: 3.4.20
|
176
|
+
signing_key:
|
177
177
|
specification_version: 4
|
178
178
|
summary: Simple and Flexible Mock Objects for Testing
|
179
179
|
test_files: []
|