mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Make prettyprint’s cycle detection aware of Delegator instances
Fixes [Bug #13144] Co-Authored-By: Nobuyoshi Nakada <nobu@ruby-lang.org>
This commit is contained in:
parent
251f5d8226
commit
6a75a46053
2 changed files with 16 additions and 0 deletions
|
@ -149,6 +149,10 @@ class PP < PrettyPrint
|
|||
# Object#pretty_print_cycle is used when +obj+ is already
|
||||
# printed, a.k.a the object reference chain has a cycle.
|
||||
def pp(obj)
|
||||
# If obj is a Delegator then use the object being delegated to for cycle
|
||||
# detection
|
||||
obj = obj.__getobj__ if defined?(::Delegator) and obj.is_a?(::Delegator)
|
||||
|
||||
if check_inspect_key(obj)
|
||||
group {obj.pretty_print_cycle self}
|
||||
return
|
||||
|
|
|
@ -184,6 +184,18 @@ class PPDelegateTest < Test::Unit::TestCase
|
|||
def test_delegate
|
||||
assert_equal("[]\n", A.new([]).pretty_inspect, "[ruby-core:25804]")
|
||||
end
|
||||
|
||||
def test_delegate_cycle
|
||||
a = HasPrettyPrint.new nil
|
||||
|
||||
a.instance_eval {@a = a}
|
||||
cycle_pretty_inspect = a.pretty_inspect
|
||||
|
||||
a.instance_eval {@a = SimpleDelegator.new(a)}
|
||||
delegator_cycle_pretty_inspect = a.pretty_inspect
|
||||
|
||||
assert_equal(cycle_pretty_inspect, delegator_cycle_pretty_inspect)
|
||||
end
|
||||
end
|
||||
|
||||
class PPFileStatTest < Test::Unit::TestCase
|
||||
|
|
Loading…
Reference in a new issue