#!/usr/bin/perl # Test compatibility with Storable use strict; BEGIN { no warnings 'once'; $| = 1; $PPI::XS_DISABLE = 1; $PPI::Lexer::X_TOKENIZER ||= $ENV{X_TOKENIZER}; } use Test::More; BEGIN { # Is Storable installed? eval { require Storable; }; if ( $@ ) { plan( 'skip_all' ); exit(0); } else { plan( tests => 10 ); } } use Test::NoWarnings; use File::Spec::Functions ':ALL'; use Scalar::Util 'refaddr'; use PPI; ##################################################################### # Test freeze/thaw of PPI::Document objects SCOPE: { # Create a document with various example package statements my $Document = PPI::Lexer->lex_source( <<'END_PERL' ); package Foo; @ISA = (qw/File::Spec/); 1; END_PERL Test::More::isa_ok( $Document, 'PPI::Document' ); { my $isa = $Document->find_first(sub { $_[1] eq '@ISA'; }); Test::More::ok( $isa, "Found ISA var"); Test::More::is( $isa->parent, q|@ISA = (qw/File::Spec/);|, "Got parent ok"); } my $clone = Storable::dclone($Document); Test::More::ok($clone, "dclone ok"); Test::More::isnt( refaddr($Document), refaddr($clone), "Not the same object" ); Test::More::is(ref($Document), ref($clone), "Same class"); Test::More::is_deeply( $Document, $clone, "Deeply equal" ); { my $isa = $clone->find_first(sub { $_[1] eq '@ISA'; }); Test::More::ok($isa, "Found ISA var"); Test::More::is($isa->parent, q|@ISA = (qw/File::Spec/);|, "Got parent ok"); # <-- this one fails } }