#!/usr/bin/perl # PPI::Document tests use strict; use File::Spec::Functions ':ALL'; BEGIN { no warnings 'once'; $| = 1; $PPI::XS_DISABLE = 1; $PPI::Lexer::X_TOKENIZER ||= $ENV{X_TOKENIZER}; } use PPI; # Execute the tests use Test::More tests => 14; use Test::NoWarnings; # Test file my $file = catfile(qw{ t data 03_document test.dat }); my $empty = catfile(qw{ t data 03_document empty.dat }); ok( -f $file, 'Found test file' ); ok( -f $empty, 'Found test file' ); # Test script my $script = <<'END_PERL'; #!/usr/bin/perl # A simple test script print "Hello World!\n"; END_PERL ##################################################################### # Test a basic document # Parse a simple document in all possible ways SCOPE: { my $doc1 = PPI::Document->new( $file ); isa_ok( $doc1, 'PPI::Document' ); my $doc2 = PPI::Document->new( \$script ); isa_ok( $doc2, 'PPI::Document' ); my $doc3 = PPI::Document->new( [ "#!/usr/bin/perl", "", "# A simple test script", "", "print \"Hello World!\\n\";", ] ); isa_ok( $doc3, 'PPI::Document' ); # Compare the three forms is_deeply( $doc1, $doc2, 'Stringref form matches file form' ); is_deeply( $doc1, $doc3, 'Arrayref form matches file form' ); } # Repeat the above with a null document SCOPE: { my $doc1 = PPI::Document->new( $empty ); isa_ok( $doc1, 'PPI::Document' ); my $doc2 = PPI::Document->new( \'' ); isa_ok( $doc2, 'PPI::Document' ); my $doc3 = PPI::Document->new( [ ] ); isa_ok( $doc3, 'PPI::Document' ); # Compare the three forms is_deeply( $doc1, $doc2, 'Stringref form matches file form' ); is_deeply( $doc1, $doc3, 'Arrayref form matches file form' ); # Make sure the null document round-trips my $string = $doc1->serialize; is( $string, '', '->serialize ok' ); # Check for warnings on null document index_locations { local $^W = 1; $doc1->index_locations(); } }