/[webpac2]/trunk/t/3-normalize.t
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/t/3-normalize.t

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 811 by dpavlin, Sun Apr 1 21:47:40 2007 UTC revision 1013 by dpavlin, Wed Nov 7 11:54:34 2007 UTC
# Line 1  Line 1 
1  #!/usr/bin/perl -w  #!/usr/bin/perl -w
2    
3  use strict;  use strict;
   
 use Test::More tests => 322;  
 use Test::Exception;  
 use Cwd qw/abs_path/;  
4  use blib;  use blib;
5  use File::Slurp;  
6  use Getopt::Long;  use Test::More tests => 351;
7    
8  BEGIN {  BEGIN {
9            use_ok( 'WebPAC::Test' );
10          use_ok( 'WebPAC::Normalize' );          use_ok( 'WebPAC::Normalize' );
11  }  }
12    
 use Data::Dump qw/dump/;  
   
 my $debug = 0;  
 GetOptions(  
         "debug+", \$debug  
 );  
   
13  cmp_ok(_debug(1), '==', 1, '_debug level');  cmp_ok(_debug(1), '==', 1, '_debug level');
14  cmp_ok(_debug(0), '==', 0, '_debug level');  cmp_ok(_debug(0), '==', 0, '_debug level');
15    
# Line 28  if ($debug > 2) { Line 18  if ($debug > 2) {
18          diag "debug level for WebPAC::Normalize is ", _debug( $debug - 2 );          diag "debug level for WebPAC::Normalize is ", _debug( $debug - 2 );
19  }  }
20    
 ok(my $abs_path = abs_path($0), "abs_path");  
 $abs_path =~ s#/[^/]*$#/#;  
 diag "abs_path: $abs_path" if ($debug);  
   
