super_diff icon indicating copy to clipboard operation
super_diff copied to clipboard

Using have_attributes with nil as the actual value blows up

Open mcmire opened this issue 3 years ago • 1 comments

This kind of test:

expect(nil).to have_attributes(...)

raises an error like this:

     NoMethodError:
       undefined method `[]' for nil:NilClass
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/bundler/gems/super_diff-48a48b4f6b1c/lib/super_diff/helpers.rb:55:in `object_address_for'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/bundler/gems/super_diff-48a48b4f6b1c/lib/super_diff/operation_tree_flatteners/default_object.rb:8:in `open_token'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/bundler/gems/super_diff-48a48b4f6b1c/lib/super_diff/operation_tree_flatteners/collection.rb:11:in `build_tiered_lines'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/bundler/gems/super_diff-48a48b4f6b1c/lib/super_diff/operation_tree_flatteners/base.rb:50:in `tiered_lines'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/bundler/gems/super_diff-48a48b4f6b1c/lib/super_diff/operation_tree_flatteners/base.rb:22:in `beginning_lines'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/bundler/gems/super_diff-48a48b4f6b1c/lib/super_diff/operation_tree_flatteners/base.rb:10:in `call'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/gems/attr_extras-6.2.4/lib/attr_extras/explicit.rb:67:in `public_send'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/gems/attr_extras-6.2.4/lib/attr_extras/explicit.rb:67:in `block (2 levels) in static_facade'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/bundler/gems/super_diff-48a48b4f6b1c/lib/super_diff/operation_trees/base.rb:28:in `flatten'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/bundler/gems/super_diff-48a48b4f6b1c/lib/super_diff/operation_trees/base.rb:23:in `to_diff'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/bundler/gems/super_diff-48a48b4f6b1c/lib/super_diff/differs/base.rb:15:in `call'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/gems/attr_extras-6.2.4/lib/attr_extras/explicit.rb:67:in `public_send'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/gems/attr_extras-6.2.4/lib/attr_extras/explicit.rb:67:in `block (2 levels) in static_facade'
     # ~/.asdf/installs/ruby/3.0.1/lib/ruby/gems/3.0.0/bundler/gems/super_diff-48a48b4f6b1c/lib/super_diff/differs/main.rb:17:in `call'

I wouldn't be surprised if there are similar issues with other matchers.

mcmire avatar May 23 '21 00:05 mcmire

the same issue with eq

mortik avatar Jul 13 '21 09:07 mortik

Indeed, JSON.parse(ObjectSpace.dump(nil)) == nil, so we can't index into that, but I believe this was fixed in #146 (v0.9.0)!

jas14 avatar Oct 11 '24 23:10 jas14