/[webpac2]/trunk/t/1-validate.t
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/t/1-validate.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 768 - (hide annotations)
Fri Nov 3 19:41:28 2006 UTC (17 years, 6 months ago) by dpavlin
File MIME type: application/x-troff
File size: 3662 byte(s)
 r1117@llin:  dpavlin | 2006-11-03 20:42:24 +0100
 cleanup API a bit. validate_errors in now validate_rec [0.10]

1 dpavlin 514 #!/usr/bin/perl -w
2    
3     use strict;
4 dpavlin 670 use Test::More tests => 47;
5 dpavlin 514 use Test::Exception;
6     use blib;
7    
8 dpavlin 653 use Data::Dump qw/dump/;
9 dpavlin 514 use Cwd qw/abs_path/;
10    
11     BEGIN {
12     use_ok( 'WebPAC::Validate' );
13     }
14    
15     my $debug = shift @ARGV;
16    
17     ok(my $abs_path = abs_path($0), "abs_path");
18     $abs_path =~ s#/[^/]*$#/#;
19    
20     throws_ok { new WebPAC::Validate( no_log => 1 ) } qr/need path/, "new without path";
21    
22     ok(my $v = new WebPAC::Validate(
23     path => "$abs_path/data/validate_test",
24 dpavlin 666 debug => $debug,
25 dpavlin 514 ), "new");
26    
27     ok($v->{rules}, "rules exist");
28 dpavlin 515
29     is_deeply( $v->{rules}, {
30     '900' => 1,
31     '901' => [ 'a' ],
32     '902' => [ 'b', 'c' ],
33     '903' => [ 'a', 'b', 'c' ],
34 dpavlin 654 '904' => [ 'a' ],
35 dpavlin 659 '905' => [ 'a*' ],
36 dpavlin 515 }, 'rules parsed');
37    
38 dpavlin 654
39    
40 dpavlin 768 throws_ok { $v->validate_rec() } qr/rec/, "validate_rec need rec";
41 dpavlin 515
42 dpavlin 653 sub test_v {
43     my $row = shift || die "no row?";
44 dpavlin 515
45 dpavlin 653 my $d = dump( $row );
46    
47     $row->{'000'} = [ 42 ];
48    
49     $v->reset_errors;
50 dpavlin 768 my $e = $v->validate_rec( $row );
51 dpavlin 653
52     diag "validate $d\n",dump($e) if ($debug);
53    
54     if (@_) {
55     my $tmp = $e;
56     while (@_) {
57     my $k = shift @_;
58 dpavlin 670 ok($tmp = $tmp->{$k}, "found $k") if (defined($k));
59 dpavlin 653 }
60 dpavlin 654 diag "tmp: ",dump($tmp) if ($debug);
61     if ($tmp) {
62     if (ref($tmp) eq 'HASH') {
63     return $tmp;
64     } else {
65     diag "explanation: $tmp";
66     }
67     }
68 dpavlin 653 } else {
69     ok(! $e, "validated $d");
70     diag "expected error: ", dump($e) if($e);
71     }
72    
73     }
74    
75     test_v({
76     '900' => 'foo'
77 dpavlin 666 }, qw/900 not_repeatable/);
78 dpavlin 653
79     test_v({
80 dpavlin 515 '900' => [ qw/foo bar baz/ ]
81 dpavlin 653 });
82 dpavlin 515
83 dpavlin 653 test_v({
84 dpavlin 515 '901' => [ qw/foo bar baz/ ]
85 dpavlin 666 }, qw/901 missing_subfield/);
86 dpavlin 515
87 dpavlin 653 test_v({
88 dpavlin 515 '901' => [ { 'a' => 42 } ]
89 dpavlin 653 });
90 dpavlin 515
91 dpavlin 653 test_v({
92 dpavlin 515 '901' => [ { 'b' => 42 } ]
93 dpavlin 666 }, qw/901 subfield extra b/);
94 dpavlin 515
95 dpavlin 653 test_v({
96 dpavlin 515 '902' => [ { 'b' => 1 }, { 'c' => 2 } ]
97 dpavlin 653 });
98 dpavlin 515
99 dpavlin 653 test_v({
100 dpavlin 515 '902' => [ { 'a' => 0 }, { 'b' => 1 }, { 'c' => 2 } ]
101 dpavlin 666 }, qw/902 subfield extra a/);
102 dpavlin 515
103 dpavlin 653 test_v({
104 dpavlin 515 '903' => [ { 'a' => 0 }, { 'b' => 1 }, { 'c' => 2 } ]
105 dpavlin 653 });
106 dpavlin 515
107 dpavlin 653 test_v({
108 dpavlin 515 '903' => [ { 'a' => 0 }, { 'b' => 1 }, { 'c' => 2 }, { 'd' => 3 } ]
109 dpavlin 666 }, qw/903 subfield extra d/);
110 dpavlin 653
111 dpavlin 655 is_deeply(
112 dpavlin 670 test_v({
113     '903' => [ { 'a' => 0 }, { 'b' => 1 }, { 'c' => 2 }, { 'd' => 3 }, { 'e' => 4 } ]
114     }, qw/903 subfield extra/),
115 dpavlin 655 { 'd' => 1, 'e' => 1 }, 'additional fields d, e');
116 dpavlin 654
117 dpavlin 655 test_v({
118     '904' => [ { 'a' => 1, } ]
119     });
120    
121     test_v({
122     '904' => [ { 'b' => 1 } ]
123 dpavlin 666 }, qw/904 subfield extra b/);
124 dpavlin 655
125 dpavlin 659 test_v({
126     '904' => [ { 'a' => [ 1,2 ] } ]
127 dpavlin 666 }, qw/904 subfield extra_repeatable a/);
128 dpavlin 659
129     test_v({
130     '905' => [ { 'a' => [ 1,2 ] } ]
131     });
132    
133     test_v({
134     '905' => [ ]
135     });
136 dpavlin 665
137 dpavlin 670 my $expected_error = {
138     900 => { not_repeatable => "probably bug in parsing input data" },
139     901 => { missing_subfield => "a required" },
140     902 => {
141     "dump" => "^a1^b1^b2",
142     subfield => { extra => { a => 1 }, extra_repeatable => { b => 1 } },
143     },
144     903 => {
145     "dump" => "^a1^a2^c1",
146     subfield => { extra_repeatable => { a => 1 } },
147     },
148     904 => { subfield => { extra => { b => 1 }, missing => { a => 1 } } },
149     };
150 dpavlin 665
151    
152 dpavlin 670 is_deeply(
153     test_v({
154     '900' => 'foo',
155     '901' => [ qw/foo bar baz/ ],
156     '902' => [ { 'a' => 1, 'b' => [ 1,2 ] } ],
157     '903' => [ { 'a' => [ 1, 2 ], 'c' => 1, } ],
158     '904' => [ { 'b' => 1 } ],
159     '905' => [ { 'a' => 1 } ],
160     }, undef),
161     $expected_error, 'validate without subfields');
162    
163     ok(my $r1 = $v->report, 'report');
164    
165     is_deeply(
166     test_v({
167     '900' => 'foo',
168     '901' => [ qw/foo bar baz/ ],
169     '902' => [ { 'a' => 1, 'b' => [ 1,2 ], subfields => [ qw/a 0 b 0 b 1/ ] } ],
170     '903' => [ { 'a' => [ 1, 2 ], 'c' => 1, subfields => [ qw/a 0 a 1 c 0/ ] } ],
171     '904' => [ { 'b' => 1, subfields => [ qw/b 0/ ] } ],
172     '905' => [ { 'a' => 1, subfields => [ qw/a 0/ ] } ],
173     }, undef),
174     $expected_error, 'validate with subfields');
175    
176    
177     ok(my $r2 = $v->report, 'report');
178    
179     cmp_ok($r1, 'eq', $r2, 'subfields same as non-subfields');

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26