use strict;
use warnings;
use Test::More qw( no_plan );
use Test::Exception;
use_ok( 'MARC::Detrans' );
use_ok( 'MARC::Batch' );
my $detrans = MARC::Detrans->new( config => 't/testconfig.xml' );
isa_ok( $detrans, 'MARC::Detrans' );
throws_ok { MARC::Detrans->new() } qr/must supply config parameter/,
'no config in constructor call';
throws_ok { MARC::Detrans->new( config => 'foo' ) }
qr/config file doesn't exist/,
'non-existent xml config file';
my $batch = MARC::Batch->new( 'USMARC', 't/marc.dat' );
while ( my $record = $batch->next() ) {
$record = $detrans->convert( $record );
if ( !$record ) { print $detrans->error(); next; }
isa_ok( $record, 'MARC::Record' );
ok( $record->field( '880' ), 'found 880 fields' );
ok( $record->field( '066' ), 'found 066 field' );
## examine each 880 field
foreach my $field ( $record->field( '880' ) ) {
## unpack the subfield 6
my $sub6 = $field->subfield(6);
my ( $tag, $count, $script, $orientation ) =
$sub6 =~ m{^(\d+)-(\d+)/(..)/(.)?};
## verify the script code and orientation
is( $script, '(N', 'script code' );
is( $orientation, 'r', 'script orientation' );
## look for the linked field
my $linkedField = getLinkedField( $record, $count );
if ( ! $linkedField ) {
fail( "missing linked field" );
} else {
ok( $linkedField->tag() eq $tag, "found liked 880 field" );
}
}
}
sub getLinkedField {
my ($r,$count) = @_;
foreach my $f ( $r->fields() ) {
next if $f->is_control_field();
my $sub6 = $f->subfield('6');
if ( $sub6 and $sub6 eq sprintf( "880-%02d", $count ) ) {
return $f;
}
}
}