1 # Before `make install' is performed this script should be runnable with
2 # `make test'. After `make install' it should work as `perl test.pl'
4 ######################### We start with some black magic to print on failure.
6 # Change 1..1 below to 1..last_test_to_print .
7 # (It may become useful if the test is moved to ./t subdirectory.)
9 BEGIN { $| = 1; print "1..86\n"; }
10 END {print "not ok 1\n" unless $loaded;}
11 use Text::Balanced qw ( :ALL );
15 use vars qw( $DEBUG );
16 sub debug { print "\t>>>",@_ if $DEBUG }
18 ######################### End of black magic.
27 print "\@l1: ", join(", ", @$l1), "\n";
28 print "\@l2: ", join(", ", @$l2), "\n";
33 for (my $i = 0; $i < @$l1; $i++)
35 if ($l1->[$i] ne $l2->[$i])
37 print "field $i: '$l1->[$i]' ne '$l2->[$i]'\n";
50 my ($text, @index) = @_;
53 push @index, length($text);
54 for ( my $i= 0; $i < $#index; $i++)
56 push @bits, substr($text, $index[$i], $index[$i+1]-$index[$i]);
64 $stdtext1 = q{$var = do {"val" && $val;};};
68 expect [ extract_multiple($text,undef,1) ],
69 [ divide $stdtext1 => 4 ];
71 expect [ pos $text], [ 4 ];
72 expect [ $text ], [ $stdtext1 ];
76 expect [ scalar extract_multiple($text,undef,1) ],
77 [ divide $stdtext1 => 4 ];
79 expect [ pos $text], [ 0 ];
80 expect [ $text ], [ substr($stdtext1,4) ];
85 expect [ extract_multiple($text,undef,2) ],
86 [ divide($stdtext1 => 4, 10) ];
88 expect [ pos $text], [ 10 ];
89 expect [ $text ], [ $stdtext1 ];
93 expect [ eval{local$^W;scalar extract_multiple($text,undef,2)} ],
94 [ substr($stdtext1,0,4) ];
96 expect [ pos $text], [ 0 ];
97 expect [ $text ], [ substr($stdtext1,4) ];
102 expect [ extract_multiple($text,undef,3) ],
103 [ divide($stdtext1 => 4, 10, 26) ];
105 expect [ pos $text], [ 26 ];
106 expect [ $text ], [ $stdtext1 ];
110 expect [ eval{local$^W;scalar extract_multiple($text,undef,3)} ],
111 [ substr($stdtext1,0,4) ];
113 expect [ pos $text], [ 0 ];
114 expect [ $text ], [ substr($stdtext1,4) ];
119 expect [ extract_multiple($text,undef,4) ],
120 [ divide($stdtext1 => 4, 10, 26, 27) ];
122 expect [ pos $text], [ 27 ];
123 expect [ $text ], [ $stdtext1 ];
127 expect [ eval{local$^W;scalar extract_multiple($text,undef,4)} ],
128 [ substr($stdtext1,0,4) ];
130 expect [ pos $text], [ 0 ];
131 expect [ $text ], [ substr($stdtext1,4) ];
136 expect [ extract_multiple($text,undef,5) ],
137 [ divide($stdtext1 => 4, 10, 26, 27) ];
139 expect [ pos $text], [ 27 ];
140 expect [ $text ], [ $stdtext1 ];
145 expect [ eval{local$^W;scalar extract_multiple($text,undef,5)} ],
146 [ substr($stdtext1,0,4) ];
148 expect [ pos $text], [ 0 ];
149 expect [ $text ], [ substr($stdtext1,4) ];
154 $stdtext2 = q{$var = "val" && (1,2,3);};
157 expect [ extract_multiple($text) ],
158 [ divide($stdtext2 => 4, 7, 12, 24) ];
160 expect [ pos $text], [ 24 ];
161 expect [ $text ], [ $stdtext2 ];
165 expect [ scalar extract_multiple($text) ],
166 [ substr($stdtext2,0,4) ];
168 expect [ pos $text], [ 0 ];
169 expect [ $text ], [ substr($stdtext2,4) ];
174 expect [ extract_multiple($text,[\&extract_bracketed]) ],
175 [ substr($stdtext2,0,16), substr($stdtext2,16,7), substr($stdtext2,23) ];
177 expect [ pos $text], [ 24 ];
178 expect [ $text ], [ $stdtext2 ];
182 expect [ scalar extract_multiple($text,[\&extract_bracketed]) ],
183 [ substr($stdtext2,0,16) ];
185 expect [ pos $text], [ 0 ];
186 expect [ $text ], [ substr($stdtext2,15) ];
191 expect [ extract_multiple($text,[\&extract_variable]) ],
192 [ substr($stdtext2,0,4), substr($stdtext2,4) ];
194 expect [ pos $text], [ length($text) ];
195 expect [ $text ], [ $stdtext2 ];
199 expect [ scalar extract_multiple($text,[\&extract_variable]) ],
200 [ substr($stdtext2,0,4) ];
202 expect [ pos $text], [ 0 ];
203 expect [ $text ], [ substr($stdtext2,4) ];
208 expect [ extract_multiple($text,[\&extract_quotelike]) ],
209 [ substr($stdtext2,0,7), substr($stdtext2,7,5), substr($stdtext2,12) ];
211 expect [ pos $text], [ length($text) ];
212 expect [ $text ], [ $stdtext2 ];
216 expect [ scalar extract_multiple($text,[\&extract_quotelike]) ],
217 [ substr($stdtext2,0,7) ];
219 expect [ pos $text], [ 0 ];
220 expect [ $text ], [ substr($stdtext2,6) ];
225 expect [ extract_multiple($text,[\&extract_quotelike],2,1) ],
226 [ substr($stdtext2,7,5) ];
228 expect [ pos $text], [ 23 ];
229 expect [ $text ], [ $stdtext2 ];
233 expect [ eval{local$^W;scalar extract_multiple($text,[\&extract_quotelike],2,1)} ],
234 [ substr($stdtext2,7,5) ];
236 expect [ pos $text], [ 6 ];
237 expect [ $text ], [ substr($stdtext2,0,6). substr($stdtext2,12) ];
242 expect [ extract_multiple($text,[\&extract_quotelike],1,1) ],
243 [ substr($stdtext2,7,5) ];
245 expect [ pos $text], [ 12 ];
246 expect [ $text ], [ $stdtext2 ];
250 expect [ scalar extract_multiple($text,[\&extract_quotelike],1,1) ],
251 [ substr($stdtext2,7,5) ];
253 expect [ pos $text], [ 6 ];
254 expect [ $text ], [ substr($stdtext2,0,6). substr($stdtext2,12) ];
257 my $stdtext3 = "a,b,c";
260 expect [ extract_multiple(undef, [ sub { /\G[a-z]/gc && $& } ]) ],
261 [ divide($stdtext3 => 1,2,3,4,5) ];
263 expect [ pos ], [ 5 ];
264 expect [ $_ ], [ $stdtext3 ];
269 expect [ scalar extract_multiple(undef, [ sub { /\G[a-z]/gc && $& } ]) ],
270 [ divide($stdtext3 => 1) ];
272 expect [ pos ], [ 0 ];
273 expect [ $_ ], [ substr($stdtext3,1) ];
279 expect [ extract_multiple(undef, [ qr/\G[a-z]/ ]) ],
280 [ divide($stdtext3 => 1,2,3,4,5) ];
282 expect [ pos ], [ 5 ];
283 expect [ $_ ], [ $stdtext3 ];
288 expect [ scalar extract_multiple(undef, [ qr/\G[a-z]/ ]) ],
289 [ divide($stdtext3 => 1) ];
291 expect [ pos ], [ 0 ];
292 expect [ $_ ], [ substr($stdtext3,1) ];
298 expect [ extract_multiple(undef, [ q/([a-z]),?/ ]) ],
301 expect [ pos ], [ 5 ];
302 expect [ $_ ], [ $stdtext3 ];
307 expect [ scalar extract_multiple(undef, [ q/([a-z]),?/ ]) ],
308 [ divide($stdtext3 => 1) ];
310 expect [ pos ], [ 0 ];
311 expect [ $_ ], [ substr($stdtext3,2) ];
316 # Fails in Text-Balanced-1.95 with result ['1 ', '""', '1234']
318 expect [ extract_multiple(undef, [\&extract_quotelike]) ],
319 [ ' ', '""', '1234' ];