rr 3.0.0 → 3.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a67997dc1e6efa65e6b99101306915242163d3d6b65f73cec7a1ba2e3dbb3229
4
- data.tar.gz: 34ed2995cdf97291cb5f1334737d8fc93dbd9078a420197635a307414d61255c
3
+ metadata.gz: 9cea7d2ae33f69e834e528cb9a8b19f2797a6f95ee15830381a71fd820bf6770
4
+ data.tar.gz: acf1f682697811388e6bfdbc4638d1459e5aba2fd57355e07e1fd396c77e613f
5
5
  SHA512:
6
- metadata.gz: 0bb271fe1108d5b1fc1b35c8c14d1d38bcf2254e9863a7cc48d8e20ca67aabc3ee6d02e8cb9bcd30875c285a3b5c14e3386faa31b7907f04be501678025a5278
7
- data.tar.gz: 85641d68043365de3f062ef34164492ba69c5be725b14a12eef75f06895df73a05dbea3d53d196e6f3402d1f4ce108bcc2bdc2b8c65e2bfb015d2f7d7f6bff7c
6
+ metadata.gz: 63098d8156773c425dc260f79b9a085b523f4bc1a115c80240a6715ef7016918d854520725bb96fca03be105584bf0c377075b512d98f0b4b4ce2eee37aebab0
7
+ data.tar.gz: 05e8599c14737a96b7250ab84bfb6d09abd13b9d7e5a05556fb379b20ad2af5596083e103fd22a80616eceb41c72f879128a3394cdf0065a011a5670f17e8815
data/CHANGES.md CHANGED
@@ -1,11 +1,159 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.1.2 - 2025-04-08
4
+
5
+ ### Improvements
6
+
7
+ * TruffleRuby: Enabled full keyword argument support.
8
+
9
+ * Suppressed a "test is missing assertions" warning reported with
10
+ Active Support 7.2 or later:
11
+ * [GH-104](https://github.com/rr/rr/issues/104)
12
+ * Patch by Erick Guan
13
+
14
+ ### Thanks
15
+
16
+ * Erick Guan
17
+
18
+ ## 3.1.1 - 2024-08-30
19
+
20
+ ### Improvements
21
+
22
+ * Suppressed a warning:
23
+ * GH-99
24
+ * Patch by Kevin Newton
25
+
26
+ ### Thanks
27
+
28
+ * Kevin Newton
29
+
30
+ ## 3.1.0 - 2022-07-14
31
+
32
+ ### Improvements
33
+
34
+ * Improved CI.
35
+ [GitHub#89](https://github.com/rr/rr/pull/89)[Patch by Peter Goldstein]
36
+ [GitHub#90](https://github.com/rr/rr/pull/90)[Patch by mishina]
37
+ [GitHub#91](https://github.com/rr/rr/pull/91)[Patch by mishina]
38
+
39
+ * Improved `wildcard_match?` against `Hash`.
40
+ [GitHub#94](https://github.com/rr/rr/issues/94)
41
+ [Reported by kawamotosatoshi]
42
+
43
+ ### Fixes
44
+
45
+ * Fixed document.
46
+ [GitHub#92](https://github.com/rr/rr/pull/92)[Patch by mishina]
47
+
48
+ ### Thanks
49
+
50
+ * Peter Goldstein
51
+
52
+ * mishina
53
+
54
+ * kawamotosatoshi
55
+
56
+ ## 3.0.9 - 2021-12-07
57
+
58
+ ### Improvements
59
+
60
+ * Marked TruffleRuby as "keyword arguments aren't fully supported yet".
61
+
62
+ ## 3.0.8 - 2021-10-17
63
+
64
+ ### Fixes
65
+
66
+ * Minitest integration: Fixed a bug that `NameError` is raised.
67
+ [GitHub#88][Reported by Matijs van Zuijlen]
68
+
69
+ ### Thanks
70
+
71
+ * Matijs van Zuijlen
72
+
73
+ ## 3.0.7 - 2021-08-17
74
+
75
+ ### Fixes
76
+
77
+ * Minitest + Active Support integration: Fixed a bug that `stub` in
78
+ `setup {...}` is ignored.
79
+ [GitHub#87][Reported by Boris]
80
+
81
+ ### Thanks
82
+
83
+ * Boris
84
+
85
+ ## 3.0.6 - 2021-08-07
86
+
87
+ ### Improvements
88
+
89
+ * `assert_received`: Added support for keyword arguments.
90
+ [GitHub#86][Reported by imadoki]
91
+
92
+ ### Thanks
93
+
94
+ * imadoki
95
+
96
+ ## 3.0.5 - 2021-06-26
97
+
98
+ ### Improvements
99
+
100
+ * Improved keyword arguments support on Ruby 2.7.
101
+ [GitHub#85][Patch by akira yamada]
102
+
103
+ ### Thanks
104
+
105
+ * akira yamada
106
+
107
+ ## 3.0.4 - 2021-06-23
108
+
109
+ ### Fixes
110
+
111
+ * Fix inverted condition in keyword arguments related code.
112
+ [GitHub#84][Patch by akira yamada]
113
+
114
+ ### Thanks
115
+
116
+ * akira yamada
117
+
118
+ ## 3.0.3 - 2021-06-22
119
+
120
+ ### Improvements
121
+
122
+ * Improved keyword arguments support.
123
+ [GitHub#83][Patch by akira yamada]
124
+
125
+ ### Thanks
126
+
127
+ * akira yamada
128
+
129
+ ## 3.0.2 - 2021-06-18
130
+
131
+ ### Improvements
132
+
133
+ * `stub`: Added support for Ruby 3.0's keyword arguments.
134
+ [GitHub#82][Reported by akira yamada]
135
+
136
+ ### Thanks
137
+
138
+ * akira yamada
139
+
140
+ ## 3.0.1 - 2021-06-18
141
+
142
+ ### Improvements
143
+
144
+ * Suppressed keyword arguments related warnings on Ruby 2.7.
145
+ [GitHub#81][Reported by akira yamada]
146
+
147
+ ### Thanks
148
+
149
+ * akira yamada
150
+
3
151
  ## 3.0.0 - 2021-03-31
4
152
 
5
153
  ### Improvements
6
154
 
7
155
  * Added support for Ruby 3.0's keyword arguments.
8
- [GitHub#17][Reported by Takuro Ashie]
156
+ [GitHub#77][Reported by Takuro Ashie]
9
157
 
10
158
  ### Fixes
11
159
 
data/Gemfile CHANGED
@@ -1,3 +1,23 @@
1
- source 'https://rubygems.org'
1
+ # -*- ruby -*-
2
+
3
+ source "https://rubygems.org"
2
4
 
3
5
  gemspec
6
+
7
+ group :development, :test do
8
+ gem("bundler")
9
+ gem("rake")
10
+
11
+ case ENV["RR_INTEGRATION"]
12
+ when "minitest"
13
+ gem("minitest")
14
+ when "minitest-active-support"
15
+ gem("activesupport")
16
+ end
17
+ end
18
+
19
+ group :test do
20
+ gem("ostruct")
21
+ gem("test-unit")
22
+ gem("test-unit-rr")
23
+ end
data/README.md CHANGED
@@ -151,6 +151,7 @@ RR is designed and tested to work against the following Ruby versions:
151
151
  * 2.5
152
152
  * 2.6
153
153
  * 2.7
154
+ * 3.0
154
155
  * JRuby 1.7.4
155
156
 
156
157
  as well as the following test frameworks:
data/Rakefile CHANGED
@@ -7,6 +7,8 @@ require 'pp'
7
7
  # build, install, release
8
8
  require 'bundler/gem_tasks'
9
9
 
10
+ require_relative "lib/rr/version"
11
+
10
12
  default_tasks = []
11
13
 
12
14
  begin
@@ -40,4 +42,26 @@ task :test do
40
42
  end
41
43
  default_tasks << :test
42
44
 
45
+ namespace :"gh-pages" do
46
+ namespace :version do
47
+ desc "Update version"
48
+ task :update do
49
+ config_yml_path = "gh-pages/_config.yml"
50
+ config_yml = File.read(config_yml_path)
51
+ config_yml = config_yml.gsub(/^version: .*$/, "version: #{RR::VERSION}")
52
+ File.write(config_yml_path, config_yml)
53
+ end
54
+ end
55
+ end
56
+
43
57
  task :default => default_tasks
58
+
59
+ release_task = Rake.application["release"]
60
+ # We use Trusted Publishing.
61
+ release_task.prerequisites.delete("build")
62
+ release_task.prerequisites.delete("release:rubygem_push")
63
+ release_task_comment = release_task.comment
64
+ if release_task_comment
65
+ release_task.clear_comments
66
+ release_task.comment = release_task_comment.gsub(/ and build.*$/, "")
67
+ end
@@ -2,21 +2,40 @@ class Hash
2
2
  def wildcard_match?(other)
3
3
  return false unless other.is_a?(Hash)
4
4
 
5
- other_keys = other.keys
6
- return false if keys.size != other_keys.size
5
+ return false if size != other.size
7
6
 
8
- other_values = other.values
9
- each_with_index do |(key, value), i|
10
- if key.respond_to?(:wildcard_match?)
11
- return false unless key.wildcard_match?(other_keys[i])
12
- else
13
- return false unless key == other_keys[i]
14
- end
7
+ wildcards, exacts = partition {|key, _| key.respond_to?(:wildcard_match?)}
8
+ other = other.dup
9
+ exacts.each do |key, value|
10
+ return false unless other.key?(key)
11
+ other_value = other.delete(key)
15
12
  if value.respond_to?(:wildcard_match?)
16
- return false unless value.wildcard_match?(other_values[i])
13
+ return false unless value.wildcard_match?(other_value)
17
14
  else
18
- return false unless value == other_values[i]
15
+ return false unless value == other_value
19
16
  end
20
17
  end
18
+ # TODO: Add support for the following case:
19
+ # {
20
+ # is_a(Symbol) => anything,
21
+ # is_a(Symbol) => 1,
22
+ # }.wildcard_match?(d: 1, c: 3)
23
+ wildcards.each do |key, value|
24
+ found = false
25
+ other.each do |other_key, other_value|
26
+ next unless key.wildcard_match?(other_key)
27
+ if value.respond_to?(:wildcard_match?)
28
+ next unless value.wildcard_match?(other_value)
29
+ else
30
+ next unless value == other_value
31
+ end
32
+ other.delete(other_key)
33
+ found = true
34
+ break
35
+ end
36
+ return false unless found
37
+ end
38
+
39
+ true
21
40
  end
22
41
  end
@@ -22,6 +22,7 @@ module RR
22
22
  def method_missing(method_name, *args, &block)
23
23
  @double_definition_create.call(method_name, args, {}, &block)
24
24
  end
25
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
25
26
  end
26
27
 
27
28
  def __double_definition_create__
@@ -144,6 +144,7 @@ module RR
144
144
  end
145
145
  method_missing(:#{method_name}, *args, &block)
146
146
  end
147
+ ruby2_keywords(:#{method_name}) if respond_to?(:ruby2_keywords, true)
147
148
  RUBY
148
149
  self
149
150
  end
@@ -181,6 +182,7 @@ module RR
181
182
  arguments.block
182
183
  )
183
184
  end
185
+ ruby2_keywords(:#{method_name}) if respond_to?(:ruby2_keywords, true)
184
186
  RUBY
185
187
  end
186
188
  self
@@ -106,6 +106,7 @@ module RR
106
106
  ).call
107
107
  end
108
108
  end
109
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
109
110
  METHOD
110
111
  end
111
112
  end
@@ -3,6 +3,7 @@ module RR
3
3
  class MiniTest4
4
4
  module Mixin
5
5
  def assert_received(subject, &block)
6
+ self.assertions += 1
6
7
  block.call(received(subject)).call
7
8
  end
8
9
  end
@@ -39,10 +40,21 @@ module RR
39
40
  include RR::DSL
40
41
  include Mixin
41
42
 
43
+ if defined?(::ActiveSupport::TestCase)
44
+ is_active_support_test_case = lambda do |target|
45
+ target.is_a?(::ActiveSupport::TestCase)
46
+ end
47
+ else
48
+ is_active_support_test_case = lambda do |target|
49
+ false
50
+ end
51
+ end
52
+
42
53
  unless instance_methods.any? { |method_name| method_name.to_sym == :setup_with_rr }
43
54
  alias_method :setup_without_rr, :setup
44
55
  define_method(:setup_with_rr) do
45
56
  setup_without_rr
57
+ return if is_active_support_test_case.call(self)
46
58
  RR.reset
47
59
  RR.trim_backtrace = true
48
60
  RR.overridden_error_class = assertion_error_class
@@ -52,7 +64,7 @@ module RR
52
64
  alias_method :teardown_without_rr, :teardown
53
65
  define_method(:teardown_with_rr) do
54
66
  begin
55
- RR.verify
67
+ RR.verify unless is_active_support_test_case.call(self)
56
68
  ensure
57
69
  teardown_without_rr
58
70
  end
@@ -66,4 +78,3 @@ module RR
66
78
  RR.register_adapter MiniTest4
67
79
  end
68
80
  end
69
-
@@ -74,12 +74,12 @@ module RR
74
74
 
75
75
  def extract_subject_from_return_value(return_value)
76
76
  case return_value
77
- when DoubleDefinitions::DoubleDefinition
78
- return_value.root_subject
79
- when DoubleDefinitions::DoubleDefinitionCreateBlankSlate
80
- return_value.__double_definition_create__.root_subject
81
- else
82
- return_value
77
+ when DoubleDefinitions::DoubleDefinition
78
+ return_value.root_subject
79
+ when DoubleDefinitions::DoubleDefinitionCreateBlankSlate
80
+ return_value.__double_definition_create__.root_subject
81
+ else
82
+ return_value
83
83
  end
84
84
  end
85
85
 
data/lib/rr/space.rb CHANGED
@@ -22,6 +22,7 @@ module RR
22
22
  def method_missing(method_name, *args, &block)
23
23
  instance.__send__(method_name, *args, &block)
24
24
  end
25
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
25
26
  end
26
27
  end
27
28
 
@@ -1,9 +1,9 @@
1
1
  module RR
2
2
  class SpyVerification
3
- def initialize(subject, method_name, args)
3
+ def initialize(subject, method_name, args, kwargs)
4
4
  @subject = subject
5
5
  @method_name = method_name.to_sym
6
- set_argument_expectation_for_args(args)
6
+ set_argument_expectation_for_args(args, kwargs)
7
7
  @ordered = false
8
8
  once
9
9
  end
@@ -44,9 +44,17 @@ module RR
44
44
  protected
45
45
  attr_writer :times_matcher
46
46
 
47
- def set_argument_expectation_for_args(args)
48
- # with_no_args and with actually set @argument_expectation
49
- args.empty? ? with_no_args : with(*args)
47
+ def set_argument_expectation_for_args(args, kwargs)
48
+ if args.empty? and kwargs.empty?
49
+ # with_no_args and with actually set @argument_expectation
50
+ with_no_args
51
+ else
52
+ if KeywordArguments.fully_supported?
53
+ with(*args, **kwargs)
54
+ else
55
+ with(*args)
56
+ end
57
+ end
50
58
  end
51
59
 
52
60
  def install_method_callback(return_value_block)
@@ -5,9 +5,16 @@ module RR
5
5
  def initialize(subject)
6
6
  @subject = subject
7
7
  end
8
-
9
- def method_missing(method_name, *args, &block)
10
- SpyVerification.new(@subject, method_name, args)
11
- end
8
+
9
+ if KeywordArguments.fully_supported?
10
+ def method_missing(method_name, *args, **kwargs, &block)
11
+ SpyVerification.new(@subject, method_name, args, kwargs)
12
+ end
13
+ else
14
+ def method_missing(method_name, *args, &block)
15
+ SpyVerification.new(@subject, method_name, args, {})
16
+ end
17
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
18
+ end
12
19
  end
13
- end
20
+ end
data/lib/rr/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module RR
2
- VERSION = '3.0.0'.freeze
2
+ VERSION = '3.1.2'.freeze
3
3
  def self.version; VERSION; end
4
4
  end
data/rr.gemspec CHANGED
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'rake'
4
3
  require File.expand_path('../lib/rr/version', __FILE__)
5
4
 
6
5
  Gem::Specification.new do |gem|
@@ -13,7 +12,7 @@ Gem::Specification.new do |gem|
13
12
  gem.homepage = 'https://rr.github.io/rr'
14
13
  gem.license = 'MIT'
15
14
 
16
- gem.files = FileList[
15
+ gem.files = Dir[
17
16
  'Appraisals',
18
17
  'CHANGES.md',
19
18
  'CREDITS.md',
@@ -29,9 +28,4 @@ Gem::Specification.new do |gem|
29
28
  ].to_a
30
29
 
31
30
  gem.require_paths = ['lib']
32
-
33
- gem.add_development_dependency("bundler")
34
- gem.add_development_dependency("rake")
35
- gem.add_development_dependency("test-unit")
36
- gem.add_development_dependency("test-unit-rr")
37
31
  end
metadata CHANGED
@@ -1,73 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rr
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
8
8
  - Brian Takita
9
9
  - Elliot Winkler
10
- autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2021-03-31 00:00:00.000000000 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: bundler
17
- requirement: !ruby/object:Gem::Requirement
18
- requirements:
19
- - - ">="
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :development
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- version: '0'
29
- - !ruby/object:Gem::Dependency
30
- name: rake
31
- requirement: !ruby/object:Gem::Requirement
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: '0'
36
- type: :development
37
- prerelease: false
38
- version_requirements: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: '0'
43
- - !ruby/object:Gem::Dependency
44
- name: test-unit
45
- requirement: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - ">="
48
- - !ruby/object:Gem::Version
49
- version: '0'
50
- type: :development
51
- prerelease: false
52
- version_requirements: !ruby/object:Gem::Requirement
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: '0'
57
- - !ruby/object:Gem::Dependency
58
- name: test-unit-rr
59
- requirement: !ruby/object:Gem::Requirement
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- version: '0'
64
- type: :development
65
- prerelease: false
66
- version_requirements: !ruby/object:Gem::Requirement
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: '0'
12
+ date: 2025-04-07 00:00:00.000000000 Z
13
+ dependencies: []
71
14
  description: RR is a test double framework that features a rich selection of double
72
15
  techniques and a terse syntax.
73
16
  email:
@@ -347,7 +290,6 @@ homepage: https://rr.github.io/rr
347
290
  licenses:
348
291
  - MIT
349
292
  metadata: {}
350
- post_install_message:
351
293
  rdoc_options: []
352
294
  require_paths:
353
295
  - lib
@@ -362,8 +304,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
362
304
  - !ruby/object:Gem::Version
363
305
  version: '0'
364
306
  requirements: []
365
- rubygems_version: 3.3.0.dev
366
- signing_key:
307
+ rubygems_version: 3.6.2
367
308
  specification_version: 4
368
309
  summary: RR is a test double framework that features a rich selection of double techniques
369
310
  and a terse syntax.