91 lines
3.8 KiB
Diff
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)
|
|
|