better utf8 test records
[webpac2] / t / 3-normalize-marc.t
1 #!/usr/bin/perl -w
2
3 use strict;
4 use blib;
5
6 use Test::More tests => 330;
7
8 BEGIN {
9         use_ok( 'WebPAC::Test' );
10         use_ok( 'WebPAC::Normalize' );
11         use_ok( 'WebPAC::Normalize::MARC' );
12 }
13
14 _debug( $debug - 1 ) if $debug > 1;
15
16 my $rec = {
17         '225' => [{
18                 'a' => 'a-1-1',
19                 'i' => 'i-1-1',
20                 'v' => 'v-1-1',
21                 'w' => 'w-1-1',
22                 'h' => 'h-1-1',
23                 'x' => 'x-1-1',
24         },{
25                 'a' => 'a-2-1',
26                 'v' => 'v-2-1',
27                 'i' => 'i-2-1',
28         },{
29                 'a' => 'a-3-1',
30                 'i' => 'i-3-1',
31                 'v' => 'v-3-1',
32         },{
33                 'a' => 'a-4-1',
34                 'v' => 'v-4-1',
35                 'i' => 'i-4-1',
36                 'w' => 'w-4-1',
37         },{
38                 'a' => 'a-5-1',
39                 'v' => 'v-5-1',
40                 'i' => 'i-5-1',
41         },{
42                 'a' => 'a-6-1',
43                 'i' => 'i-6-1',
44                 'w' => 'w-6-1',
45         },{
46                 'a' => 'a-7-1',
47         },{
48                 'a' => 'a-8-1',
49                 'v' => 'v-8-1',
50         },{
51                 'v' => 'v-9-1',
52         },{
53                 'v' => '0',
54         }],
55 };
56
57 sub test_marc_template {
58         my $rec = shift;
59
60         ok( _clean_ds(), '_clean_ds' );
61         ok( _set_ds( $rec ), '_set_ds' );
62
63         ok( marc_indicators( 440, '0', '1' ), 'marc_indicators' );
64
65         ok( marc_template(
66                 from => 225, to => 440,
67                 subfields_rename => [
68                         'a' => 'a',
69                         'x' => 'x',
70                         'v' => 'v',
71                         'h' => 'n',
72                         'i' => 'p',
73                         'w' => 'v',
74                 ],
75                 isis_template => [
76                         'a ; |v. |i',
77                         'a. |i ; |w',
78                 ],
79                 marc_template => [
80                         'a',
81                         'a ;|v',
82                         'a.|p',
83                         'a, |x ; |v. |n, |p ; |v',
84                         'a ; |v. |p ; |v',
85                         'v',
86                 ],
87         ), 'marc_template' );
88
89         ok(my $marc = WebPAC::Normalize::MARC::_get_marc_fields(), "_get_marc_fields");
90         diag " _get_marc_fields = ",dump( $marc ) if $debug;
91
92         ok( marc_indicators( 440, 'x', 'y' ), 'marc_indicators' );
93
94         return $marc;
95 }
96
97 my $marc_out = [
98         [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"],
99         [440, "0", "1", "a", "a-2-1 ; ", "v", "v-2-1. ", "p", "i-2-1"],
100         [440, "0", "1", "a", "a-3-1 ; ", "v", "v-3-1. ", "p", "i-3-1"],
101         [440, "0", "1", "a", "a-4-1 ; ", "v", "v-4-1. ", "p", "i-4-1 ; ", "v", "w-4-1"],
102         [440, "0", "1", "a", "a-5-1 ; ", "v", "v-5-1. ", "p", "i-5-1"],
103         [440, "0", "1", "a", "a-6-1. ", "p", "i-6-1 ; ", "v", "w-6-1"],
104         [440, "0", "1", "a", "a-7-1"],
105         [440, "0", "1", "a", "a-8-1 ;", "v", "v-8-1"],
106         [440, "0", "1", "v", "v-9-1"],
107         [440, 0, 1, "v", 0],
108 ];
109
110 is_deeply( test_marc_template($rec), $marc_out , 'is_deeply');
111
112 my $max_occ = $#{ $rec->{225} };
113
114 foreach my $from ( 0 .. $max_occ - 1 ) {
115         foreach my $to ( $from + 1 .. $max_occ ) {
116                 my @orig_rec = @{ $rec->{225} };
117                 my $new_rec = {
118                         225 => [ splice( @orig_rec, $from, $to ) ],
119                 };
120                 diag "$from-$to new_rec = ",dump( $new_rec ) if $debug;
121
122                 my @expect = @$marc_out;
123                 my $expect_marc = [ splice( @expect, $from, $to ) ];
124                 diag "$from-$to expect_marc = ",dump( $expect_marc ) if $debug;
125
126                 is_deeply( test_marc_template($new_rec), $expect_marc, "$from-$to is_deeply");
127
128         }
129 }
130
131 sub test_marc_clone {
132         my ( $rec, $expect ) = @_;
133
134         ok( _clean_ds(), '_clean_ds' );
135         ok( _set_ds( $rec ), '_set_ds' );
136
137         ok( ! marc_clone, 'marc_clone' );
138
139         ok(my $marc = WebPAC::Normalize::MARC::_get_marc_fields(), "_get_marc_fields");
140 #       diag "rec = ",dump( $rec );
141 #       diag "marc = ",dump( $marc );
142 #       diag "expect = ",dump( $marc );
143
144         is_deeply( $marc, $expect, 'marc_clone same' );
145
146 }
147
148 my $rec = {
149   "000"  => [2, 2],
150   "001"  => ["ocm00734950 "],
151   "003"  => ["OCoLC"],
152   "005"  => ["19830824185243.0"],
153   "008"  => ["731105s1962    nyua     a    00000 eng  "],
154   "010"  => [
155               { a => "   62015770 ", i1 => " ", i2 => " ", subfields => ["a", 0] },
156             ],
157   "040"  => [
158               {
159                 a => "DLC",
160                 c => "BOS",
161                 d => "TML",
162                 i1 => " ",
163                 i2 => " ",
164                 subfields => ["a", 0, "c", 0, "d", 0, "d", 1, "d", 2],
165               },
166             ],
167   "041"  => [{ a => "engfre", i1 => 1, i2 => " ", subfields => ["a", 0] }],
168   "049"  => [{ a => "TMLM", i1 => " ", i2 => " ", subfields => ["a", 0] }],
169   "050"  => [
170               {
171                 a => "RC340",
172                 b => ".P513 1806a",
173                 i1 => 0,
174                 i2 => " ",
175                 subfields => ["a", 0, "b", 0],
176               },
177             ],
178   "096"  => [
179               { a => "WM 11 P653t 1962", i1 => " ", i2 => " ", subfields => ["a", 0] },
180             ],
181   100    => [
182               {
183                 a => "Pinel, Philippe,",
184                 d => "1745-1826.",
185                 i1 => 1,
186                 i2 => 0,
187                 subfields => ["a", 0, "d", 0],
188               },
189             ],
190   245    => [
191               {
192                 1 => 2,
193                 a => "A treatise on insanity /",
194                 c => "translated from the French by D. D. Davis, with an introd. by Paul F. Cranefield.",
195                 subfields => [1, 0, "a", 0, "c", 0],
196               },
197             ],
198   260    => [
199               {
200                 a => "New York :",
201                 b => "Published under the auspices of the Library of the New York Academy of Medicine by Hafner Pub. Co.,",
202                 c => "1962.",
203                 i1 => 0,
204                 i2 => " ",
205                 subfields => ["a", 0, "b", 0, "c", 0],
206               },
207             ],
208   300    => [
209               {
210                 a => "lv, 288 p. :",
211                 b => "ill. ;",
212                 c => "21 cm.",
213                 i1 => " ",
214                 i2 => " ",
215                 subfields => ["a", 0, "b", 0, "c", 0],
216               },
217             ],
218   440    => [
219               {
220                 a => "History of medicine ;",
221                 i1 => " ",
222                 i2 => 0,
223                 subfields => ["a", 0, "v", 0],
224                 v => "no. 14",
225               },
226             ],
227   500    => [
228               {
229                 a => "\"Facsimile of the London 1806 edition.\"",
230                 i1 => " ",
231                 i2 => " ",
232                 subfields => ["a", 0],
233               },
234               {
235                 a => "Translation of: Traite medico-philosophique sur l'alienation mentale.",
236                 i1 => " ",
237                 i2 => " ",
238                 subfields => ["a", 0],
239               },
240             ],
241   590    => [
242               {
243                 a => "L21942,WM ,purc,  10.00,rtr,1-78",
244                 i1 => " ",
245                 i2 => " ",
246                 subfields => ["a", 0],
247               },
248             ],
249   650    => [
250               { " " => 2, a => "Psychiatry", subfields => [" ", 0, "a", 0] },
251               { " " => 2, a => "Mental Disorders", subfields => [" ", 0, "a", 0] },
252             ],
253   852    => [
254               {
255                 8 => ".1",
256                 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`",
257                 b => "LU GENCOL",
258                 d => "TWO WEEKS",
259                 h => "WM 11 P653t 1962",
260                 i => 43,
261                 i1 => " ",
262                 i2 => " ",
263                 o => "available",
264                 p => "R04CZ4",
265                 subfields => [8, 0, "b", 0, "h", 0, "t", 0, "p", 0, "i", 0, "d", 0, "o", 0, 9, 0],
266                 t => 1,
267               },
268             ],
269   911    => [{ a => 61, i1 => " ", i2 => " ", subfields => ["a", 0] }],
270   979    => [
271               {
272                 a => "USERS",
273                 b => 19831011,
274                 c => "TAPE",
275                 d => "ARCH",
276                 i1 => " ",
277                 i2 => " ",
278                 subfields => ["a", 0, "b", 0, "c", 0, "d", 0],
279               },
280             ],
281   leader => ["01237cam  2200301Ii 4500"],
282 };
283
284 test_marc_clone( $rec, [
285    [900, " ", " ", "a", "900a", "b", "900b"],
286    [901, " ", " ", "c", "901c"],
287 ] );
288