r1505@llin: dpavlin | 2007-11-04 12:12:20 +0100
[webpac2] / t / 3-normalize.t
index 8f0df01..152be5b 100755 (executable)
@@ -1,25 +1,15 @@
 #!/usr/bin/perl -w
 
 use strict;
-
-use Test::More tests => 322;
-use Test::Exception;
-use Cwd qw/abs_path/;
 use blib;
-use File::Slurp;
-use Getopt::Long;
+
+use Test::More tests => 352;
 
 BEGIN {
+       use_ok( 'WebPAC::Test' );
        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');
 
@@ -28,10 +18,6 @@ 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);
-
 my $rec1 = {
        '200' => [{
                'a' => '200a',
@@ -176,7 +162,9 @@ sub test_s {
 
        ok(! _set_lookup( undef ), "set_lookup(undef)");
 
-       _set_rec( $rec1 );
+       _set_ds( $rec1 );
+
+       is_deeply( get_ds, $rec1, 'get_ds' );
 
        cmp_ok( join(",", rec2('200','a') ), 'eq', '200a,200a*2', 'join rec2' );
        cmp_ok( join(",", rec2('200','a'), rec2('200','b') ), 'eq', '200a,200a*2,200b', 'join rec2 rec2' );
@@ -191,8 +179,16 @@ sub test_s {
 
        # simple list manipulatons
        cmp_ok( join('', prefix('ab', 'cd') ), 'eq', 'abcd', 'prefix');
+       cmp_ok( join('-', prefix('', 'x', 'y') ), 'eq', 'x-y', 'prefix empty');
+       cmp_ok( join('-', prefix(0, 'x', 'y') ), 'eq', '0x-0y', 'prefix 0');
+
        cmp_ok( join('', suffix('xy', 'cd') ), 'eq', 'cdxy', 'suffix');
+       cmp_ok( join('-', suffix('', 'x', 'y' ) ), 'eq', 'x-y', 'suffix empty');
+       cmp_ok( join('-', suffix(0, 'x', 'y' ) ), 'eq', 'x0-y0', 'suffix 0');
+
        cmp_ok( join('', surround('->', '<-', 'a','b','c') ), 'eq', '->a<-->b<-->c<-', 'surround');
+       cmp_ok( join('-', surround('', '', 'x','y','z') ), 'eq', 'x-y-z', 'surround empty');
+       cmp_ok( join('-', surround(0, 0, 'x','y','z') ), 'eq', '0x0-0y0-0z0', 'surround 0 0');
 
        # count
        my @el;
@@ -364,15 +360,15 @@ sub test_s {
 
        #ok(! lookup('non-existent'), 'lookup non-existant' );
 
-       _set_rec( $rec2 );
+       _set_ds( $rec2 );
 
        test_s(qq{
-               tag('Title',
+               search_display('Title',
                        rec('200','a')
                );
        });
        test_s(qq{
-               tag('Who',
+               search_display('Who',
                        join_with(" ",
                                rec('702','a'),
                                rec('702','b')
@@ -423,11 +419,16 @@ sub test_s {
        test_check_ds('display');
 
        _clean_ds();
-       test_s(qq{ tag('something', '42'); });
-       test_s(qq{ tag('empty', ''); });
+       test_s(qq{ search_display('something', '42'); });
+       test_s(qq{ search_display('empty', ''); });
        test_check_ds('search');
        test_check_ds('display');
 
+       _clean_ds();
+       test_s(qq{ sorted('something', '42'); });
+       test_s(qq{ sorted('empty', ''); });
+       test_check_ds('sorted');
+
        _clean_ds();
        my $n = read_file( "$abs_path/data/normalize.pl" );
        $n .= "\n1;\n";
@@ -446,13 +447,12 @@ sub test_s {
        my $rules = qq{ search('mixed', rec('200') ) };
        
        _clean_ds();
-       _set_rec( $rec );
+       _set_ds( $rec );
        test_s( $rules );
        ok($ds = _get_ds(), "get_ds");
        is_deeply( $ds, {
                'mixed' => {
                        'search' => [ '200a', '200b' ],
-                       'tag' => 'mixed'
                }
        }, 'correct get_ds');
 
@@ -464,7 +464,7 @@ sub test_s {
 
        # wird and non-valid structure which is supported anyway
        _clean_ds();
-       _set_rec({
+       _set_ds({
                '200' => [{
                        'a' => '200a',
                },
@@ -476,7 +476,6 @@ sub test_s {
        is_deeply( $ds, {
                'mixed' => {
                        'search' => [ '200a', '200-solo' ],
-                       'tag' => 'mixed'
                }
        }, 'correct get_ds');
 
@@ -515,7 +514,7 @@ sub test_s {
                my ($msg, $rec, $rules, $struct) = @_;
 
                _clean_ds();
-               _set_rec($rec);
+               _set_ds($rec);
 
                foreach my $r (split(/;/, $rules)) {
                        $r =~ s/[\s\n\r]+/ /gs;
@@ -624,7 +623,7 @@ sub test_s {
        sub test_rule {
                my ($msg, $rec, $rule, $struct) = @_;
                _clean_ds();
-               _set_rec( $rec );
+               _set_ds( $rec );
                $rule =~ s/\\/\\/gs;
                my $r = test_s( $rule );
                diag "for ", dump($rec), " got:\n", dump($r), "\nexpect:\n" if ($debug > 1);
@@ -740,15 +739,20 @@ sub test_s {
                'marc_duplicate',
                { '200' => [{ a => 42, b => 'bar', c => 'baz', d => 'bing', e => 'bong' }] },
                qq{
+                       marc_leader('06',42);
+                       marc_leader('11',0);
                        marc('900', 'a', rec('200','a') );
                        marc('900', 'b', rec('200','b') );
                        marc_duplicate;
+                       marc_leader('11',1);
                        marc_remove('900','b');
                        marc('900', 'b', rec('200','c') );
                        marc_duplicate;
+                       marc_leader('11',2);
                        marc_remove('900','b');
                        marc('900', 'b', rec('200','d') );
                        marc_duplicate;
+                       marc_leader('11',3);
                        marc_remove('900','b');
                        marc('900', 'b', rec('200','e') );
                },
@@ -758,6 +762,8 @@ sub test_s {
                ],
        );
 
+       cmp_ok( marc_count(), '==', 3, 'marc_count' );
+
        my $i = 0;
        foreach my $v ( qw/bar baz bing bong/ ) {
 
@@ -769,6 +775,7 @@ sub test_s {
                        [ [ '900', ' ', ' ', 'a', 42, 'b', $v ] ],
                        "MARC copy $i has $v",
                );
+               is_deeply(WebPAC::Normalize::_get_marc_leader(), { '06' => 42, 11 => $i }, "_get_marc_leader copy $i");
                $i++;
        }
 
@@ -827,5 +834,36 @@ sub test_s {
                '^aa1^bb1^aa2^bb2^cc1^cc2',
                '_pack_subfields_hash( $h, 1 )'
        );
+
+       _clean_ds();
+       test_s(qq{
+               marc_fixed('008', 0, 'abcdef');
+               marc_fixed('000', 5, '5');
+               marc_fixed('000', 10, 'A');
+               marc_fixed('000', 0, '0');
+       });
+       ok( my $m = WebPAC::Normalize::_get_marc_fields(), '_get_marc_fields');
+       diag dump( $m );
+       is_deeply( WebPAC::Normalize::_get_marc_fields(),
+               [
+                       ["008", "abcdef"], 
+                       #        0....5....10
+                       ["000", "0    5    A"]
+               ]
+       );
+
+       test_s(qq{ isbn_13( '1558607013', '978-1558607019' ) });
+       test_s(qq{ isbn_10( '1558607013', '978-1558607019' ) });
+
+       is_deeply(
+               [ isbn_13( '1558607013', '978-1558607019' ) ],
+               [ '978-1-55860-701-9', '978-1-55860-701-9', ],
+       'isbn_13' );
+
+       is_deeply(
+               [ isbn_10( '1558607013', '978-1558607019' ) ],
+               [ '1-55860-701-3', '1-55860-701-3' ],
+       'isbn_10' );
+
 }