#!perl -Tw use Test::More tests => 17; use strict; use File::Spec; use_ok( 'MARC::Record' ); my $r = MARC::Record->new(); # alphabetic indicators are legal in some dialects of MARC $r->append_fields( MARC::Field->new( 245, 'z', 'Z', a => 'foo' ) ); is( $r->field(245)->indicator(1), 'z', 'indicator 1 can be non-numeric' ); is( $r->field(245)->indicator(2), 'Z', 'indicator 2 can be non-numeric' ); # rumor had it that invalid indicators sometimes invalidated other # valid indicators, so these tests make sure that is not the case $r->append_fields( MARC::Field->new( 100, 'dk', 2, a=> 'foo' ) ); is( $r->field(100)->indicator(1), ' ', 'invalid indicator squashed to space' ); is( $r->field(100)->indicator(2), 2, 'not disturbed' ); $r->append_fields( MARC::Field->new( 111, 2, '-didk', a=> 'foo' ) ); is ($r->field(111)->indicator(1), 2, 'not disturbed' ); is ($r->field(111)->indicator(2), ' ', 'invalid indicator squashed to space' ); ## read a file which has an invalid indicator (a hyphen) and make sure it does ## not affect a valid indicator use_ok( 'MARC::Batch' ); my $filename = File::Spec->catfile( 't', 'badind.usmarc' ); my $batch = MARC::Batch->new( 'USMARC', $filename ); $batch->strict_off(); $batch->warnings_off(); $r = $batch->next(); my @warnings = $batch->warnings(); is( $warnings[0], 'Invalid indicator "-" forced to blank', 'got expected warning message' ); is( $r->field(245)->indicator(1),' ','hyphen forced to blank in indicator 1' ); is( $r->field(245)->indicator(2),'0','indicator 2 undisturbed' ); CONTROLFIELD: { my $field; $field = MARC::Field->new( '003', 'ICrlF' ); is( scalar($field->warnings()), 0, 'no warnings for field' ); ok( !defined $field->indicator(1), 'indicator(1) for control field returns undef' ); is( scalar($field->warnings()), 1, 'indicator(1) for control field generates warning' ); $field = MARC::Field->new( '003', 'ICrlF' ); is( scalar($field->warnings()), 0, 'no warnings for field' ); ok( !defined $field->indicator(2), 'indicator(2) for control field returns undef' ); is( scalar($field->warnings()), 1, 'indicator(2) for control field generates warning' ); }