super_diff
super_diff copied to clipboard
Using have_attributes with nil as the actual value blows up
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.
the same issue with eq
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)!