The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

=head1 NAME

check_010.t -- Tests to ensure MARC::Errorchecks::check_010 subroutine works as expected.

=head1 TO DO

If check_010 would be better in MARC::Lint, modify this test appropriately.

=cut

use strict;
use Test::More tests=>46;

BEGIN { use_ok( 'MARC::Errorchecks' ); }
BEGIN { use_ok ( 'MARC::Record' ); }
print "MARC::Errorchecks version $MARC::Errorchecks::VERSION\n";

my @expected = (

    q{010: Subfield 'a' has improper spacing (00000001).}, #no spaces before or after 8-digit,

    q{010: Subfield 'a' has improper spacing (01000001).}, #spacing and post 2000 8-digit

    q{010: Subfield 'a' has improper spacing (2001000001).}, #no spaces before 10-digit,

########    q{   00000002  #good 8-digit},
#####    q{010: First digits of LCCN are 01.}, #spacing good on post 2000 8-digit},

########    q{  2001000002 #good 10-digit},

    q{010: Subfield 'a' has improper spacing (   00000003).}, #no space after 8-digit

    q{010: Subfield 'a' has improper spacing (  01000003 ).}, #2 spaces before and post 2000 8-digit


    q{010: Subfield 'a' has improper spacing ( 2001000003).}, #1 space before 10-digit
    q{010: Subfield 'a' has improper spacing (  00000004 ).}, #2 spaces before 8-digit
    q{010: Subfield 'a' has improper spacing (  2001000004 ).}, #1 space after 10-digit
    q{010: Subfield 'a' has improper spacing ( 00000005 ).}, #1 spaces before 8-digit
    q{010: Subfield 'a' has improper spacing ( 2001000005 ).}, #1 space before and after 10-digit
####    q{010: Subfield 'a' has non-digits (   00000006 //r96).}, #good 8-digit with extra data},
####    q{010: Subfield 'a' has non-digits (  2001000006//r02).}, #good 10-digit with extra data},
    q{010: First digits of LCCN are 2019.},

);

my @lccns = (
    q{00000001}, #no spaces before or after 8-digit
    q{01000001}, #spacing and post 2000 8-digit
    q{2001000001}, #no spaces before 10-digit
    q{   00000002 }, #good 8-digit
    q{   01000002 }, #spacing good on post 2000 8-digit
    q{  2001000002}, #good 10-digit
    q{   00000003}, #no space after 8-digit
    q{  01000003 }, #2 spaces before and post 2000 8-digit
    q{ 2001000003}, #1 space before 10-digit
    q{  00000004 }, #2 spaces before 8-digit
    q{  2001000004 }, #1 space after 10-digit
    q{ 00000005 }, #1 spaces before 8-digit
    q{ 2001000005 }, #1 space before and after 10-digit
    q{   00000006 //r96}, #good 8-digit with extra data
    q{  2001000006//r02}, #good 10-digit with extra data

    q{  2019000006}, #post-current year (until 2019) 10-digit


);

foreach my $lccn (@lccns) {
    my $marc = MARC::Record->new();
    isa_ok( $marc, 'MARC::Record', 'MARC record' );

    $marc->leader("00000nam  2200253 a 4500"); 
    my $nfields = $marc->add_fields(
        #control number so one is present
        ['001', "ttt04000001"
        ],
        #basic 008
        ['008', "050718s2005    ilu           000 0 eng d"
        ],
        #add current LCCN for testing
        ['010', "", "",
            a => $lccn,
        ],
        #basic 245
        [245, "0","0",
            a => "Test record from text /",
            c => "Bryan Baldus ... [et al.].",
        ],
    );
    is( $nfields, 4, "All the fields added OK" );


    my @errorstoreturn = ();
    push @errorstoreturn, (@{MARC::Errorchecks::check_010($marc)});
    if (@errorstoreturn) {
        print "Errors for LCCN(",  $lccn, ")\n";
    } #if errors
    else {
        print "No errors for LCCN(",  $lccn, ")\n";
    } #else no errors
    while ( @errorstoreturn ) {
        my $expected = shift @expected;
        my $actual = shift @errorstoreturn;
        #$expected .= $lccn;
        is( $actual, $expected, "Checking expected messages: $expected" );
    } #while errorstoreturn

} #foreach lccn

is( scalar @expected, 0, "All expected messages exhausted." );