From 9310b4b72e205c6352c4b30015a3b8f3d2fb02e8 Mon Sep 17 00:00:00 2001 From: Jon Rowe 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; ""; 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)