package main; use strict; use warnings; use Test; use XML::Dumper; use lib qw( t/classes ); BEGIN { plan tests => 16 } @INC = ("./t/data/", @INC); sub check( $$ ); check "Scalar Object", < Hi Mom XML check "Hash Object", < value1 value2 XML check "Array Object", < foo bar XML check "Long Namespace", < Hi Mom XML check "Scalar Object", < Hi Mom XML check "Hash Object", < value1 value2 XML check "Array Object", < foo bar XML check "Long Namespace", < Hi Mom XML # ============================================================ sub check( $$ ) { # ============================================================ my $test = shift; my $xml = shift; my $perl = undef; $ENV{THE_ANSWER} = 42; # Choke warnings eval { local $SIG{__WARN__} = sub { 1; }; $perl = xml2pl( $xml ); }; # ===== HANDLE MALICIOUS CODE if( $@ =~ /delete/ ) { # Verify that parsing/undumping failed... ok(!defined($perl)); # ...that it die()'d... ok($@); # ...and that it didn't run the malicious code... ok(exists($ENV{THE_ANSWER}) and 42 == $ENV{THE_ANSWER}); # ===== HANDLE ACCEPTABLE CODE } else { ok( defined( $perl )); } }