use strict;
use warnings;
use Test::More tests => 31;
use MARC::Field;
# Test is_controlfield_tag
foreach my $i (1..9) {
my $field = MARC::Field->new('00' . $i, 'TestData $i');
ok($field->is_control_field, "$i identified as control field");
}
# Should not be control fields
foreach my $i qw(010 011 555 FMT) {
my $field = MARC::Field->new($i, 0, 0, 'a', 'Hello');
ok(!$field->is_control_field, "Non-control showing up as such for $i");
}
# Add the FMT
MARC::Field->allow_controlfield_tags('FMT');
foreach my $i qw(001 002 003 004 005 FMT) {
my $field = MARC::Field->new( $i, "TestData $i");
ok($field->is_control_field, "$i correctly identified as control field");
is($field->data, "TestData $i", "Got it back out");
}
# Take it out again
MARC::Field->disallow_controlfield_tags('FMT');
foreach my $i ('FMT') {
my $field = MARC::Field->new( $i, 0, 0, 'a', 'Test');
ok(!$field->is_control_field, "$i identified as data field");
is($field->subfield('a'), 'Test', "Got it back out");
}
# Add the FMT
MARC::Field->allow_controlfield_tags('FMT');
# See if it throws an error trying to make a datafield out of a control field
foreach my $i ('FMT', '001') {
my $field = MARC::Field->new( $i, 0, 0, 'a', 'Test');
like(join(' ', $field->warnings), qr/too much data/i, "Caught error trying to make datafield out of controlfield '$i'");
};
# Take it out again
MARC::Field->disallow_controlfield_tags('*');
# See if it throws an error trying to make a control field out of a data field
foreach my $i ('FMT', '010') {
eval {
my $field = MARC::Field->new($i, 'Test');
};
like($@, qr/must have indicators/, "Correctly got error trying to make control field out of '$i'");
}