21  my $rec1 = {  my $rec1 = {
22          '200' => [{          '200' => [{
23                  'a' => '200a',                  'a' => '200a',
# Line 176  sub test_s { Line 162  sub test_s {
162    
163          ok(! _set_lookup( undef ), "set_lookup(undef)");          ok(! _set_lookup( undef ), "set_lookup(undef)");
164    
165          _set_rec( $rec1 );          _set_ds( $rec1 );
166    
167          cmp_ok( join(",", rec2('200','a') ), 'eq', '200a,200a*2', 'join rec2' );          cmp_ok( join(",", rec2('200','a') ), 'eq', '200a,200a*2', 'join rec2' );
168          cmp_ok( join(",", rec2('200','a'), rec2('200','b') ), 'eq', '200a,200a*2,200b', 'join rec2 rec2' );          cmp_ok( join(",", rec2('200','a'), rec2('200','b') ), 'eq', '200a,200a*2,200b', 'join rec2 rec2' );
# Line 191  sub test_s { Line 177  sub test_s {
177    
178          # simple list manipulatons          # simple list manipulatons
179          cmp_ok( join('', prefix('ab', 'cd') ), 'eq', 'abcd', 'prefix');          cmp_ok( join('', prefix('ab', 'cd') ), 'eq', 'abcd', 'prefix');
180            cmp_ok( join('-', prefix('', 'x', 'y') ), 'eq', 'x-y', 'prefix empty');
181            cmp_ok( join('-', prefix(0, 'x', 'y') ), 'eq', '0x-0y', 'prefix 0');
182    
183          cmp_ok( join('', suffix('xy', 'cd') ), 'eq', 'cdxy', 'suffix');          cmp_ok( join('', suffix('xy', 'cd') ), 'eq', 'cdxy', 'suffix');
184            cmp_ok( join('-', suffix('', 'x', 'y' ) ), 'eq', 'x-y', 'suffix empty');
185            cmp_ok( join('-', suffix(0, 'x', 'y' ) ), 'eq', 'x0-y0', 'suffix 0');
186    
187          cmp_ok( join('', surround('->', '<-', 'a','b','c') ), 'eq', '->a<-->b<-->c<-', 'surround');          cmp_ok( join('', surround('->', '<-', 'a','b','c') ), 'eq', '->a<-->b<-->c<-', 'surround');
188            cmp_ok( join('-', surround('', '', 'x','y','z') ), 'eq', 'x-y-z', 'surround empty');
189            cmp_ok( join('-', surround(0, 0, 'x','y','z') ), 'eq', '0x0-0y0-0z0', 'surround 0 0');
190    
191          # count          # count
192          my @el;          my @el;
# Line 364  sub test_s { Line 358  sub test_s {
358    
359          #ok(! lookup('non-existent'), 'lookup non-existant' );          #ok(! lookup('non-existent'), 'lookup non-existant' );
360    
361          _set_rec( $rec2 );          _set_ds( $rec2 );
362    
363          test_s(qq{          test_s(qq{
364                  tag('Title',                  search_display('Title',
365                          rec('200','a')                          rec('200','a')
366                  );                  );
367          });          });
368          test_s(qq{          test_s(qq{
369                  tag('Who',                  search_display('Who',
370                          join_with(" ",                          join_with(" ",
371                                  rec('702','a'),                                  rec('702','a'),
372                                  rec('702','b')                                  rec('702','b')
# Line 423  sub test_s { Line 417  sub test_s {
417          test_check_ds('display');          test_check_ds('display');
418    
419          _clean_ds();          _clean_ds();
420          test_s(qq{ tag('something', '42'); });          test_s(qq{ search_display('something', '42'); });
421          test_s(qq{ tag('empty', ''); });          test_s(qq{ search_display('empty', ''); });
422          test_check_ds('search');          test_check_ds('search');
423          test_check_ds('display');          test_check_ds('display');
424    
425          _clean_ds();          _clean_ds();
426            test_s(qq{ sorted('something', '42'); });
427            test_s(qq{ sorted('empty', ''); });
428            test_check_ds('sorted');
429    
430            _clean_ds();
431          my $n = read_file( "$abs_path/data/normalize.pl" );          my $n = read_file( "$abs_path/data/normalize.pl" );
432          $n .= "\n1;\n";          $n .= "\n1;\n";
433          #diag "normalize code:\n$n\n";          #diag "normalize code:\n$n\n";
# Line 446  sub test_s { Line 445  sub test_s {
445          my $rules = qq{ search('mixed', rec('200') ) };          my $rules = qq{ search('mixed', rec('200') ) };
446                    
447          _clean_ds();          _clean_ds();
448          _set_rec( $rec );          _set_ds( $rec );
449          test_s( $rules );          test_s( $rules );
450          ok($ds = _get_ds(), "get_ds");          ok($ds = _get_ds(), "get_ds");
451          is_deeply( $ds, {          is_deeply( $ds, {
452                  'mixed' => {                  'mixed' => {
453                          'search' => [ '200a', '200b' ],                          'search' => [ '200a', '200b' ],
                         'tag' => 'mixed'  
454                  }                  }
455          }, 'correct get_ds');          }, 'correct get_ds');
456    
# Line 464  sub test_s { Line 462  sub test_s {
462    
463          # wird and non-valid structure which is supported anyway          # wird and non-valid structure which is supported anyway
464          _clean_ds();          _clean_ds();
465          _set_rec({          _set_ds({
466                  '200' => [{                  '200' => [{
467                          'a' => '200a',                          'a' => '200a',
468                  },                  },
# Line 476  sub test_s { Line 474  sub test_s {
474          is_deeply( $ds, {          is_deeply( $ds, {
475                  'mixed' => {                  'mixed' => {
476                          'search' => [ '200a', '200-solo' ],                          'search' => [ '200a', '200-solo' ],
                         'tag' => 'mixed'  
477                  }                  }
478          }, 'correct get_ds');          }, 'correct get_ds');
479    
# Line 515  sub test_s { Line 512  sub test_s {
512                  my ($msg, $rec, $rules, $struct) = @_;                  my ($msg, $rec, $rules, $struct) = @_;
513    
514                  _clean_ds();                  _clean_ds();
515                  _set_rec($rec);                  _set_ds($rec);
516    
517                  foreach my $r (split(/;/, $rules)) {                  foreach my $r (split(/;\s*$/, $rules)) {
518                          $r =~ s/[\s\n\r]+/ /gs;                          $r =~ s/[\s\n\r]+/ /gs;
519                          $r =~ s/^\s+//gs;                          $r =~ s/^\s+//gs;
520                          $r =~ s/\s+$//gs;                          $r =~ s/\s+$//gs;
521                            diag "rule: $r" if $debug;
522                          test_s($r) if ($r);                          test_s($r) if ($r);
523                  }                  }
524    
# Line 624  sub test_s { Line 622  sub test_s {
622          sub test_rule {          sub test_rule {
623                  my ($msg, $rec, $rule, $struct) = @_;                  my ($msg, $rec, $rule, $struct) = @_;
624                  _clean_ds();                  _clean_ds();
625                  _set_rec( $rec );                  _set_ds( $rec );
626                  $rule =~ s/\\/\\/gs;                  $rule =~ s/\\/\\/gs;
627                  my $r = test_s( $rule );                  my $r = test_s( $rule );
628                  diag "for ", dump($rec), " got:\n", dump($r), "\nexpect:\n" if ($debug > 1);                  diag "for ", dump($rec), " got:\n", dump($r), "\nexpect:\n" if ($debug > 1);
# Line 740  sub test_s { Line 738  sub test_s {
738                  'marc_duplicate',                  'marc_duplicate',
739                  { '200' => [{ a => 42, b => 'bar', c => 'baz', d => 'bing', e => 'bong' }] },                  { '200' => [{ a => 42, b => 'bar', c => 'baz', d => 'bing', e => 'bong' }] },
740                  qq{                  qq{
741                            marc_leader('06',42);
742                            marc_leader('11',0);
743                          marc('900', 'a', rec('200','a') );                          marc('900', 'a', rec('200','a') );
744                          marc('900', 'b', rec('200','b') );                          marc('900', 'b', rec('200','b') );
745                          marc_duplicate;                          marc_duplicate;
746                            marc_leader('11',1);
747                          marc_remove('900','b');                          marc_remove('900','b');
748                          marc('900', 'b', rec('200','c') );                          marc('900', 'b', rec('200','c') );
749                          marc_duplicate;                          marc_duplicate;
750                            marc_leader('11',2);
751                          marc_remove('900','b');                          marc_remove('900','b');
752                          marc('900', 'b', rec('200','d') );                          marc('900', 'b', rec('200','d') );
753                          marc_duplicate;                          marc_duplicate;
754                            marc_leader('11',3);
755                          marc_remove('900','b');                          marc_remove('900','b');
756                          marc('900', 'b', rec('200','e') );                          marc('900', 'b', rec('200','e') );
757                  },                  },
# Line 758  sub test_s { Line 761  sub test_s {
761                  ],                  ],
762          );          );
763    
764            cmp_ok( marc_count(), '==', 3, 'marc_count' );
765    
766          my $i = 0;          my $i = 0;
767          foreach my $v ( qw/bar baz bing bong/ ) {          foreach my $v ( qw/bar baz bing bong/ ) {
768    
# Line 769  sub test_s { Line 774  sub test_s {
774                          [ [ '900', ' ', ' ', 'a', 42, 'b', $v ] ],                          [ [ '900', ' ', ' ', 'a', 42, 'b', $v ] ],
775                          "MARC copy $i has $v",                          "MARC copy $i has $v",
776                  );                  );
777                    is_deeply(WebPAC::Normalize::_get_marc_leader(), { '06' => 42, 11 => $i }, "_get_marc_leader copy $i");
778                  $i++;                  $i++;
779          }          }
780    
# Line 827  sub test_s { Line 833  sub test_s {
833                  '^aa1^bb1^aa2^bb2^cc1^cc2',                  '^aa1^bb1^aa2^bb2^cc1^cc2',
834                  '_pack_subfields_hash( $h, 1 )'                  '_pack_subfields_hash( $h, 1 )'
835          );          );
836    
837            _clean_ds();
838            test_s(qq{
839                    marc_fixed('008', 0, 'abcdef');
840                    marc_fixed('000', 5, '5');
841                    marc_fixed('000', 10, 'A');
842                    marc_fixed('000', 0, '0');
843            });
844            ok( my $m = WebPAC::Normalize::_get_marc_fields(), '_get_marc_fields');
845            diag dump( $m );
846            is_deeply( WebPAC::Normalize::_get_marc_fields(),
847                    [
848                            ["008", "abcdef"],
849                            #        0....5....10
850                            ["000", "0    5    A"]
851                    ]
852            );
853    
854            test_s(qq{ isbn_13( '1558607013', '978-1558607019' ) });
855            test_s(qq{ isbn_10( '1558607013', '978-1558607019' ) });
856    
857            is_deeply(
858                    [ isbn_13( '1558607013', '978-1558607019' ) ],
859                    [ '978-1-55860-701-9', '978-1-55860-701-9', ],
860            'isbn_13' );
861    
862            is_deeply(
863                    [ isbn_10( '1558607013', '978-1558607019' ) ],
864                    [ '1-55860-701-3', '1-55860-701-3' ],
865            'isbn_10' );
866    
867            # marc_template
868    
869            test_rec_rules(
870                    'marc_template',
871                    {
872                            '225' => [{
873                                    'a' => 'a-1-1',
874                                    'i' => 'i-1-1',
875                                    'v' => 'v-1-1',
876                                    'w' => 'w-1-1',
877                                    'h' => 'h-1-1',
878                                    'x' => 'x-1-1',
879                            },{
880                                    'a' => 'a-2-1',
881                                    'v' => 'v-2-1',
882                                    'i' => 'i-2-1',
883                            },{
884                                    'a' => 'a-3-1',
885                                    'i' => 'i-3-1',
886                                    'v' => 'v-3-1',
887                            },{
888                                    'a' => 'a-4-1',
889                                    'v' => 'v-4-1',
890                                    'i' => 'i-4-1',
891                                    'w' => 'w-4-1',
892                            }],
893                    },
894                    qq{
895                            marc_template(
896                                    from => 225, to => 440,
897                                    subfields_rename => [
898                                            'a' => 'a',
899                                            'x' => 'x',
900                                            'v' => 'v',
901                                            'h' => 'n',
902                                            'i' => 'p',
903                                            'w' => 'v',
904                                    ],
905                                    marc_template => [
906                                            'a, |x ; |v. |n, |p ; |v',
907                                            'a ; |v. |p ; |v',
908                                            'a. |p ; |v',
909                                    ],
910                            );
911                    },
912                    [
913                            [440, " ", " ",
914                                    ["a", "a-1-1"],
915                                    ["x", "x-1-1"],
916                                    ["v", "v-1-1"],
917                                    ["n", "h-1-1"],
918                                    ["p", "i-1-1"],
919                                    ["v", "w-1-1"],
920                            ],
921                            [440, " ", " ", ["a", "a-2-1"], ["p", "i-2-1"], ["v", "v-2-1"]],
922                            [440, " ", " ", ["a", "a-3-1"], ["p", "i-3-1"], ["v", "v-3-1"]],
923                            [440, " ", " ",
924                                    ["a", "a-4-1"],
925                                    ["v", "v-4-1"],
926                                    ["p", "i-4-1"],
927                                    ["v", "w-4-1"],
928                            ],
929                    ],
930            );
931  }  }
932    

Legend:
Removed from v.811  
changed lines
  Added in v.1013

  ViewVC Help
Powered by ViewVC 1.1.26