#!perl -Tw # test that we can pass filehandles to MARC::File::USMARC and MARC::Batch use Test::More tests => 206; use strict; use IO::File; use File::Spec; use_ok( 'MARC::File::USMARC' ); use_ok( 'MARC::File::MicroLIF' ); use_ok( 'MARC::Batch' ); # first try globs with MARC::File::USMARC USMARC_FILE_GLOB: { my $filename = File::Spec->catfile( 't', 'camel.usmarc' ); open( MARCDATA, $filename ); my $fh = *MARCDATA; my $file = MARC::File::USMARC->in( $fh ); isa_ok( $file, "MARC::File::USMARC" ); my $count = 0; while ( my $r = $file->next() ) { ++$count; isa_ok( $r, "MARC::Record" ); } is( $count, 10, 'MARC::File::USMARC avec globbed file handle works' ); } # now try IO::File objects with MARC::File::USMARC USMARC_IO_FILE: { my $filename = File::Spec->catfile( 't', 'camel.usmarc' ); my $fh = IO::File->new( $filename ); isa_ok( $fh, "IO::File" ); my $file = MARC::File::USMARC->in( $fh ); isa_ok( $file, "MARC::File::USMARC" ); my $count = 0; while ( my $r = $file->next() ) { ++$count; isa_ok( $r, "MARC::Record" ); } is( $count, 10, 'MARC::File::USMARC avec IO::File object works' ); } # now try globs with MARC::File::MicroLIF MICROLIF_FILE_GLOB: { my $filename = File::Spec->catfile( 't', 'sample20.lif' ); open( LIFDATA, $filename ); my $fh = *LIFDATA; my $file = MARC::File::MicroLIF->in( $fh ); isa_ok( $file, "MARC::File::MicroLIF" ); my $count = 0; while ( my $r = $file->next() ) { ++$count; isa_ok( $r, "MARC::Record" ); } is( $count, 20, 'MARC::File::MicroLIF avec globbed file handle works' ); } # and IO::File object with MARC::File::MicroLIF MICROLIF_IO_FILE: { my $filename = File::Spec->catfile( 't', 'sample20.lif' ); my $fh = IO::File->new( $filename ); isa_ok( $fh, "IO::File" ); my $file = MARC::File::MicroLIF->in( $fh ); isa_ok( $file, "MARC::File::MicroLIF" ); my $count = 0; while ( my $r = $file->next() ) { ++$count; isa_ok( $r, "MARC::Record" ); } is( $count, 20, 'MARC::File::MicroLIF avec IO::File object works' ); } # ok now lets check that MARC::Batch works as expected MARC_BATCH_FILEHANDLE: { my $filename = File::Spec->catfile( 't', 'camel.usmarc' ); my $fh = IO::File->new( $filename ); isa_ok( $fh, "IO::File" ); my $batch = MARC::Batch->new( 'USMARC', $fh ); isa_ok( $batch, "MARC::Batch" ); my $count = 0; while ( my $r = $batch->next() ) { ++$count; isa_ok( $r, "MARC::Record" ); } is( $count, 10, 'MARC::Batch avec IO::File object and USMARC' ); } # now lets try two filehandles MARC_BATCH_FILEHANDLES: { my $filename = File::Spec->catfile( 't', 'camel.usmarc' ); my $fh1 = IO::File->new( $filename ); isa_ok( $fh1, "IO::File" ); my $fh2 = IO::File->new( $filename ); isa_ok( $fh2, "IO::File" ); my $batch = MARC::Batch->new( 'USMARC', $fh1, $fh2 ); isa_ok( $batch, "MARC::Batch" ); my $count = 0; while ( my $r = $batch->next() ) { ++$count; isa_ok( $r, "MARC::Record" ); } is( $count, 20, 'MARC::Batch avec IO::File objects and USMARC' ); } # now lets try a mix of filenames, IO::File objects and globs MARC_BATCH_MIX: { my $filename = File::Spec->catfile( 't', 'camel.usmarc' ); open( MARCDATA, $filename ); my $fh1 = *MARCDATA; my $fh2 = IO::File->new( $filename ); isa_ok( $fh2, "IO::File" ); my $batch = MARC::Batch->new( 'USMARC', $fh1, $fh2, $filename ); isa_ok( $batch, "MARC::Batch" ); my $count = 0; while ( my $r = $batch->next() ) { ++$count; isa_ok( $r, "MARC::Record" ); } is( $count, 30, 'MARC::Batch avec mixture of handles and names and Lif'); } MICROLIF_BATCH_MIX: { my $filename = File::Spec->catfile( 't', 'sample20.lif' ); open( LIFDATA, $filename ); my $fh1 = *LIFDATA; my $fh2 = IO::File->new( $filename ); isa_ok( $fh2, "IO::File" ); my $batch = MARC::Batch->new( 'MicroLIF', $fh1, $fh2, $filename ); isa_ok( $batch, "MARC::Batch" ); my $count = 0; while ( my $r = $batch->next() ) { ++$count; isa_ok( $r, "MARC::Record" ); } is( $count, 60, 'MARC::Batch avec mixture of handles and names and Lif' ); }