rubygem-rspec-support/rubygem-rspec-support-pr164-ruby34-hash-syntax.patch

91 lines
3.8 KiB
Diff

From 9310b4b72e205c6352c4b30015a3b8f3d2fb02e8 Mon Sep 17 00:00:00 2001
From: Jon Rowe <hello@jonrowe.co.uk>
Date: Thu, 26 Dec 2024 11:06:37 +0000
Subject: [PATCH 1/2] Format hashes in new {a: :b} format on Ruby 3.4
---
.../step_definitions/additional_cli_steps.rb | 2 +-
.../rspec/mocks/argument_matchers_spec.rb | 24 ++++++++++++++++---
rspec-mocks/spec/rspec/mocks/diffing_spec.rb | 17 +++++--------
rspec-mocks/spec/rspec/mocks/double_spec.rb | 2 +-
.../spec/rspec/mocks/matchers/receive_spec.rb | 4 ++--
.../expected_arg_verification_spec.rb | 2 +-
.../lib/rspec/support/object_formatter.rb | 2 ++
.../spec/rspec/support/differ_spec.rb | 2 +-
.../rspec/support/object_formatter_spec.rb | 22 +++++++++++++++--
9 files changed, 55 insertions(+), 22 deletions(-)
diff --git a/rspec-support/lib/rspec/support/object_formatter.rb b/rspec-support/lib/rspec/support/object_formatter.rb
index a3d5a11cb..d464f1b3c 100644
--- a/rspec-support/lib/rspec/support/object_formatter.rb
+++ b/rspec-support/lib/rspec/support/object_formatter.rb
@@ -61,6 +61,8 @@ def prepare_for_inspection(object)
prepare_array(object)
when Hash
prepare_hash(object)
+ when Symbol
+ object
else
inspector_class = INSPECTOR_CLASSES.find { |inspector| inspector.can_inspect?(object) }
inspector_class.new(object, self)
diff --git a/rspec-support/spec/rspec/support/differ_spec.rb b/rspec-support/spec/rspec/support/differ_spec.rb
index bcfd9744a..18f6aefc4 100644
--- a/rspec-support/spec/rspec/support/differ_spec.rb
+++ b/rspec-support/spec/rspec/support/differ_spec.rb
@@ -308,7 +308,7 @@ def inspect; "<BrokenObject>"; end
|
EOD
- expected_diff.gsub!('=>',' => ') if RUBY_VERSION.to_f > 3.3
+ expected_diff.gsub!(/:(\w+)=>/,'\1: ') if RUBY_VERSION.to_f > 3.3
diff = differ.diff(expected,actual)
expect(diff).to be_diffed_as(expected_diff)
diff --git a/rspec-support/spec/rspec/support/object_formatter_spec.rb b/rspec-support/spec/rspec/support/object_formatter_spec.rb
index 68c48a549..3bbe20390 100644
--- a/rspec-support/spec/rspec/support/object_formatter_spec.rb
+++ b/rspec-support/spec/rspec/support/object_formatter_spec.rb
@@ -17,6 +17,19 @@ module Support
end
end
+ context "with an array containing a hash", :aggregate_failures do
+ it "formats the output the same as if it was inspected" do
+ formatted = ObjectFormatter.format([{ :a => :b }])
+ expect(formatted).to eq(
+ if RUBY_VERSION.to_f > 3.3
+ "[{a: :b}]"
+ else
+ "[{:a=>:b}]"
+ end
+ )
+ end
+ end
+
context "with a hash object containing other objects for which we have custom formatting" do
let(:time) { Time.utc(1969, 12, 31, 19, 01, 40, 101) }
let(:formatted_time) { ObjectFormatter.format(time) }
@@ -37,7 +50,12 @@ module Support
unless RUBY_VERSION == '1.8.7' # We can't count on the ordering of the hash on 1.8.7...
context 'with a hash object' do
let(:input) { { :c => "ccc", :a => "aaa", "b" => 'bbb' } }
- let(:expected) { '{:a=>"aaa", "b"=>"bbb", :c=>"ccc"}' }
+
+ if RUBY_VERSION.to_f > 3.3
+ let(:expected) { '{a: "aaa", "b"=>"bbb", c: "ccc"}' }
+ else
+ let(:expected) { '{:a=>"aaa", "b"=>"bbb", :c=>"ccc"}' }
+ end
it 'sorts keys to ensure objects are always displayed the same way' do
formatted = ObjectFormatter.format(input)
@@ -375,7 +393,7 @@ def inspect
if RUBY_VERSION.to_f > 3.3
def eq_hash_syntax(string)
- eq string.gsub('=>', ' => ')
+ eq string.gsub(/:(\w+)=>/, '\1: ').gsub('=>', ' => ')
end
else
def eq_hash_syntax(string)