X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=t%2F3-normalize-marc.t;h=4cf85cb822ecb3c420257a82f41b9239e9c0647f;hb=d961e39cfba23dc9edd131f4e4a73433bb1c7996;hp=a636b9191197bbbf66dc7a21d5f8565a35c2b4ce;hpb=3899c67aa03248718acfa644a2002ee99c1f50df;p=webpac2 diff --git a/t/3-normalize-marc.t b/t/3-normalize-marc.t index a636b91..4cf85cb 100755 --- a/t/3-normalize-marc.t +++ b/t/3-normalize-marc.t @@ -3,7 +3,7 @@ use strict; use blib; -use Test::More tests => 7; +use Test::More tests => 330; BEGIN { use_ok( 'WebPAC::Test' ); @@ -11,6 +11,8 @@ BEGIN { use_ok( 'WebPAC::Normalize::MARC' ); } +_debug( $debug - 1 ) if $debug > 1; + my $rec = { '225' => [{ 'a' => 'a-1-1', @@ -47,46 +49,240 @@ my $rec = { 'v' => 'v-8-1', },{ 'v' => 'v-9-1', + },{ + 'v' => '0', }], }; -ok( _set_ds( $rec ), '_set_ds' ); - -ok( marc_template( - from => 225, to => 440, - subfields_rename => [ - 'a' => 'a', - 'x' => 'x', - 'v' => 'v', - 'h' => 'n', - 'i' => 'p', - 'w' => 'v', - ], - isis_template => [ - 'a ; |v. |i', - 'a. |i ; |w', - ], - marc_template => [ - 'a', - 'a ;|v', - 'a.|p', - 'a, |x ; |v. |n, |p ; |v', - 'a ; |v. |p ; |v', - 'v', - ], -), 'marc_template' ); - -ok(my $marc = WebPAC::Normalize::_get_marc_fields(), "_get_marc_fields"); -diag " _get_marc_fields = ",dump( $marc ) if $debug; - -is_deeply( $marc, [ - [440, " ", " ", "a", "a-1-1, ", "x", "x-1-1 ; ", "v", "v-1-1. ", "n", "h-1-1, ", "p", "i-1-1 ; ", "v", "w-1-1"], - [440, " ", " ", "v", "v-9-1"], - [440, " ", " ", "a", "a-2-1 ; ", "v", "v-2-1. ", "p", "i-2-1"], - [440, " ", " ", "a", "a-3-1 ; ", "v", "v-3-1. ", "p", "i-3-1"], - [440, " ", " ", "a", "a-4-1 ; ", "v", "v-4-1. ", "p", "i-4-1 ; ", "v", "w-4-1"], - [440, " ", " ", "a", "a-5-1 ; ", "v", "v-5-1. ", "p", "i-5-1"], - [440, " ", " ", "a", "a-6-1. ", "p", "i-6-1 ; ", "v", "w-6-1"], - [440, " ", " ", "a", "a-7-1"], - [440, " ", " ", "a", "a-8-1 ;", "v", "v-8-1"], -], 'is_deeply'); +sub test_marc_template { + my $rec = shift; + + ok( _clean_ds(), '_clean_ds' ); + ok( _set_ds( $rec ), '_set_ds' ); + + ok( marc_indicators( 440, '0', '1' ), 'marc_indicators' ); + + ok( marc_template( + from => 225, to => 440, + subfields_rename => [ + 'a' => 'a', + 'x' => 'x', + 'v' => 'v', + 'h' => 'n', + 'i' => 'p', + 'w' => 'v', + ], + isis_template => [ + 'a ; |v. |i', + 'a. |i ; |w', + ], + marc_template => [ + 'a', + 'a ;|v', + 'a.|p', + 'a, |x ; |v. |n, |p ; |v', + 'a ; |v. |p ; |v', + 'v', + ], + ), 'marc_template' ); + + ok(my $marc = WebPAC::Normalize::MARC::_get_marc_fields(), "_get_marc_fields"); + diag " _get_marc_fields = ",dump( $marc ) if $debug; + + ok( marc_indicators( 440, 'x', 'y' ), 'marc_indicators' ); + + return $marc; +} + +my $marc_out = [ + [440, "0", "1", "a", "a-1-1, ", "x", "x-1-1 ; ", "v", "v-1-1. ", "n", "h-1-1, ", "p", "i-1-1 ; ", "v", "w-1-1"], + [440, "0", "1", "a", "a-2-1 ; ", "v", "v-2-1. ", "p", "i-2-1"], + [440, "0", "1", "a", "a-3-1 ; ", "v", "v-3-1. ", "p", "i-3-1"], + [440, "0", "1", "a", "a-4-1 ; ", "v", "v-4-1. ", "p", "i-4-1 ; ", "v", "w-4-1"], + [440, "0", "1", "a", "a-5-1 ; ", "v", "v-5-1. ", "p", "i-5-1"], + [440, "0", "1", "a", "a-6-1. ", "p", "i-6-1 ; ", "v", "w-6-1"], + [440, "0", "1", "a", "a-7-1"], + [440, "0", "1", "a", "a-8-1 ;", "v", "v-8-1"], + [440, "0", "1", "v", "v-9-1"], + [440, 0, 1, "v", 0], +]; + +is_deeply( test_marc_template($rec), $marc_out , 'is_deeply'); + +my $max_occ = $#{ $rec->{225} }; + +foreach my $from ( 0 .. $max_occ - 1 ) { + foreach my $to ( $from + 1 .. $max_occ ) { + my @orig_rec = @{ $rec->{225} }; + my $new_rec = { + 225 => [ splice( @orig_rec, $from, $to ) ], + }; + diag "$from-$to new_rec = ",dump( $new_rec ) if $debug; + + my @expect = @$marc_out; + my $expect_marc = [ splice( @expect, $from, $to ) ]; + diag "$from-$to expect_marc = ",dump( $expect_marc ) if $debug; + + is_deeply( test_marc_template($new_rec), $expect_marc, "$from-$to is_deeply"); + + } +} + +sub test_marc_clone { + my ( $rec, $expect ) = @_; + + ok( _clean_ds(), '_clean_ds' ); + ok( _set_ds( $rec ), '_set_ds' ); + + ok( ! marc_clone, 'marc_clone' ); + + ok(my $marc = WebPAC::Normalize::MARC::_get_marc_fields(), "_get_marc_fields"); +# diag "rec = ",dump( $rec ); +# diag "marc = ",dump( $marc ); +# diag "expect = ",dump( $marc ); + + is_deeply( $marc, $expect, 'marc_clone same' ); + +} + +my $rec = { + "000" => [2, 2], + "001" => ["ocm00734950 "], + "003" => ["OCoLC"], + "005" => ["19830824185243.0"], + "008" => ["731105s1962 nyua a 00000 eng "], + "010" => [ + { a => " 62015770 ", i1 => " ", i2 => " ", subfields => ["a", 0] }, + ], + "040" => [ + { + a => "DLC", + c => "BOS", + d => "TML", + i1 => " ", + i2 => " ", + subfields => ["a", 0, "c", 0, "d", 0, "d", 1, "d", 2], + }, + ], + "041" => [{ a => "engfre", i1 => 1, i2 => " ", subfields => ["a", 0] }], + "049" => [{ a => "TMLM", i1 => " ", i2 => " ", subfields => ["a", 0] }], + "050" => [ + { + a => "RC340", + b => ".P513 1806a", + i1 => 0, + i2 => " ", + subfields => ["a", 0, "b", 0], + }, + ], + "096" => [ + { a => "WM 11 P653t 1962", i1 => " ", i2 => " ", subfields => ["a", 0] }, + ], + 100 => [ + { + a => "Pinel, Philippe,", + d => "1745-1826.", + i1 => 1, + i2 => 0, + subfields => ["a", 0, "d", 0], + }, + ], + 245 => [ + { + 1 => 2, + a => "A treatise on insanity /", + c => "translated from the French by D. D. Davis, with an introd. by Paul F. Cranefield.", + subfields => [1, 0, "a", 0, "c", 0], + }, + ], + 260 => [ + { + a => "New York :", + b => "Published under the auspices of the Library of the New York Academy of Medicine by Hafner Pub. Co.,", + c => "1962.", + i1 => 0, + i2 => " ", + subfields => ["a", 0, "b", 0, "c", 0], + }, + ], + 300 => [ + { + a => "lv, 288 p. :", + b => "ill. ;", + c => "21 cm.", + i1 => " ", + i2 => " ", + subfields => ["a", 0, "b", 0, "c", 0], + }, + ], + 440 => [ + { + a => "History of medicine ;", + i1 => " ", + i2 => 0, + subfields => ["a", 0, "v", 0], + v => "no. 14", + }, + ], + 500 => [ + { + a => "\"Facsimile of the London 1806 edition.\"", + i1 => " ", + i2 => " ", + subfields => ["a", 0], + }, + { + a => "Translation of: Traite medico-philosophique sur l'alienation mentale.", + i1 => " ", + i2 => " ", + subfields => ["a", 0], + }, + ], + 590 => [ + { + a => "L21942,WM ,purc, 10.00,rtr,1-78", + i1 => " ", + i2 => " ", + subfields => ["a", 0], + }, + ], + 650 => [ + { " " => 2, a => "Psychiatry", subfields => [" ", 0, "a", 0] }, + { " " => 2, a => "Mental Disorders", subfields => [" ", 0, "a", 0] }, + ], + 852 => [ + { + 8 => ".1", + 9 => "`;11623`07/02/1991 08:09````````````````B^61^R04CZ4^^^^1^101^1^1000^^`1^11623^54969,29361^^`2^0^0^2^0^1^0^4`", + b => "LU GENCOL", + d => "TWO WEEKS", + h => "WM 11 P653t 1962", + i => 43, + i1 => " ", + i2 => " ", + o => "available", + p => "R04CZ4", + subfields => [8, 0, "b", 0, "h", 0, "t", 0, "p", 0, "i", 0, "d", 0, "o", 0, 9, 0], + t => 1, + }, + ], + 911 => [{ a => 61, i1 => " ", i2 => " ", subfields => ["a", 0] }], + 979 => [ + { + a => "USERS", + b => 19831011, + c => "TAPE", + d => "ARCH", + i1 => " ", + i2 => " ", + subfields => ["a", 0, "b", 0, "c", 0, "d", 0], + }, + ], + leader => ["01237cam 2200301Ii 4500"], +}; + +test_marc_clone( $rec, [ + [900, " ", " ", "a", "900a", "b", "900b"], + [901, " ", " ", "c", "901c"], +] ); +