diff options
author | Robin Sheat <robin@catalyst.net.nz> | 2014-10-17 15:38:33 +1300 |
---|---|---|
committer | Robin Sheat <robin@catalyst.net.nz> | 2014-10-17 15:38:33 +1300 |
commit | 25958f838fa416771ab6eaee9a37df8aecd3f7d4 (patch) | |
tree | 21591ea41df05766c18dd0e1849f3763e7080a88 /t |
Import original source of MARC-Transform 0.003005
Diffstat (limited to 't')
-rw-r--r-- | t/test.t | 836 |
1 files changed, 836 insertions, 0 deletions
diff --git a/t/test.t b/t/test.t new file mode 100644 index 0000000..2d30d95 --- /dev/null +++ b/t/test.t @@ -0,0 +1,836 @@ +#!/usr/bin/perl +use strict; +use warnings; +use lib qw( lib ../lib ); +use Cwd; +use YAML; +use Test::More 'no_plan'; +BEGIN { + use_ok( 'MARC::Transform' ); +} + +sub recordtostring { + my ($record) = @_; + my $string=""; + my $finalstring=$record->leader; + my %tag_names = map( { $$_{_tag} => 1 } $record->fields); + my @order = qw/0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z/; + foreach my $tag(sort({ $a cmp $b } keys(%tag_names))) + { + my @fields=$record->field($tag); + foreach my $field(@fields) + { + $string.="|#f#|$tag:"; + if ($field->is_control_field()) + { + $string.=$field->data(); + } + else + { + $string.=$field->indicator(1); + $string.=$field->indicator(2); + foreach my $key (@order) + { + foreach my $subfield (sort({ $a cmp $b } $field->subfield($key))) + { + $string.="|$key:".$subfield; + } + } + } + } + } + my @arec = split(/\|#f#\|/,$string);#warn Data::Dumper::Dumper @arec; + foreach my $tempstring (sort({ $a cmp $b } @arec)) + { + $finalstring.="||$tempstring"; + } + return $finalstring; +} + +#test 2 +my %mtest; +$mtest{"var"}="a string"; +my $record2a = MARC::Record->new(); +$record2a->leader('optionnal leader'); +$record2a->insert_fields_ordered( MARC::Field->new( '005', 'controlfield_content' )); +$record2a->insert_fields_ordered( MARC::Field->new( '008', 'controlfield_content8b' )); +$record2a->insert_fields_ordered( MARC::Field->new( '008', 'controlfield_content8a' )); +$record2a->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'a' => 'foao', 'b' => '1', 'b' => 'baoar', 'c' => 'big') ); +$record2a->insert_fields_ordered( MARC::Field->new( '501', '', '', 'c' => '1') ); +$record2a->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'I want "$"') ); +$record2a->insert_fields_ordered( MARC::Field->new( '106', '', '', 'a' => 'VaLuE') ); +$record2a->insert_fields_ordered( MARC::Field->new( '503', '', '', 'a' => 'fee', 'a' => 'babar') ); +$record2a->insert_fields_ordered( MARC::Field->new( '504', '', '', 'a' => 'zut', 'a' => 'sisi') ); +$record2a->insert_fields_ordered( MARC::Field->new( '604', '', '', 'a' => 'foo', 'a' => 'foo', 'b' => 'bar', 'c' => 'truc') ); +$record2a->insert_fields_ordered( MARC::Field->new( '401', '', '', 'a' => 'afooa') ); +$record2a->insert_fields_ordered( MARC::Field->new( '402', '1', '', 'a' => 'a402a1') ); +$record2a->insert_fields_ordered( MARC::Field->new( '402', '', '2', 'a' => 'a402a2') ); +my $record2b = MARC::Record->new(); +$record2b->leader('optionnal leader'); +$record2b->insert_fields_ordered( MARC::Field->new( '005', 'controlfield_content' )); +$record2b->insert_fields_ordered( MARC::Field->new( '008', 'controlfield_content8b' )); +$record2b->insert_fields_ordered( MARC::Field->new( '008', 'controlfield_content8a' )); +$record2b->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'a' => 'foao', 'b' => '1', 'b' => 'baoar', 'c' => 'big') ); +$record2b->insert_fields_ordered( MARC::Field->new( '501', '', '', 'c' => '1') ); +$record2b->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'I want "$"') ); +$record2b->insert_fields_ordered( MARC::Field->new( '106', '', '', 'a' => 'VaLuE') ); +$record2b->insert_fields_ordered( MARC::Field->new( '503', '', '', 'a' => 'fee', 'a' => 'babar') ); +$record2b->insert_fields_ordered( MARC::Field->new( '504', '', '', 'a' => 'zut', 'a' => 'sisi') ); +$record2b->insert_fields_ordered( MARC::Field->new( '604', '', '', 'a' => 'foo', 'a' => 'foo', 'b' => 'bar', 'c' => 'truc') ); +$record2b->insert_fields_ordered( MARC::Field->new( '401', '', '', 'a' => 'afooa') ); +$record2b->insert_fields_ordered( MARC::Field->new( '402', '1', '', 'a' => 'a402a1') ); +$record2b->insert_fields_ordered( MARC::Field->new( '402', '', '2', 'a' => 'a402a2') ); +#print "--init record--\n". $record1->as_formatted; +my $yaml2 = '--- +condition : $f501a eq "foo" +create : + f502a : this is the value of a subfield of a new 502 field +--- +condition : $f401a=~/foo/ +create : + b : new value of the 401 conditions field + f600 : + a : + - first a subfield of this new 600 field + - second a subfield of this new 600 field + - $$mth{"var"} + b : the 600b value +execute : \&reencodeRecordtoUtf8() +--- +condition : $f502a eq "I want #_dbquote_##_dollars_##_dbquote_#" +create : + f605a : "#_dbquote_#$f502a#_dbquote_# contain a #_dollars_# sign" +--- +- + condition : $f501a =~/foo/ and $f503a =~/bar/ + forceupdate : + $f503b : mandatory b in condition\'s field + f005_ : mandatory 005 + f006_ : \&return_record_encoding() + f700 : + a : the a subfield of this mandatory 700 field + b : \&sub1("$f503a") + forceupdatefirst : + $f501b : update only the first b in condition\'s field 501 +- + condition : $f501a =~/foo/ + execute : \&warnfoo("f501a contain foo") +- + subs : > + sub return_record_encoding { $record->encoding(); } + sub sub1 { my $string = shift;$string =~ s/a/e/g;return $string; } + sub warnfoo { my $string = shift;warn $string; } +--- +- + condition : $f501b2 eq "o" + update : + c : updated value of all c in condition\'s field + f504a : updated value of all 504a if exists + f604 : + b : \&LUT("$this") + c : \&LUT("NY","cities") + updatefirst : + f604a : update only the first a in 604 +- + condition : $f501c eq "1" + delete : $f501 +- + LUT : + 1 : first + 2 : second + bar : openbar +--- +delete : + - f401a + - f005 +--- +condition : $ldr2 eq "t" +execute : \&SetRecordToLowerCase($record) +--- +condition : $f008_ eq "controlfield_content8b" +duplicatefield : + - $f008 > f007 + - f402 > f602 +delete : f402 +--- +global_subs: > + sub reencodeRecordtoUtf8 { + $record->encoding( \'UTF-8\' ); + } + sub warnfee { + my $string = shift;warn $string; + } +global_LUT: + cities: + NY : New York + SF : San Fransisco + numbers: + 1 : one + 2 : two +'; +$record2a = MARC::Transform->new($record2a,$yaml2,\%mtest); +$record2b = MARC::Transform->new($record2b,$yaml2,\%mtest); +#print "\n--transformed record--\n". $record2b->as_formatted ."\n"; +my $v2aa=recordtostring($record2a); +my $v2ba=recordtostring($record2b); +my $v2b='optionnalaleader||||006:UTF-8||007:controlfield_content8b||008:controlfield_content8a||008:controlfield_content8b||106: |a:VaLuE||401: |b:new value of the 401 conditions field||501: |a:foao|a:foo|b:baoar|b:update only the first b in condition\'s field 501|c:updated value of all c in condition\'s field||501: |c:1||502: |a:I want "$"||502: |a:this is the value of a subfield of a new 502 field||503: |a:babar|a:fee|b:mandatory b in condition\'s field||504: |a:updated value of all 504a if exists|a:updated value of all 504a if exists||600: |a:a string|a:first a subfield of this new 600 field|a:second a subfield of this new 600 field|b:the 600b value||602: 2|a:a402a2||602:1 |a:a402a1||604: |a:foo|a:update only the first a in 604|b:openbar|c:New York||605: |a:"I want "$"" contain a $ sign||700: |a:the a subfield of this mandatory 700 field|b:beber'; +is( $v2aa.$v2ba, $v2b.$v2b, "" ); + +#test 3 +my $record3 = MARC::Record->new(); +$record3->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo') ); +#print "--init record--\n". $record3->as_formatted; +my $yaml3 = '--- +condition : $f501a or $f502a +create : + f600a : aaa +'; +$record3 = MARC::Transform->new($record3,$yaml3); +#print "\n--transformed record--\n". $record2->as_formatted ."\n"; +my $v3a=recordtostring($record3); +my $v3b=" ||||501: |a:foo||600: |a:aaa"; +is($v3a,$v3b, "" ); + +#test 4 +my $record4 = MARC::Record->new(); +$record4->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'b' => '1', 'c' => 'bar') ); +#print "--init record--\n". $record4->as_formatted; +my $yaml4 = ' +--- +condition : $f501a eq "foo" +create : + f502a : value of a new 502a +update : + $f501b : \&LUT("$this") +LUT : + 1 : first + 2 : second value in this LUT (LookUp Table) +--- +delete : f501c +'; +$record4 = MARC::Transform->new($record4,$yaml4); +#print "\n--transformed record--\n". $record3->as_formatted ."\n"; +my $v4a=recordtostring($record4); +my $v4b=" ||||501: |a:foo|b:first||502: |a:value of a new 502a"; +is($v4a,$v4b,""); + +#test 5 +my $record5 = MARC::Record->new(); +$record5->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'b' => '1', 'c' => 'bar') ); +#print "--init record--\n". $record5->as_formatted; +my $yaml5 = ' +--- +condition : $f501a eq "foo" +create : + b : new subfield value of the conditions field + f502a : this is the value of a subfield of a new 502 field + f502b : + - this is the first value of two \'b\' of another new 502 + - this is the 2nd value of two \'b\' of another new 502 + f600 : + a : + - first a subfield of this new 600 field + - second a subfield of this new 600 field + b : the 600b value +'; +$record5 = MARC::Transform->new($record5,$yaml5); +#print "\n--transformed record--\n". $record5->as_formatted ."\n"; +my $v5a=recordtostring($record5); +my $v5b=" ||||501: |a:foo|b:1|b:new subfield value of the conditions field|c:bar||502: |a:this is the value of a subfield of a new 502 field||502: |b:this is the 2nd value of two 'b' of another new 502|b:this is the first value of two 'b' of another new 502||600: |a:first a subfield of this new 600 field|a:second a subfield of this new 600 field|b:the 600b value"; +is($v5a,$v5b,""); + +#test 6 +my $record6 = MARC::Record->new(); +$record6->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'b' => '1', 'c' => 'bar') ); +$record6->insert_fields_ordered( MARC::Field->new( '502', '', '', 'b' => 'truc', 'c' => 'bidule') ); +$record6->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'poto') ); +$record6->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'first a', 'a' => 'second a', 'b' => 'bbb', 'c' => 'ccc1', 'c' => 'ccc2') ); +#print "--init record--\n". $record6->as_formatted; +my $yaml6 = ' +--- +condition : $f502a eq "second a" +update : + b : updated value of all \'b\' subfields in the condition field + f502c : updated value of all \'c\' subfields into all \'502\' fields + f501 : + a : updated value of all \'a\' subfields into all \'501\' fields + b : $f502a is the value of 502a conditionnal field +'; +$record6 = MARC::Transform->new($record6,$yaml6); +#print "\n--transformed record--\n". $record6->as_formatted ."\n"; +my $v6a=recordtostring($record6); +my $v6b=" ||||501: |a:updated value of all 'a' subfields into all '501' fields|b:second a is the value of 502a conditionnal field|c:bar||502: |a:first a|a:second a|b:updated value of all 'b' subfields in the condition field|c:updated value of all 'c' subfields into all '502' fields|c:updated value of all 'c' subfields into all '502' fields||502: |a:poto||502: |b:truc|c:updated value of all 'c' subfields into all '502' fields"; +is($v6a,$v6b,""); + +#test 7 +my $record7 = MARC::Record->new(); +$record7->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'b' => '1', 'c' => 'bar') ); +$record7->insert_fields_ordered( MARC::Field->new( '502', '', '', 'b' => 'truc', 'c' => 'bidule') ); +$record7->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'poto') ); +$record7->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'first a', 'a' => 'second a', 'b' => 'bbb', 'c' => 'cc1', 'c' => 'cc2') ); +#print "--init record--\n". $record7->as_formatted; +my $yaml7 = ' +--- +condition : $f502a eq "second a" +forceupdate : + b : value of \'b\' subfields in the condition field + f502c : value of \'502c\' + f503 : + a : value of \'503a\' + b : $f502a is the value of 502a conditionnal field +'; +$record7 = MARC::Transform->new($record7,$yaml7); +#print "\n--transformed record--\n". $record7->as_formatted ."\n"; +my $v7a=recordtostring($record7); +my $v7b=" ||||501: |a:foo|b:1|c:bar||502: |a:first a|a:second a|b:value of 'b' subfields in the condition field|c:value of '502c'|c:value of '502c'||502: |a:poto|c:value of '502c'||502: |b:truc|c:value of '502c'||503: |a:value of '503a'|b:second a is the value of 502a conditionnal field"; +is($v7a,$v7b,""); + +#test 8 +my $record8 = MARC::Record->new(); +$record8->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'b' => '1', 'c' => 'bar') ); +$record8->insert_fields_ordered( MARC::Field->new( '502', '', '', 'b' => 'truc', 'c' => 'bidule') ); +$record8->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'poto') ); +$record8->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'first a', 'a' => 'second a', 'b' => 'bbb', 'c' => 'cc1', 'c' => 'cc2') ); +#print "--init record--\n". $record8->as_formatted; +my $yaml8 = ' +--- +condition : $f502a eq "second a" +forceupdatefirst : + b : value of \'b\' subfields in the condition field + f502c : value of \'502c\' + f503 : + a : value of \'503a\' + b : $f502a is the value of 502a conditionnal field +'; +$record8 = MARC::Transform->new($record8,$yaml8); +#print "\n--transformed record--\n". $record8->as_formatted ."\n"; +my $v8a=recordtostring($record8); +my $v8b=" ||||501: |a:foo|b:1|c:bar||502: |a:first a|a:second a|b:value of 'b' subfields in the condition field|c:cc2|c:value of '502c'||502: |a:poto|c:value of '502c'||502: |b:truc|c:value of '502c'||503: |a:value of '503a'|b:second a is the value of 502a conditionnal field"; +is($v8a,$v8b,""); + +#test 9 +my $record9 = MARC::Record->new(); +$record9->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'bar', 'b' => 'bb1', 'b' => 'bb2') ); +$record9->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo') ); +$record9->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'pata') ); +$record9->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'poto') ); +$record9->insert_fields_ordered( MARC::Field->new( '503', '', '', 'a' => 'pata') ); +$record9->insert_fields_ordered( MARC::Field->new( '504', '', '', 'a' => 'ata1', 'a' => 'ata2', 'b' => 'tbbt') ); +#print "--init record--\n". $record9->as_formatted; +my $yaml9 = ' +--- +condition : $f501a eq "foo" +delete : $f501 +--- +condition : $f501a eq "bar" +delete : b +--- +delete : f502 +--- +delete : + - f503 + - f504a +'; +$record9 = MARC::Transform->new($record9,$yaml9); +#print "\n--transformed record--\n". $record9->as_formatted ."\n"; +my $v9a=recordtostring($record9); +my $v9b=" ||||501: |a:bar||504: |b:tbbt"; +is($v9a,$v9b,""); + +#test 10 +my $record10 = MARC::Record->new(); +$record10->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'b' => '1', 'c' => 'bar') ); +$record10->insert_fields_ordered( MARC::Field->new( '502', '', '', 'b' => 'truc', 'c' => 'bidule') ); +$record10->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'poto') ); +$record10->insert_fields_ordered( MARC::Field->new( '502', '', '', 'a' => 'first a', 'a' => 'second a', 'b' => 'bbb', 'c' => 'ccc1', 'c' => 'ccc2') ); +#print "--init record--\n". $record10->as_formatted; +my $yaml10 = ' +--- +condition : $f502a eq "second a" +updatefirst : + b : updated value of first \'b\' subfields in the condition field + f502c : updated value of first \'c\' subfields into all \'502\' fields + f501 : + a : updated value of first \'a\' subfields into all \'501\' fields + b : $f502a is the value of 502a conditionnal field +'; +$record10 = MARC::Transform->new($record10,$yaml10); +#print "\n--transformed record--\n". $record10->as_formatted ."\n"; +my $v10a=recordtostring($record10); +my $v10b=" ||||501: |a:updated value of first 'a' subfields into all '501' fields|b:second a is the value of 502a conditionnal field|c:bar||502: |a:first a|a:second a|b:updated value of first 'b' subfields in the condition field|c:ccc2|c:updated value of first 'c' subfields into all '502' fields||502: |a:poto||502: |b:truc|c:updated value of first 'c' subfields into all '502' fields"; +is($v10a,$v10b,""); + +#test 11 +my $record11 = MARC::Record->new(); +$record11->insert_fields_ordered( MARC::Field->new( '005', 'controlfield_content1' )); +$record11->insert_fields_ordered( MARC::Field->new( '005', 'controlfield_content2' )); +$record11->insert_fields_ordered( MARC::Field->new( '008', 'controlfield_contenta' )); +$record11->insert_fields_ordered( MARC::Field->new( '008', 'controlfield_contentb' )); +$record11->insert_fields_ordered( MARC::Field->new( '501', '1', '2', 'a' => 'bar', 'b' => 'bb1', 'b' => 'bb2') ); +$record11->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo') ); +#print "--init record--\n". $record11->as_formatted; +my $yaml11 = ' +--- +condition : $f008_ eq "controlfield_contentb" +duplicatefield : $f008 > f007 +--- +condition : $f501a eq "bar" +duplicatefield : $f501 > f400 +--- +condition : $f501a eq "foo" +duplicatefield : + - f501 > f401 + - $f501 > f402 + - f005 > f006 +'; +$record11 = MARC::Transform->new($record11,$yaml11); +#print "\n--transformed record--\n". $record11->as_formatted ."\n"; +my $v11a=recordtostring($record11); +my $v11b=" ||||005:controlfield_content1||005:controlfield_content2||006:controlfield_content1||006:controlfield_content2||007:controlfield_contentb||008:controlfield_contenta||008:controlfield_contentb||400:12|a:bar|b:bb1|b:bb2||401: |a:foo||401:12|a:bar|b:bb1|b:bb2||402: |a:foo||501: |a:foo||501:12|a:bar|b:bb1|b:bb2"; +is($v11a,$v11b,""); + +#test 12 +my $record12 = MARC::Record->new(); +$record12->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'b' => 'boo', 'd' => 'doo') ); +#print "--init record--\n". $record12->as_formatted; +my $yaml12 = ' +--- +- + condition : $f501a eq "foo" + create : + c : \&fromo2e("$f501a") + update : + d : the value of this 501d is $this + b : \&fromo2e("$this") +- + subs: > + sub fromo2e { my $string=shift; $string =~ s/o/e/g; $string; } +'; +$record12 = MARC::Transform->new($record12,$yaml12); +#print "\n--transformed record--\n". $record12->as_formatted ."\n"; +my $v12a=recordtostring($record12); +my $v12b=" ||||501: |a:foo|b:bee|c:fee|d:the value of this 501d is doo"; +is($v12a,$v12b,""); + +#test 13 +my $record13 = MARC::Record->new(); +$record13->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'b' => '8/13/10', 'c' => 'boo', 'd' => '40,00') ); +#print "--init record--\n". $record13->as_formatted; +my $yaml13 = ' +--- +- + condition : $f501a eq "foo" and defined $f501d + update : + b : \&convertbaddate("$this") + c : \&trim("$f501d") +- + subs: > + sub convertbaddate { + #this function convert date like "21/2/98" to "1998-02-28" + my $in = shift; + if ($in =~/^(\d{1,2})\/(\d{1,2})\/(\d{2}).*/) + { + my $day=$1; + my $month=$2; + my $year=$3; + if ($day=~m/^\d$/) {$day="0".$day;} + if ($month=~m/^\d$/) {$month="0".$month;} + if (int($year)>13) + {$year="19".$year;} + else {$year="20".$year;} + return "$year-$month-$day"; + } + else + { + return $in; + } + } + + sub trim { + # This function removes ",00" at the end of a string + my $in = shift; + $in=~s/,00$//; + return $in; + } +'; +$record13 = MARC::Transform->new($record13,$yaml13); +#print "\n--transformed record--\n". $record13->as_formatted ."\n"; +my $v13a=recordtostring($record13); +my $v13b=" ||||501: |a:foo|b:2010-13-08|c:40|d:40,00"; +is($v13a,$v13b,""); + +#test 14 +my $record14 = MARC::Record->new(); +$record14->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'b' => 'bar', 'c' => '40,00') ); +#print "--init record--\n". $record14->as_formatted; +my $yaml14 = ' +--- +condition : $f501a eq "foo" +update : + b : \&areturn_record_encoding() + c : \&atrim("$this") +--- +global_subs: > + sub areturn_record_encoding { + $record->encoding(); + } + + sub atrim { + # This function removes ",00" at the end of a string + my $in = shift; + $in=~s/,00$//; + return $in; + } +'; +$record14 = MARC::Transform->new($record14,$yaml14); +#print "\n--transformed record--\n". $record14->as_formatted ."\n"; +my $v14a=recordtostring($record14); +my $v14b=" ||||501: |a:foo|b:MARC-8|c:40"; +is($v14a,$v14b,""); + +#test 15 +my $record15 = MARC::Record->new(); +$record15->insert_fields_ordered( MARC::Field->new( '501', '', '', 'b' => 'bar', 'c' => '1') ); +#print "--init record--\n". $record15->as_formatted; +my $yaml15 = ' +--- +- + condition : $f501b eq "bar" + create : + f604a : \&LUT("$f501b") + update : + c : \&LUT("$this") +- + LUT : + 1 : first + 2 : second + bar : openbar +'; +$record15 = MARC::Transform->new($record15,$yaml15); +#print "\n--transformed record--\n". $record15->as_formatted ."\n"; +my $v15a=recordtostring($record15); +my $v15b=" ||||501: |b:bar|c:first||604: |a:openbar"; +is($v15a,$v15b,""); + +#test 16 +my $record16 = MARC::Record->new(); +$record16->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => '1', 'a' => '3', 'b' => 'foo', 'c' => 'SF') ); +#print "--init record--\n". $record16->as_formatted; +my %mth16; +my $yaml16 = ' +--- +- + update : + f501a : \&LUT("$this","numbers") + f501b : \&LUT("$this","cities") + f501c : \&LUT("$this","cities") +--- +global_LUT: + cities: + NY : New York + SF : San Fransisco + TK : Tokyo + _default_value_ : unknown city + numbers: + 1 : one + 2 : two +'; +$record16 = MARC::Transform->new($record16,$yaml16,\%mth16); +#print "\n--transformed record--\n". $record16->as_formatted ."\n"; +my $v16a=recordtostring($record16); +$v16a.=$mth16{"_defaultLUT_to_mth_"}->{"cities"}[0]; +my $v16b=" ||||501: |a:3|a:one|b:unknown city|c:San Fransisco"; +$v16b.="foo"; +is($v16a,$v16b,""); + +#test 17 +my $record17 = MARC::Record->new(); +$record17->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'I want "$"') ); +#print "--init record--\n". $record17->as_formatted; +my $yaml17 = ' +--- +condition : $f501a eq "I want #_dbquote_##_dollars_##_dbquote_#" +create : + f604a : "#_dbquote_#$f501a#_dbquote_# contain a #_dollars_# sign" +'; +$record17 = MARC::Transform->new($record17,$yaml17); +#print "\n--transformed record--\n". $record17->as_formatted ."\n"; +my $v17a=recordtostring($record17); +my $v17b=' ||||501: |a:I want "$"||604: |a:"I want "$"" contain a $ sign'; +is($v17a,$v17b,""); + +#test 18 +my $record18 = MARC::Record->new(); +$record18->insert_fields_ordered( MARC::Field->new( '995', '', '', 'a' => '1', 'b' => 'foo', 'c' => 'SF') ); +$record18->insert_fields_ordered( MARC::Field->new( '995', '', '', 'a' => '2', 'b' => 'foo', 'c' => 'SF') ); +$record18->insert_fields_ordered( MARC::Field->new( '995', '', '', 'a' => '1', 'b' => 'foo', 'c' => 'SF') ); +#print "--init record--\n". $record18->as_formatted; +my $yaml18 = ' +--- +condition : $f995a eq "2" +update : + b : updated value of all \'b\' subfields in the condition field + $f995a : 3 + f995c : updated +'; +$record18 = MARC::Transform->new($record18,$yaml18); +#print "\n--transformed record--\n". $record18->as_formatted ."\n"; +my $v18a=recordtostring($record18); +my $v18b=" ||||995: |a:1|b:foo|c:updated||995: |a:1|b:foo|c:updated||995: |a:3|b:updated value of all 'b' subfields in the condition field|c:updated"; +is($v18a,$v18b,""); + +#test 19 +my $record19 = MARC::Record->new(); +$record19->leader('optionnal leader'); +$record19->insert_fields_ordered( MARC::Field->new( '500', '', '', 'a' => '0123456789abcd') ); +#print "--init record--\n". $record19->as_formatted; +my $yaml19 = ' +--- +condition : $ldr6 eq "n" and $f500a11 eq "b" +create : + f604a : ok +'; +$record19 = MARC::Transform->new($record19,$yaml19); +#print "\n--transformed record--\n". $record19->as_formatted ."\n"; +my $v19a=recordtostring($record19); +my $v19b="optionnal leader||||500: |a:0123456789abcd||604: |a:ok"; +is($v19a,$v19b,""); + +#test 20 +my $record20 = MARC::Record->new(); +$record20->leader('optionnal leader'); +#$record20->insert_fields_ordered( MARC::Field->new( '500', '', '', 'a' => 'var') ); +#print "--init record--\n". $record20->as_formatted; +my %mt; +$mt{"inc"}=1; +$mt{"var"}="a string"; +my $yaml20 = ' +--- +condition : $$mth{"var"} eq "a string" +create : + f500a : $$mth{"var"} +--- +- + execute : \&test20a() +- + subs: > + sub test20a { $$mth{"inc"}++; } +--- +create : + f600a : \&test20b() +--- +global_subs: > + sub test20b { $$mth{"inc"}++;$$mth{"inc"}; } + +'; +$record20 = MARC::Transform->new($record20,$yaml20,\%mt); +#print "\n--transformed record--\n". $record20->as_formatted ."\n"; +#print recordtostring($record20); +my $v20a=recordtostring($record20); +my $v20b="optionnal leader||||500: |a:a string||600: |a:3"; +is( $v20a, $v20b, "" ); + +#test 21 +my $record21 = MARC::Record->new(); +$record21->leader('optionnal leader'); +$record21->insert_fields_ordered( MARC::Field->new( '327', '', '', 'a' => 'blabla') ); +$record21->insert_fields_ordered( MARC::Field->new( '464', '', '', 'a' => 'Bar', 'b' => 'Bbr') ); +#print "--init record--\n". $record21->as_formatted; +my $yaml21 = ' +--- +condition : $f327a +delete : a +--- +condition : $f464a +delete : $f464a +'; +$record21 = MARC::Transform->new($record21,$yaml21); +#print "\n--transformed record--\n". $record21->as_formatted ."\n"; +my $v21a=recordtostring($record21); +my $v21b="optionnal leader||||464: |b:Bbr"; +is($v21a,$v21b,""); + +#test 22 +my $record22 = MARC::Record->new(); +$record22->leader('optionnal leader'); +$record22->insert_fields_ordered( MARC::Field->new( '327', '', '', 'a' => 'blabla', 'a' => 'blbl') ); +#print "--init record--\n". $record22->as_formatted; +my $yaml22 = ' +--- +condition : $f327a +duplicatefield : $f327 > f464 +'; +$record22 = MARC::Transform->new($record22,$yaml22); +#print "\n--transformed record--\n". $record22->as_formatted ."\n"; +my $v22a=recordtostring($record22); +my $v22b="optionnal leader||||327: |a:blabla|a:blbl||464: |a:blabla|a:blbl"; +is($v22a,$v22b,""); + +#test 23 +my $record23 = MARC::Record->new(); +$record23->leader('optionnal leader'); +$record23->insert_fields_ordered( MARC::Field->new( '105', '', '', 'a' => '0123456789abcd') ); +#print "--init record--\n". $record23->as_formatted; +my $yaml23 = ' +--- +condition : $f105a4 ne "m" +create : + f604a : ok +'; +$record23 = MARC::Transform->new($record23,$yaml23); +#print "\n--transformed record--\n". $record23->as_formatted ."\n"; +my $v23a=recordtostring($record23); +my $v23b="optionnal leader||||105: |a:0123456789abcd||604: |a:ok"; +is($v23a,$v23b,""); + +#test 24 +my $record24 = MARC::Record->new(); +$record24->leader('optionnal leader'); +#$record24->insert_fields_ordered( MARC::Field->new( '500', '', '', 'a' => 'var') ); +#print "--init record--\n". $record24->as_formatted; +my %mth24; +$mth24{"inc"}=1; +$mth24{"var"}="a string"; +my $yaml24 = ' +--- +condition : $$mth{"var"} eq "a string" +forceupdate : + f500a : $$mth{"var"} +--- +- + execute : \&test24a() +- + subs: > + sub test24a { $$mth{"inc"}++; } +--- +forceupdate : + f600a : \&test24b() +--- +global_subs: > + sub test24b { $$mth{"inc"}++;$$mth{"inc"}; } +'; +$record24 = MARC::Transform->new($record24,$yaml24,\%mth24); +$record24 = MARC::Transform->new($record24,$yaml24,\%mth24); +#print "\n--transformed record--\n". $record24->as_formatted ."\n"; +#print recordtostring($record24); +my $v24a=recordtostring($record24); +my $v24b="optionnal leader||||500: |a:a string||600: |a:5"; +is( $v24a, $v24b, "" ); + +#test 25 +my $record25 = MARC::Record->new(); +$record25->insert_fields_ordered( MARC::Field->new( '501', '', '', 'a' => 'foo', 'a' => 'bar') ); +#print "--init record--\n". $record25->as_formatted; +my $yaml25 = '--- +delete : f501a +'; +$record25 = MARC::Transform->new($record25,$yaml25); +#print "\n--transformed record--\n". $record25->as_formatted ."\n"; +my $v25a=recordtostring($record25); +my $v25b=" ||||501: "; +is($v25a,$v25b, "" ); + +#test 26 +my $record26 = MARC::Record->new(); +$record26->leader('012345gs0 2200253 4500'); +$record26->insert_fields_ordered( MARC::Field->new( '008', 'd') ); +$record26->insert_fields_ordered( MARC::Field->new( '215', '', '', 'v' => 'd') ); +$record26->insert_fields_ordered( MARC::Field->new( '099', '', '', 't' => '13', 'v' => 'd') ); +$record26->insert_fields_ordered( MARC::Field->new( '115', '', '', 'v' => 'd') ); +$record26->insert_fields_ordered( MARC::Field->new( '116', '', '', 'v' => 'd') ); +$record26->insert_fields_ordered( MARC::Field->new( '117', '', '', 'v' => 'd') ); +$record26->insert_fields_ordered( MARC::Field->new( '135', '', '', 'a' => 'vo') ); +$record26->insert_fields_ordered( MARC::Field->new( '463', '', '', 'v' => 'd') ); +$record26->insert_fields_ordered( MARC::Field->new( '464', '', '', 'v' => 'd') ); +#print "--init record--\n". $record26->as_formatted; +my $yaml26 = '--- +condition : $ldr6 eq "g" or $f135a1 eq "o" +forceupdate : + f9950 : test0 +--- +condition : $f215v eq "d" or $f115a eq "a" +forceupdate : + f995a : test1 +--- +condition : $ldr6 eq "g" or $f115a +forceupdate : + f995b : test2 +--- +condition : $f115b or $f115v +forceupdate : + f995c : test3 +--- +condition : $f215v or $f115v +forceupdate : + f995d : test4 +--- +condition : $f115b or $f115v +forceupdate : + f995e : test5 +--- +condition : $f116b or $f116v eq "d" +forceupdate : + f995f : test6 +--- +condition : $f117b eq "1" or $f117v eq "d" +forceupdate : + f995g : test7 +--- +condition : $f463 or $f464 +forceupdate : + f995h : test8 +--- +condition : ($f463 or $f464) and $f008_ eq "d" +forceupdate : + f995i : test9 +--- +condition : $f099t eq "13" and ($f135a0 eq "v" or $f135a1 eq "o") +forceupdate : + f995j : test10 +--- +condition : $f008 or $f009 +forceupdate : + f995k : test11 +--- +condition : $f117b and $f117v +forceupdate : + f995k : testbad +--- +condition : $f463v eq "d" and $f135 +forceupdate : + f700a : test0 +--- +condition : ($f463v eq "d" or $f464v eq "d") or $f008 +forceupdate : + f463v : test0 +'; +$record26 = MARC::Transform->new($record26,$yaml26); +#print "\n--transformed record--\n". $record26->as_formatted ."\n"; +my $v26a=recordtostring($record26); +my $v26b="012345gs0 2200253 4500||||008:d||099: |t:13|v:d||115: |v:d||116: |v:d||117: |v:d||135: |a:vo||215: |v:d||463: |v:test0||464: |v:d||700: |a:test0||995: |0:test0|a:test1|b:test2|c:test3|d:test4|e:test5|f:test6|g:test7|h:test8|i:test9|j:test10|k:test11"; +is($v26a,$v26b, "" ); + +#test 27 +my $record27 = MARC::Record->new(); +$record27->leader('01499nam0 2200301 4500'); +$record27->insert_fields_ordered( MARC::Field->new( '008', 'y 7 000yy') ); +$record27->insert_fields_ordered( MARC::Field->new( '105', '', '', 'a' => 'y 7 000yy') ); +#print "--init record--\n". $record27->as_formatted; +my $yaml27 = '--- +- + condition : ($ldr7 eq "m") and ($ldr6 eq "a" or $ldr6 eq "m" or $ldr6 eq "l") and ($f105a4 ne "m") and ($f105a4 ne "v") and ($f105a4 ne "7") + create : + f099t : LIV +- + condition : $f105a4 eq "m" or $f105a4 eq "v" or $f105a4 eq "7" + create : + f099t : THE +- + create : + f099t : AUT +'; +$record27 = MARC::Transform->new($record27,$yaml27); +#print "\n--transformed record--\n". $record27->as_formatted ."\n"; +my $v27a=recordtostring($record27); +my $v27b="01499nam0 2200301 4500||||008:y 7 000yy||099: |t:THE||105: |a:y 7 000yy"; +is($v27a,$v27b,""); |