use strict ; use warnings ; use Test::More ; use XML::Smart ; use open ':encoding(utf8)'; our $directory = 'data_for_tests'; opendir ( my $_data_dir, $directory) or die $!; while (my $file = readdir( $_data_dir ) ) { next if( $file eq '.' ) ; next if( $file eq '..' ) ; next if( $file =~ '.svn' ) ; next if( $file =~ /^bug/ ) ; subtest "Testing inclusion of data into xml $file" => sub { _test_data_from( $file ) ; done_testing() ; }; subtest "Testing embed of data into xml $file" => sub { _test_embed_from( $file ) ; done_testing() ; } } done_testing() ; #################################################################################################### ## Helper Functions ## #################################################################################################### sub _test_embed_from { my $infile = shift ; $infile = $directory . "/" . $infile ; open( my $_infile, $infile ) or die ( $! ) ; my @in_data = <$_infile> ; my $in_data = join( "", @in_data ) ; close( $_infile ) ; my $xml_input = ' ' . $in_data . ' '; my $xml_obj = new XML::Smart( $xml_input ) ; my $data = $xml_obj->data( 'decode' => 1 , 'noheader' => 1 , ) ; $data =~ s/\n//gs; $data =~ s/\s+/ /gs; $xml_input =~ s/\n//gs; $xml_input =~ s/\s+/ /gs; cmp_ok( $data, 'eq', $xml_input ) ; } sub _test_data_from { my $infile = shift ; $infile = $directory . "/" . $infile ; open( my $_infile, $infile ) or die ( $! ) ; my @in_data = <$_infile> ; my $in_data = join( "", @in_data ) ; close( $_infile ) ; my @utf8_array = ( $in_data, "GOOD DATA" ) ; my $utf8 = \@utf8_array ; my $response_xml ; my $xml_obj = XML::Smart->new() ; eval{ $xml_obj->{ response }{ data } = $utf8 ; }; if( $@ ){ fail( "Hash Creation Error $@" ) ; } eval{ $response_xml = $xml_obj->data() ; }; if( $@ ){ fail( "XML Creation Error $@" ) ; } my $post_xml_data = _get_data_from_xml( $response_xml ) ; my $post_xml_in_data = $post_xml_data->{ response }{ data }->[0]->{ CONTENT } ; cmp_ok( $post_xml_in_data, 'eq', $in_data ) ; return 1 ; } sub _get_data_from_xml { my $xml = shift ; my $data_obj ; eval { $data_obj = XML::Smart->new( $xml ); }; if( $@ ) { $xml =~ s/[^[:print:]]+//g ; $data_obj = XML::Smart->new( $xml ); } my $data_hash = $data_obj->tree(); return $data_hash; }