--- trunk/t/3-normalize.t 2006/06/30 18:48:33 550 +++ trunk/t/3-normalize.t 2006/07/01 10:19:39 555 @@ -2,19 +2,32 @@ use strict; -use Test::More tests => 81; +use Test::More tests => 89; use Test::Exception; use Cwd qw/abs_path/; use blib; use File::Slurp; - -use Data::Dump qw/dump/; -my $debug = shift @ARGV; +use Getopt::Long; BEGIN { use_ok( 'WebPAC::Normalize' ); } +use Data::Dump qw/dump/; + +my $debug = 0; +GetOptions( + "debug+", \$debug +); + +cmp_ok(_debug(1), '==', 1, '_debug level'); +cmp_ok(_debug(0), '==', 0, '_debug level'); + +diag "debug level for $0 is $debug" if ($debug); +if ($debug > 2) { + diag "debug level for WebPAC::Normalize is ", _debug( $debug - 2 ); +} + ok(my $abs_path = abs_path($0), "abs_path"); $abs_path =~ s#/[^/]*$#/#; diag "abs_path: $abs_path" if ($debug); @@ -341,7 +354,10 @@ } }, 'correct get_ds'); + # # MARC + # + test_s(qq{ marc_indicators('900',1,2) }); test_s(qq{ marc('900','a', rec('200') ) }); my @marc; @@ -364,33 +380,84 @@ [ '900', ' ', 9, 'a', '200a', 'a', '200-solo' ] ], 'correct marc with repetable subfield'); - _clean_ds(); - _set_rec({ - '200' => [{ - 'a' => '200a-1', - 'b' => '200b-1', - 'c' => '200c-1', - }, { - 'a' => '200a-2', - 'b' => '200b-2', - 'c' => '200c-2', - }, { - 'a' => '200a-3', - 'c' => '200c-3', - }] - }); - test_s(qq{ marc_indicators('900',1 ,0) }); - test_s(qq{ marc_repeatable_subfield('900','a', rec('200','a') ) }); - test_s(qq{ marc('900','b', rec('200','b') ) }); - test_s(qq{ marc('900','c', rec('200','c') ) }); + # + # test magic re-ordering of input data + # + + sub test_rec_rules { + my ($msg, $rec, $rules, $struct) = @_; + + _clean_ds(); + _set_rec($rec); + + foreach my $r (split(/;/, $rules)) { + $r =~ s/[\s\n\r]+/ /gs; + $r =~ s/^\s+//gs; + $r =~ s/\s+$//gs; + test_s($r) if ($r); + } - ok(@marc = WebPAC::Normalize::_get_marc_fields(), "_get_marc_fields"); - diag dump( \@marc ) if ($debug); + ok(@marc = WebPAC::Normalize::_get_marc_fields(), "_get_marc_fields"); + diag dump( \@marc ) if ($debug); - is_deeply( \@marc, [ - [ '900', 1, 0, 'a', '200a-1', 'a', '200a-2', 'a', '200a-3', 'b', '200b-1', 'c', '200c-1' ], - [ '900', 1, 0, 'b', '200b-2', 'c', '200c-2' ], - [ '900', 1, 0, 'c', '200c-3' ], - ], 'correct marc with repetable subfield'); + is_deeply( \@marc, $struct, $msg ); + } + + test_rec_rules( + 'correct marc with repetable subfield', + { + '200' => [{ + 'a' => '200a-1', + 'b' => '200b-1', + 'c' => '200c-1', + }, { + 'a' => '200a-2', + 'b' => '200b-2', + }, { + 'a' => '200a-3', + }], + }, + qq{ + marc_indicators('900',1 ,0); + marc('900','a', rec('200','a') ); + marc('900','b', rec('200','b') ); + marc('900','c', rec('200','c') ); + }, + [ + [ '900', 1, 0, 'a', '200a-1', 'b', '200b-1', 'c', '200c-1' ], + [ '900', 1, 0, 'a', '200a-2', 'b', '200b-2' ], + [ '900', 1, 0, 'a', '200a-3' ], + ], + ); + + + test_rec_rules( + 'marc_repeatable_subfield', + { + '200' => [{ + 'a' => '200a-1', + 'b' => '200b-1', + 'c' => '200c-1', + }, { + 'a' => '200a-2', + 'b' => '200b-2', + 'c' => '200c-2', + }, { + 'a' => '200a-3', + 'c' => '200c-3', + }], + }, + qq{ + marc_indicators('900',1 ,0); + marc_repeatable_subfield('900','a', rec('200','a') ); + marc('900','b', rec('200','b') ); + marc('900','c', rec('200','c') ); + }, + [ + [ '900', 1, 0, 'a', '200a-1', 'a', '200a-2', 'a', '200a-3', 'b', '200b-1', 'c', '200c-1' ], + [ '900', 1, 0, 'b', '200b-2', 'c', '200c-2' ], + [ '900', 1, 0, 'c', '200c-3' ], + ], + ); }