/[webpac2]/trunk/t/3-normalize-xml.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/3-normalize-xml.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 315 - (hide annotations)
Fri Dec 23 21:17:37 2005 UTC (18 years, 4 months ago) by dpavlin
File MIME type: application/x-troff
File size: 4445 byte(s)
 r12231@llin:  dpavlin | 2005-12-23 23:19:04 +0100
 fix test to show bug in parsing (not hiding first delimiter if first field
 is missing in input record)

1 dpavlin 12 #!/usr/bin/perl -w
2    
3 dpavlin 314 use Test::More tests => 76;
4 dpavlin 12 use Test::Exception;
5     use Cwd qw/abs_path/;
6     use blib;
7     use strict;
8 dpavlin 62 use Data::Dumper;
9 dpavlin 12
10     BEGIN {
11     use_ok( 'WebPAC::Normalize::XML' );
12     }
13    
14     ok(my $abs_path = abs_path($0), "abs_path");
15     $abs_path =~ s#/[^/]*$#/#;
16     diag "abs_path: $abs_path";
17    
18 dpavlin 31 throws_ok { new WebPAC::Normalize::XML( lookup_regex => 'foo' ) } qr/pair/, "lookup_regex without lookup";
19     throws_ok { new WebPAC::Normalize::XML( lookup => 'bar' ) } qr/pair/, "lookup without lookup_regex";
20    
21 dpavlin 260 ok(my $n = new WebPAC::Normalize::XML(
22     debug => 1,
23     filter => {
24     regex => sub {
25     my ($val, $regex) = @_;
26     eval "\$val =~ $regex";
27     return $val;
28     },
29     },
30     ), "new");
31 dpavlin 13
32     throws_ok { $n->open() } qr/tag/, "open without tag";
33     throws_ok { $n->open( tag => 'isis' ) } qr/xml_file/, "open without xml_file";
34 dpavlin 62 throws_ok { $n->open( tag => 'isis', xml_file => '/foo/bar/baz' ) } qr/file.*doesn't exist/, "open with invalid xml_file";
35 dpavlin 13 ok( $n->open(
36 dpavlin 12 tag => 'isis',
37 dpavlin 64 xml_file => "$abs_path/data/normalize.xml",
38 dpavlin 13 ), "open");
39 dpavlin 12
40 dpavlin 13 my $rec = {
41 dpavlin 64 '675' => [
42     {
43     'a' => '159.9'
44     }
45     ],
46     '210' => [
47     {
48     'c' => 'New York University press',
49     'a' => 'New York',
50     'd' => 'cop. 1988'
51     }
52     ],
53     '700' => [
54     {
55     'a' => 'Haynal',
56     'b' => 'AndrĂ©'
57     }
58     ],
59     '801' => [
60     'FFZG'
61     ],
62     '991' => [
63     '8302'
64     ],
65     '000' => [
66     1
67     ],
68     '702' => [
69     {
70     'a' => 'Holder',
71     'b' => 'Elizabeth'
72     }
73     ],
74     '215' => [
75     {
76     'c' => 'ilustr',
77     'a' => 'xix, 202 str',
78     'd' => '23cm'
79     }
80     ],
81     '990' => [
82     '2140',
83     '88',
84     'HAY'
85     ],
86     '200' => [
87     {
88     'e' => 'from Freud and Ferenczi to Michael balint',
89     'a' => 'Controversies in psychoanalytic method',
90     'g' => 'translated by Elizabeth Holder on the basisi of a first draft by Archie Hooton ; with a preface by Daniel N. Stern',
91     'f' => 'by AndrĂ© E. Haynal'
92     }
93     ],
94     '610' => [
95     'povijest psihoanalize'
96     ],
97     '994' => [
98     {
99     'c' => '',
100     'a' => 'PS',
101     'b' => 'MG'
102     }
103     ],
104     '320' => [
105     'Kazalo'
106     ],
107     '101' => [
108     'ENG'
109     ],
110     '686' => [
111     '2140'
112     ],
113     '300' => [
114     'Prijevod djela: '
115     ]
116 dpavlin 13 };
117 dpavlin 12
118 dpavlin 64 foreach my $fld (keys %$rec) {
119     my $r = 0;
120     foreach my $item ($rec->{$fld}) {
121     if (ref($item) eq 'HASH') {
122     foreach my $sf (keys %$item) {
123     my $found = 0;
124     ok($n->get_data(\$rec, $fld, $sf, $r, \$found), "v${fld}^${sf}");
125     ok($found, "found");
126     }
127     my $found = 0;
128     ok(! $n->get_data(\$rec, $fld, 'x', $r, \$found), "no v${fld}^x");
129     ok(! $found, "not found");
130     } else {
131     my $found = 0;
132     ok($n->get_data(\$rec, $fld, '', $r, \$found), "v${fld}");
133     ok($found, "found");
134     }
135     }
136     my $found = 0;
137     ok(! $n->get_data(\$rec, '999', '', $r, \$found), "no v${fld}");
138     ok(! $found, "not found");
139     }
140    
141 dpavlin 70 ok(my $ds = $n->data_structure( $rec ), "data_structure");
142 dpavlin 13
143 dpavlin 260 #diag Dumper($rec, $ds);
144 dpavlin 70
145 dpavlin 314 # fake load of our test normalisation data
146     $n->{tag} = 'isis';
147    
148     #diag Dumper($n->{import_xml}->{indexer});
149    
150    
151     $rec = {
152 dpavlin 315 '900' => [ {
153     'a' => '1',
154     'b' => '2',
155     'c' => '3',
156     'txt' => 'yap',
157     } ],
158 dpavlin 314 };
159    
160     my $import = {
161     'Tag' => { 'isis' => [
162 dpavlin 315 { content => 'v900^a + v900^b = v900^c [txt]' },
163 dpavlin 314 ] },
164     };
165    
166     sub parse_test($$$) {
167     my ($import,$rec,$r) = @_;
168     $n->{import_xml}->{indexer} = $import;
169     # erase internal cache (yak!)
170     delete($n->{tags_by_order});
171 dpavlin 315 push @{$rec->{'000'}}, 42 unless ($rec->{'000'});
172 dpavlin 314 diag "test normalisation of: ",Dumper($n->{import_xml}->{indexer}, $rec);
173     ok(my $ds = $n->data_structure( $rec ), "data_structure");
174     diag Dumper($ds);
175     cmp_ok($ds->{Tag}->{display}->[0], 'eq', $r, "parse $r");
176     }
177    
178 dpavlin 315 parse_test($import, $rec, '1 + 2 = 3 [yap]');
179    
180     delete($rec->{'900'}->[0]->{'b'});
181     parse_test($import, $rec, '1 = 3 [yap]');
182    
183     $rec->{'900'}->[0]->{'b'} = 5;
184     $rec->{'900'}->[0]->{'c'} = 6;
185     parse_test($import, $rec, '1 + 5 = 6 [yap]');
186    
187     delete($rec->{'900'}->[0]->{'c'});
188     parse_test($import, $rec, '1 + 5');
189    
190     $rec->{'900'}->[0]->{'txt'} = 'nope!';
191     delete($rec->{'900'}->[0]->{'a'});
192     parse_test($import, $rec, '5 [nope!]');
193    

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26