--- trunk/t/3-normalize.t 2006/07/01 10:19:39 555 +++ trunk/t/3-normalize.t 2006/07/02 16:14:41 562 @@ -2,7 +2,7 @@ use strict; -use Test::More tests => 89; +use Test::More tests => 99; 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,69 @@ [ '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_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, + ] + ], + ); }