--- trunk/t/3-normalize.t 2006/07/03 21:08:07 574 +++ trunk/t/3-normalize.t 2006/09/11 14:29:01 669 @@ -2,7 +2,7 @@ use strict; -use Test::More tests => 140; +use Test::More tests => 157; use Test::Exception; use Cwd qw/abs_path/; use blib; @@ -364,11 +364,11 @@ test_s(qq{ marc_indicators('900',1,2) }); test_s(qq{ marc('900','a', rec('200') ) }); - my @marc; - ok(@marc = WebPAC::Normalize::_get_marc_fields(), "_get_marc_fields"); - diag dump( \@marc ) if ($debug); + my $marc; + ok($marc = WebPAC::Normalize::_get_marc_fields(), "_get_marc_fields"); + diag dump( $marc ) if ($debug); - is_deeply( \@marc, [ + is_deeply( $marc, [ [ '900', 1, 2, 'a', '200a' ], [ '900', 1, 2, 'a', '200-solo' ] ], 'correct marc with indicators'); @@ -376,10 +376,10 @@ test_s(qq{ marc_indicators('900',' ',9) }); test_s(qq{ marc_repeatable_subfield('900','a', rec('200') ) }); - 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, [ + is_deeply( $marc, [ [ '900', 1, 2, 'a', '200a', 'a', '200-solo' ], [ '900', ' ', 9, 'a', '200a', 'a', '200-solo' ] ], 'correct marc with repetable subfield'); @@ -401,10 +401,10 @@ test_s($r) if ($r); } - ok(my @marc = WebPAC::Normalize::_get_marc_fields(), "_get_marc_fields"); - diag dump( \@marc ) if ($debug); + ok(my $marc = WebPAC::Normalize::_get_marc_fields(), "_get_marc_fields"); + diag dump( $marc ) if ($debug); diag "expects:\n", dump($struct) if ($debug > 1); - is_deeply( \@marc, $struct, $msg ); + is_deeply( $marc, $struct, $msg ); } test_rec_rules( @@ -479,6 +479,22 @@ ], ); + test_rec_rules( + 'marc_compose with + subfields', + { '200' => [{ a => 'foo ; bar', b => 42, c => 'baz' }] }, + qq{ + marc_compose('900', + 'a', rec(200,'a'), + '+', prefix(" * ", rec(200,'c')), + 'b', rec(200,'b'), + '+', prefix(" : ", rec(200,'c')), + ); + }, + [ + [ '900', ' ', ' ', 'a', 'foo ; bar * baz', 'b', '42 : baz' ] + ], + ); + # # test rules # @@ -565,7 +581,7 @@ ); test_rec_rules( - 'marc_remove', + 'marc_remove subfield', { '200' => [{ a => 42, b => 'bar', c => 'baz' }] }, qq{ marc('900', 'a', rec('200','a') ); @@ -580,6 +596,20 @@ ); test_rec_rules( + 'marc_remove field', + { '200' => [{ a => 42, b => 'bar', c => 'baz' }] }, + qq{ + marc('900', 'a', rec('200','a') ); + marc('900', 'b', rec('200','b') ); + marc('901', 'b', rec('200','b') ); + marc('901', 'c', rec('200','c') ); + marc_remove('900'); + }, + [ + [ '901', ' ', ' ', 'b', 'bar', 'c', 'baz' ], + ], + ); + test_rec_rules( 'marc_duplicate', { '200' => [{ a => 42, b => 'bar', c => 'baz', d => 'bing', e => 'bong' }] }, qq{ @@ -604,15 +634,71 @@ my $i = 0; foreach my $v ( qw/bar baz bing bong/ ) { - ok(@marc = WebPAC::Normalize::_get_marc_fields( offset => $i ), + ok($marc = WebPAC::Normalize::_get_marc_fields( offset => $i ), "_get_marc_fields( offset => $i )" ); - diag "marc $i = ", dump( @marc ) if ($debug); - is_deeply( \@marc, + diag "marc $i = ", dump( $marc ) if ($debug); + is_deeply( $marc, [ [ '900', ' ', ' ', 'a', 42, 'b', $v ] ], "MARC copy $i has $v", ); $i++; } + + test_rec_rules( + 'marc_original_order', + { + '200' => [ { + a => [ 'a1', 'a2' ], b => [ 'b1', 'b2' ], c => [ 'c1', 'c2' ], + subfields => [ qw/a 0 b 0 a 1 b 1 c 0 c 1/ ], + }, { + a => [ 'a3', 'a4', 'a5' ], b => 'b3', c => 'c3', + subfields => [ qw/a 0 a 1 b 0 c 0 a 2/ ], + } ], + }, + qq{ + marc_original_order(900,200); + }, + [ + [ '900', ' ', ' ', 'a', 'a1', 'b', 'b1', 'a', 'a2', 'b', 'b2', 'c', 'c1', 'c', 'c2', ], + [ '900', ' ', ' ', 'a', 'a3', 'a', 'a4', 'b', 'b3', 'c', 'c3', 'a', 'a5', ], + ], + ); + + test_rule( + 'rec1 skips subfields', + { + '200' => [ { + a => [ 'a1', 'a2' ], b => [ 'b1', 'b2' ], c => [ 'c1', 'c2' ], + subfields => [ qw/a 0 b 0 a 1 b 1 c 0 c 1/ ], + }, { + a => [ 'a3', 'a4', 'a5' ], b => 'b3', c => 'c3', + subfields => [ qw/a 0 a 1 b 0 c 0 a 2/ ], + } ], + }, + qq{ + rec1(200); + }, + ['a1', 'b1', 'a2', 'b2', 'c1', 'c2', 'a3', 'a4', 'b3', 'c3', 'a5' ], + ); + + is_deeply( + [ _pack_subfields_hash({ + a => [ 'a1', 'a2' ], b => [ 'b1', 'b2' ], c => [ 'c1', 'c2' ], + subfields => [ qw/a 0 b 0 a 1 b 1 c 0 c 1/ ], + }) ], + ['a1', 'b1', 'a2', 'b2', 'c1', 'c2'], + '_pack_subfields_hash( $h )' + ); + + cmp_ok( + _pack_subfields_hash({ + a => [ 'a1', 'a2' ], b => [ 'b1', 'b2' ], c => [ 'c1', 'c2' ], + subfields => [ qw/a 0 b 0 a 1 b 1 c 0 c 1/ ], + }, 1), + 'eq', + '^aa1^bb1^aa2^bb2^cc1^cc2', + '_pack_subfields_hash( $h, 1 )' + ); }