summaryrefslogtreecommitdiff
path: root/t/node-info.t
diff options
context:
space:
mode:
Diffstat (limited to 't/node-info.t')
-rw-r--r--t/node-info.t166
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
+
+