diff options
Diffstat (limited to 't/node-info.t')
-rw-r--r-- | t/node-info.t | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/t/node-info.t b/t/node-info.t new file mode 100644 index 0000000..ab66d32 --- /dev/null +++ b/t/node-info.t @@ -0,0 +1,166 @@ +use strict; +use lib -e 't' ? 't' : 'test'; +use TestYAML tests => 16; +use YAML::Dumper; + +package StrIngy; +use overload '""', sub { 'A Stringy String' }; +sub new {bless {}, shift} + +package main; +my $object = bless {}, 'StrIngy'; + +# $\ = "\n"; +# print ref($object); +# print "$object"; +# print overload::StrVal($object); +# print overload::StrVal(bless {}, 'foo'); +# exit; + +filters { + node => ['eval_perl' => 'get_info'], + info => ['lines' => 'make_regexp'], +}; + +run_like node => 'info'; + +sub eval_perl { + my $perl = shift; + my $stringify = 0; + $stringify = 1 if $perl =~ s/^#\s*//; + my $node = eval $perl; + die "Perl code failed to eval:\n$perl\n$@" if $@; + return ($node, $stringify); +} + +sub get_info { + my $dumper = YAML::Dumper->new; + join ';', map { + defined($_) ? $_ : 'undef' + } $dumper->node_info(@_); +} + +sub make_regexp { + my $string = join ';', map { + chomp; + s/^~$/undef/; + s/^0x\d+/0x[0-9a-fA-F]+/; + $_; + } @_; + qr/^${string}$/; +} + +__DATA__ +=== Hash Ref ++++ node: +{1..4}; ++++ info +~ +HASH +0x12345678 + +=== Array Ref ++++ node: [1..5] ++++ info +~ +ARRAY +0x12345678 + +=== Scalar ++++ node: 'hello'; ++++ info +~ +~ +0x12345678-S + +=== Scalar Ref ++++ node: \ 'hello'; ++++ info +~ +SCALAR +0x12345678 + +=== Scalar Ref Ref ++++ node: \\ 'hello'; ++++ info +~ +REF +0x12345678 + +=== Code Ref ++++ node: sub { 42; } ++++ info +~ +CODE +0x12345678 + +=== Code Ref Ref ++++ node: \ sub { 42; } ++++ info +~ +REF +0x12345678 + +=== Glob ++++ node: $::x = 5; \ *x; ++++ info +~ +GLOB +0x12345678 + +=== Regular Expression ++++ node: qr{xxx}; ++++ info +~ +REGEXP +0x12345678 + +=== Blessed Hash Ref ++++ node: bless {}, 'ARRAY'; ++++ info +ARRAY +HASH +0x12345678 + +=== Blessed Array Ref ++++ node: bless [], 'Foo::Bar'; ++++ info +Foo::Bar +ARRAY +0x12345678 + +=== Blessed Scalar Ref ++++ node: my $b = 'boomboom'; bless ((\ $b), 'Foo::Barge'); ++++ info +Foo::Barge +SCALAR +0x12345678 + +=== Blessed Code Ref ++++ node: bless sub { 43 }, 'Foo::Barbie'; ++++ info +Foo::Barbie +CODE +0x12345678 + +=== Blessed Glob ++++ node: $::x = 5; bless \ *x, 'Che'; ++++ info +Che +GLOB +0x12345678 + +=== Not Stringified Hash Object ++++ node: bless {}, 'StrIngy'; ++++ info +StrIngy +HASH +0x12345678 + +=== Stringified Hash Object ++++ node: # bless {}, 'StrIngy'; ++++ info +~ +~ +0x12345678-S + + |