On Fedora 37, remove "Display keyword hashes" feature for now
(On Fedora 38, this is effective)
This commit is contained in:
parent
ee6f2a42cb
commit
2ed99dbfd4
@ -0,0 +1,12 @@
|
||||
diff -urp -x .git rspec-mocks-3.11.2/spec/rspec/mocks/verifying_doubles/expected_arg_verification_spec.rb rspec-mocks-3.12.0/spec/rspec/mocks/verifying_doubles/expected_arg_verification_spec.rb
|
||||
--- rspec-mocks-3.11.2/spec/rspec/mocks/verifying_doubles/expected_arg_verification_spec.rb 2022-10-26 16:39:18.000000000 +0900
|
||||
+++ rspec-mocks-3.12.0/spec/rspec/mocks/verifying_doubles/expected_arg_verification_spec.rb 2022-10-27 14:34:37.000000000 +0900
|
||||
@@ -135,7 +135,7 @@ module RSpec
|
||||
expect(dbl).to receive(:kw_args_method).with(1, :required_arg => 2, :optional_arg => 3)
|
||||
expect do
|
||||
dbl.kw_args_method(1, {:required_arg => 2, :optional_arg => 3})
|
||||
- end.to fail_with(a_string_including("expected: (1, {:optional_arg=>3, :required_arg=>2})", "got: (1, {:optional_arg=>3, :required_arg=>2})"))
|
||||
+ end.to fail_with(a_string_including("expected: (1, {:optional_arg=>3, :required_arg=>2}) (keyword arguments)", "got: (1, {:optional_arg=>3, :required_arg=>2}) (options hash)"))
|
||||
end
|
||||
else
|
||||
it "matches against a hash submitted as a positional argument and received as keyword arguments in Ruby 2.7 or before" do
|
109
rubygem-rspec-mocks-3.12.0-display_keyword_hashes.patch
Normal file
109
rubygem-rspec-mocks-3.12.0-display_keyword_hashes.patch
Normal file
@ -0,0 +1,109 @@
|
||||
From e931e818b577172b89fb4583fc336fbcd25df36b Mon Sep 17 00:00:00 2001
|
||||
From: Jean Boussier <jean.boussier@gmail.com>
|
||||
Date: Fri, 18 Feb 2022 11:19:47 +0100
|
||||
Subject: [PATCH] Display keyword hashes in in expectation error messages
|
||||
|
||||
Ref: https://github.com/vcr/vcr/pull/925
|
||||
Ref: https://github.com/rspec/rspec-mocks/pull/1394
|
||||
|
||||
I spent quite a lot of time figuring this error:
|
||||
|
||||
```
|
||||
2) VCR.turned_on passes options through to .turn_off!
|
||||
Failure/Error: turn_off!(options)
|
||||
|
||||
VCR received :turn_off! with unexpected arguments
|
||||
expected: ({:ignore_cassettes=>true})
|
||||
got: ({:ignore_cassettes=>true})
|
||||
# ./lib/vcr.rb:317:in `turned_on'
|
||||
# ./spec/lib/vcr_spec.rb:367:in `block (3 levels) in <top (required)>'
|
||||
```
|
||||
|
||||
I quickly suspected it was a keyword argument issue, but it's far from
|
||||
obvious to everyone, and even when you are familair with the issue
|
||||
it doesn't tell you what was expected and what was received.
|
||||
|
||||
I doubt the way I implemented this is ok, but I think it's worth
|
||||
opening the discussion
|
||||
|
||||
```
|
||||
2) VCR.turned_on passes options through to .turn_off!
|
||||
Failure/Error: turn_off!(options)
|
||||
|
||||
VCR received :turn_off! with unexpected arguments
|
||||
expected: ({:ignore_cassettes=>true}) (keyword arguments)
|
||||
got: ({:ignore_cassettes=>true}) (options hash)
|
||||
# ./lib/vcr.rb:317:in `turned_on'
|
||||
# ./spec/lib/vcr_spec.rb:367:in `block (3 levels) in <top (required)>'
|
||||
```
|
||||
---
|
||||
lib/rspec/mocks/error_generator.rb | 11 ++++++++++
|
||||
spec/rspec/mocks/diffing_spec.rb | 33 ++++++++++++++++++++++++++++++
|
||||
2 files changed, 44 insertions(+)
|
||||
|
||||
diff --git a/lib/rspec/mocks/error_generator.rb b/lib/rspec/mocks/error_generator.rb
|
||||
index 9bf0984f3..42ff35283 100644
|
||||
--- a/lib/rspec/mocks/error_generator.rb
|
||||
+++ b/lib/rspec/mocks/error_generator.rb
|
||||
@@ -268,6 +268,17 @@ def unexpected_arguments_message(expected_args_string, actual_args_string)
|
||||
def error_message(expectation, args_for_multiple_calls)
|
||||
expected_args = format_args(expectation.expected_args)
|
||||
actual_args = format_received_args(args_for_multiple_calls)
|
||||
+
|
||||
+ if RSpec::Support::RubyFeatures.distincts_kw_args_from_positional_hash? && expected_args == actual_args
|
||||
+ expected_hash = expectation.expected_args.last
|
||||
+ actual_hash = args_for_multiple_calls.last.last
|
||||
+ if Hash === expected_hash && Hash === actual_hash &&
|
||||
+ (Hash.ruby2_keywords_hash?(expected_hash) != Hash.ruby2_keywords_hash?(actual_hash))
|
||||
+ actual_args += Hash.ruby2_keywords_hash?(actual_hash) ? " (keyword arguments)" : " (options hash)"
|
||||
+ expected_args += Hash.ruby2_keywords_hash?(expected_hash) ? " (keyword arguments)" : " (options hash)"
|
||||
+ end
|
||||
+ end
|
||||
+
|
||||
message = default_error_message(expectation, expected_args, actual_args)
|
||||
|
||||
if args_for_multiple_calls.one?
|
||||
diff --git a/spec/rspec/mocks/diffing_spec.rb b/spec/rspec/mocks/diffing_spec.rb
|
||||
index 3b1f91edf..e17aabcd3 100644
|
||||
--- a/spec/rspec/mocks/diffing_spec.rb
|
||||
+++ b/spec/rspec/mocks/diffing_spec.rb
|
||||
@@ -83,6 +83,39 @@
|
||||
end
|
||||
end
|
||||
|
||||
+ if RSpec::Support::RubyFeatures.distincts_kw_args_from_positional_hash?
|
||||
+ eval <<-'RUBY', nil, __FILE__, __LINE__ + 1
|
||||
+ it "print a diff when keyword argument were expected but got an option hash (using splat)" do
|
||||
+ with_unfulfilled_double do |d|
|
||||
+ expect(d).to receive(:foo).with(**expected_hash)
|
||||
+ expect {
|
||||
+ d.foo(expected_hash)
|
||||
+ }.to fail_with(
|
||||
+ "#<Double \"double\"> received :foo with unexpected arguments\n" \
|
||||
+ " expected: ({:baz=>:quz, :foo=>:bar}) (keyword arguments)\n" \
|
||||
+ " got: ({:baz=>:quz, :foo=>:bar}) (options hash)"
|
||||
+ )
|
||||
+ end
|
||||
+ end
|
||||
+ RUBY
|
||||
+
|
||||
+ eval <<-'RUBY', nil, __FILE__, __LINE__ + 1
|
||||
+ it "print a diff when keyword argument were expected but got an option hash (literal)" do
|
||||
+ with_unfulfilled_double do |d|
|
||||
+ expect(d).to receive(:foo).with(:positional, keyword: 1)
|
||||
+ expect {
|
||||
+ options = { keyword: 1 }
|
||||
+ d.foo(:positional, options)
|
||||
+ }.to fail_with(
|
||||
+ "#<Double \"double\"> received :foo with unexpected arguments\n" \
|
||||
+ " expected: (:positional, {:keyword=>1}) (keyword arguments)\n" \
|
||||
+ " got: (:positional, {:keyword=>1}) (options hash)"
|
||||
+ )
|
||||
+ end
|
||||
+ end
|
||||
+ RUBY
|
||||
+ end
|
||||
+
|
||||
if RUBY_VERSION.to_f < 1.9
|
||||
# Ruby 1.8 hashes are not ordered, but `#inspect` on a particular unchanged
|
||||
# hash instance should return consistent output. However, on Travis that does
|
@ -3,7 +3,7 @@
|
||||
%global rpmminorver .%(echo %preminorver | sed -e 's|^\\.\\.*||')
|
||||
%global fullver %{majorver}%{?preminorver}
|
||||
|
||||
%global fedorarel 1
|
||||
%global fedorarel 2
|
||||
|
||||
%global gem_name rspec-mocks
|
||||
|
||||
@ -22,6 +22,11 @@ Source0: https://rubygems.org/gems/%{gem_name}-%{fullver}.gem
|
||||
# %%{SOURCE2} %%{name} %%{version}
|
||||
Source1: rubygem-%{gem_name}-%{version}-full.tar.gz
|
||||
Source2: rspec-related-create-full-tarball.sh
|
||||
# https://github.com/rspec/rspec-mocks/commit/e931e818b577172b89fb4583fc336fbcd25df36b
|
||||
# The above is in 3.12.x branch, not in 3.11.x branch
|
||||
Patch1: rubygem-rspec-mocks-3.12.0-display_keyword_hashes.patch
|
||||
# ... and related to the above, and commit 66250dc1819f9435e5f584064067e7f05a9afe72
|
||||
Patch2: rubygem-rspec-mocks-3.12.0-display_keyword_hashes-additional.patch
|
||||
|
||||
#BuildRequires: ruby(release)
|
||||
BuildRequires: rubygems-devel
|
||||
@ -54,6 +59,11 @@ This package contains documentation for %{name}.
|
||||
gem unpack %{SOURCE0}
|
||||
|
||||
%setup -q -D -T -n %{gem_name}-%{version} -b 1
|
||||
%if 0%{?fedora} <= 37
|
||||
# Revert "display_keyword_hashes" for now on Fedora 37
|
||||
%patch1 -p1 -R
|
||||
%patch2 -p1 -R
|
||||
%endif
|
||||
|
||||
# Cucumber 7 syntax change
|
||||
sed -i cucumber.yml -e "s|~@wip|not @wip|"
|
||||
@ -99,6 +109,10 @@ cucumber
|
||||
%{gem_docdir}
|
||||
|
||||
%changelog
|
||||
* Thu Nov 3 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.12.0-2
|
||||
- On Fedora 37, remove "Display keyword hashes" feature for now
|
||||
(On Fedora 38, this is effective)
|
||||
|
||||
* Thu Oct 27 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.12.0-1
|
||||
- 3.12.0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user