=head1 VERSION
-Version 0.07
+Version 0.08
=cut
-our $VERSION = '0.07';
+our $VERSION = '0.08';
=head1 SYNOPSIS
foreach my $sf (@r_sf) {
$errors->{$f}->{subfield}->{extra_repeatable}->{$sf}++;
- $errors->{$f}->{dump} =
- join('', _pack_subfields_hash( $h, 1 ) );
+ $errors->{$f}->{dump} = _pack_subfields_hash( $h, 1 );
}
}
}
} elsif (ref($v) eq 'HASH') {
$errors->{$f}->{unexpected_subfields}++;
- $errors->{$f}->{dump} =
- join('', _pack_subfields_hash( $v, 1 ) );
+ $errors->{$f}->{dump} = _pack_subfields_hash( $v, 1 );
}
}
}
if ($k eq 'dump') {
$dump = $tree->{dump};
- warn "## dump: ",dump($dump),"\n";
+# warn "## dump: ",dump($dump),"\n";
next;
}
#!/usr/bin/perl -w
use strict;
-use Test::More tests => 51;
+use Test::More tests => 47;
use Test::Exception;
use blib;
my $tmp = $e;
while (@_) {
my $k = shift @_;
- ok($tmp = $tmp->{$k}, "found $k");
+ ok($tmp = $tmp->{$k}, "found $k") if (defined($k));
}
diag "tmp: ",dump($tmp) if ($debug);
if ($tmp) {
}, qw/903 subfield extra d/);
is_deeply(
-
-test_v({
- '903' => [ { 'a' => 0 }, { 'b' => 1 }, { 'c' => 2 }, { 'd' => 3 }, { 'e' => 4 } ]
-}, qw/903 subfield extra/),
+ test_v({
+ '903' => [ { 'a' => 0 }, { 'b' => 1 }, { 'c' => 2 }, { 'd' => 3 }, { 'e' => 4 } ]
+ }, qw/903 subfield extra/),
{ 'd' => 1, 'e' => 1 }, 'additional fields d, e');
test_v({
'905' => [ ]
});
-test_v({
- '900' => 'foo',
- '901' => [ qw/foo bar baz/ ],
- '902' => [ { 'a' => 1, 'b' => [ 1,2 ] } ],
- '903' => [ { 'a' => [ 1, 2 ], 'c' => 1, } ],
- '904' => [ { 'b' => 1 } ],
- '905' => [ { 'a' => 1 } ],
-});
+my $expected_error = {
+ 900 => { not_repeatable => "probably bug in parsing input data" },
+ 901 => { missing_subfield => "a required" },
+ 902 => {
+ "dump" => "^a1^b1^b2",
+ subfield => { extra => { a => 1 }, extra_repeatable => { b => 1 } },
+ },
+ 903 => {
+ "dump" => "^a1^a2^c1",
+ subfield => { extra_repeatable => { a => 1 } },
+ },
+ 904 => { subfield => { extra => { b => 1 }, missing => { a => 1 } } },
+};
+
+
+is_deeply(
+ test_v({
+ '900' => 'foo',
+ '901' => [ qw/foo bar baz/ ],
+ '902' => [ { 'a' => 1, 'b' => [ 1,2 ] } ],
+ '903' => [ { 'a' => [ 1, 2 ], 'c' => 1, } ],
+ '904' => [ { 'b' => 1 } ],
+ '905' => [ { 'a' => 1 } ],
+ }, undef),
+$expected_error, 'validate without subfields');
+
+ok(my $r1 = $v->report, 'report');
+
+is_deeply(
+ test_v({
+ '900' => 'foo',
+ '901' => [ qw/foo bar baz/ ],
+ '902' => [ { 'a' => 1, 'b' => [ 1,2 ], subfields => [ qw/a 0 b 0 b 1/ ] } ],
+ '903' => [ { 'a' => [ 1, 2 ], 'c' => 1, subfields => [ qw/a 0 a 1 c 0/ ] } ],
+ '904' => [ { 'b' => 1, subfields => [ qw/b 0/ ] } ],
+ '905' => [ { 'a' => 1, subfields => [ qw/a 0/ ] } ],
+ }, undef),
+$expected_error, 'validate with subfields');
+
-diag "errors: ",dump( $v->all_errors );
+ok(my $r2 = $v->report, 'report');
-diag "report: ", $v->report;
+cmp_ok($r1, 'eq', $r2, 'subfields same as non-subfields');