#!/usr/bin/perl # Unit tests for the PITA::XML::File class use strict; BEGIN { $| = 1; $^W = 1; } use Test::More tests => 14; use Config (); use PITA::XML (); # Extra testing functions sub dies { my $code = shift; eval { &$code() }; ok( $@, $_[0] || 'Code dies as expected' ); } sub dies_like { my $code = shift; my $regexp = shift; eval { &$code() }; like( $@, $regexp, $_[0] || 'Core dies like expected' ); } my $digest = 'MD5.0123456789abcdef0123456789abcdef'; ##################################################################### # Testing a sample of the functionality # Creating with bad params dies dies( sub { PITA::XML::File->new }, '->new(no params) dies' ); dies( sub { PITA::XML::File->new( filename => '', ) }, '->new(bin) dies as expected' ); # Create a file legally my $file = PITA::XML::File->new( filename => 'foo.tar.gz', resource => 'package', digest => $digest, ); isa_ok( $file, 'PITA::XML::File' ); is( $file->filename, 'foo.tar.gz', '->filename returns as expected' ); is( $file->resource, 'package', '->resource returns as expected' ); isa_ok( $file->digest, 'Data::Digest' ); is( $file->digest->as_string, $digest, '->digest returns as expected' ); ##################################################################### # Check for specific errors # A missing filename dies_like( sub { PITA::XML::File->new( filename => undef, ) }, qr/Missing or invalid filename/, '->new(missing filename) dies like expected', ); dies_like( sub { PITA::XML::File->new( filename => '', ) }, qr/Missing or invalid filename/, '->new(missing filename) dies like expected', ); # A bad resource name dies_like( sub { PITA::XML::File->new( filename => 'foo.tar.gz', resource => undef, ) }, qr/Cannot provide a null resource type/, '->new(missing filename) dies like expected', ); # Bad resource name dies_like( sub { PITA::XML::File->new( filename => 'foo.tar.gz', resource => '', ) }, qr/Cannot provide a null resource type/, '->new(missing filename) dies like expected', ); # Bad digest dies_like( sub { PITA::XML::File->new( filename => 'foo.tar.gz', resource => 'foo', digest => undef, ) }, qr/Missing or invalid digest/, '->new(missing filename) dies like expected', ); dies_like( sub { PITA::XML::File->new( filename => 'foo.tar.gz', resource => 'foo', digest => '', ) }, qr/Missing or invalid digest/, '->new(missing filename) dies like expected', ); dies_like( sub { PITA::XML::File->new( filename => 'foo.tar.gz', resource => 'foo', digest => 'MD5.asd', ) }, qr/Missing or invalid digest/, '->new(missing filename) dies like expected', ); exit(0);