r1303@llin: dpavlin | 2007-06-26 19:46:53 +0200
[webpac2] / t / 1-validate-delimiters.t
1 #!/usr/bin/perl -w
2
3 use strict;
4 use Test::More tests => 15;
5 use Test::Exception;
6 use blib;
7
8 use Data::Dump qw/dump/;
9 use Cwd qw/abs_path/;
10 use File::Temp qw/ :POSIX /;
11
12 BEGIN {
13 use_ok( 'WebPAC::Validate' );
14 }
15
16 my $debug = shift @ARGV;
17
18 ok(my $abs_path = abs_path($0), "abs_path");
19 $abs_path =~ s#/[^/]*$#/#;
20
21 my $delimiters_path = tmpnam();
22
23 ok(my $v = new WebPAC::Validate(
24         path => "$abs_path/data/validate_test",
25         delimiters => [ ' : ', ' ; ', ' / ', ' \. ', ' = ' ],
26         delimiters_path => $delimiters_path,
27         debug => $debug,
28 ), "new");
29
30 diag "rules = ", dump( $v->{rules} ) if ( $debug );
31
32 $v->{rules} = {};
33
34 sub test_v {
35         my $row = shift || die "no row?";
36
37         my $d = dump( $row );
38
39         $row->{'000'} = [ 42 ];
40
41         $v->reset;
42         my $e = $v->validate_rec( $row );
43
44         diag ">> validate $d\n",dump($e) if ($debug);
45 }
46
47 test_v({
48         '900' => [
49                 { 'a' => 'a : aa = aaa : a ; a', 'b' => 'b ; b ; b ; b ; a : / z . z . ' },
50                 { 'a' => 'a : a : a', 'c' => [ 'a : b ; c', 'a : b ; c / d' ] },
51                 { 'a' => 'a : b / c' },
52                 { 'a' => 'a : b / c' },
53         ],
54         '901' => [
55                 { 'a' => 'a : b / c', 'b' => 'foo' },
56                 { 'a' => 'a : b / c', 'b' => 'foo' },
57         ],
58 });
59
60 diag dump($v->{_delimiters_templates}) if ( $debug );
61
62 is_deeply( $v->{_delimiters_templates}, {
63         900 => {
64                 "^a :  / " => 2,
65                 "^a :  : ^c :  ; ^c :  ;  / " => 1,
66                 "^a :  =  :  ; ^b ;  ;  ;  ;  :  .  . " => 1,
67         },
68         901 => { "^a :  / ^b" => 2 },
69 }, 'just subfields and delimiters');
70
71 ok(! $v->delimiters_templates, 'no accumulated delimiters_template');
72
73 ok(my $dt = $v->delimiters_templates( current_input => 1 ), 'delimiters_template');
74 diag $dt if ( $debug );
75
76 ok($dt = $v->delimiters_templates( report => 1, current_input => 1 ), 'delimiters_template report');
77 diag $dt if ( $debug );
78
79 $v->reset;
80 ok( $v->delimiters_templates, 'have accumulated delimiters_templates');
81
82 $v->{_validate_delimiters_templates} = {
83         900 => { '^a : ^b' => 1 },
84 };
85
86 test_v({
87         '900' => [
88                 { 'a' => 'foo : bar', 'b' => 'baz' },
89                 { 'a' => 'foo', 'b' => 'baz' },
90                 { 'a' => 'foo' },
91                 { 'a' => 'foo : bar' },
92         ],
93 });
94
95 ok (my $e = $v->report, 'report');
96
97 diag $e if ( $debug );
98
99 ok( $v->save_delimiters_templates, 'save_delimiters_templates' );
100
101 ok( -s $delimiters_path, "$delimiters_path " . ( -s $delimiters_path ) . " bytes" );
102
103 ok( $v->save_delimiters_templates, 'save_delimiters_templates to existing file' );
104
105 ok( -s $delimiters_path . '.new' , "new file created" );
106
107 ok(my $v2 = new WebPAC::Validate(
108         delimiters => [ ' : ', ' ; ', ' / ', ' \. ', ' = ' ],
109         delimiters_path => $delimiters_path,
110         debug => $debug,
111 ), "new");
112
113 is_deeply( $v->{_accumulated_delimiters_templates}, $v2->{_validate_delimiters_templates}, 'save/load ok');
114
115 diag dump( $v, $v2 ) if ( $debug );