--- trunk/t/3-normalize.t 2006/07/01 10:19:39 555 +++ trunk/t/3-normalize.t 2006/07/02 21:17:54 566 @@ -2,7 +2,7 @@ use strict; -use Test::More tests => 89; +use Test::More tests => 107; use Test::Exception; use Cwd qw/abs_path/; use blib; @@ -148,9 +148,11 @@ my $eval_t = $t; $eval_t =~ s/[\n\r\s]+/ /gs; $eval_t = substr($eval_t,0,$max_eval_output) . '...' if (length($eval_t) > $max_eval_output); + $eval_t =~ s/\\/\\\\/gs; - eval "$t"; + my $v = eval "$t"; ok(! $@, $@ ? dump_error($@, $t) : "eval: $eval_t"); + $v; } { @@ -397,9 +399,9 @@ test_s($r) if ($r); } - ok(@marc = WebPAC::Normalize::_get_marc_fields(), "_get_marc_fields"); + 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 ); } @@ -459,5 +461,87 @@ [ '900', 1, 0, 'c', '200c-3' ], ], ); + + test_rec_rules( + 'marc_compose', + { '200' => [{ a => 'foo ; bar', b => 42, c => 'baz' }] }, + qq{ + marc_compose('900', + 'c', rec(200,'b'), + 'b', rec(200,'a'), + 'a', rec(200,'c'), + ); + }, + [ + [ '900', ' ', ' ', 'c', 42, 'b', 'foo ; bar', 'a', 'baz' ] + ], + ); + + # + # test rules + # + sub test_rule { + my ($msg, $rec, $rule, $struct) = @_; + _clean_ds(); + _set_rec( $rec ); + $rule =~ s/\\/\\/gs; + my $r = test_s( $rule ); + diag "for ", dump($rec), " got:\n", dump($r), "\nexpect:\n" if ($debug > 1); + diag dump($struct) if ($debug); + is_deeply( $r, $struct, $msg ); + } + + # test split_rec_on + test_rule( + 'split_rec_on', + { '200' => [{ a => 'foo ; bar', b => 42, c => 'baz' }] }, + qq{ split_rec_on('200','a', qr/\\s*;\\s*/, 1) }, + 'foo', + ); + test_rule( + 'split_rec_on', + { '200' => [{ a => 'foo ; bar', b => 42, c => 'baz' }] }, + qq{ split_rec_on('200','a', qr/\\s*;\\s*/, 2) }, + 'bar', + ); + test_rule( + 'split_rec_on no part', + { '200' => [{ a => 'foo ; bar', b => 42, c => 'baz' }] }, + q! split_rec_on('200','a', qr/\\s*;\\s*/) !, + [ 'foo', 'bar' ], + ); + test_rule( + 'split_rec_on no record', + {}, + qq{ split_rec_on('200','a', qr/\\s*;\\s*/) }, + '', + ); + + test_rec_rules( + 'marc_compose+split_rec_on', + { '200' => [{ a => 'foo ! bar', b => 42, c => 'baz' }] }, + qq{ + marc_compose('900', + 'a', split_rec_on(200,'a', qr/\\s*!\\s*/, 1), + 'c', rec(200,'c'), + 'a', split_rec_on(200,'a', qr/\\s*!\\s*/, 2), + 'b', rec(200,'b'), + ); + }, + [ + [ '900', ' ', ' ', + 'a', 'foo', + 'c', 'baz', + 'a', 'bar', + 'b', 42, + ] + ], + ); + + cmp_ok(marc_leader('06',42), '==', 42, 'marc_leader'); + cmp_ok(marc_leader('11',5), '==', 5, 'marc_leader'); + ok(marc_leader(), 'marc_leader get'); + diag "leader: ", dump(marc_leader()) if ($debug); + is_deeply(marc_leader(), { '06' => 42, 11 => 5 }, "marc_leader full"); }