Commit | Line | Data |
e2158c40 |
1 | #!/usr/bin/perl |
2 | # vim: set ft=perl: |
3 | # |
4 | # |
5 | |
e2158c40 |
6 | use strict; |
7 | |
8 | use SQL::Translator; |
44fb27ae |
9 | use Test::More tests => 6; |
e2158c40 |
10 | |
11 | sub silly_parser { |
12 | my ($tr, $data) = @_; |
13 | my $pargs = $tr->parser_args; |
14 | |
15 | my @fields = split /$pargs->{'delimiter'}/, $data; |
16 | |
17 | return \@fields; |
18 | } |
19 | |
20 | # The "data" to be parsed |
21 | my $data = q(Id|Name|Phone Number|Favorite Flavor|); |
22 | |
23 | my $tr = SQL::Translator->new; |
24 | |
25 | # Pass parser_args as an explicit method call |
26 | $tr->parser(\&silly_parser); |
27 | $tr->parser_args(delimiter => '\|'); |
28 | |
29 | my $pargs = $tr->parser_args; |
30 | my $parsed = $tr->translate(\$data); |
31 | |
44fb27ae |
32 | is($pargs->{'delimiter'}, '\|', |
33 | "parser_args works when called directly"); |
34 | is(scalar @{$parsed}, 4, |
35 | "right number of fields"); |
e2158c40 |
36 | |
37 | # Now, pass parser_args indirectly... |
38 | $tr->parser(\&silly_parser, { delimiter => "\t" }); |
39 | $data =~ s/\|/\t/g; |
40 | |
41 | $pargs = $tr->parser_args; |
42 | $parsed = $tr->translate(\$data); |
43 | |
44fb27ae |
44 | is($pargs->{'delimiter'}, "\t", |
45 | "parser_args works when called indirectly"); |
e2158c40 |
46 | |
44fb27ae |
47 | is(scalar @{$parsed}, 4, |
48 | "right number of fields with new delimiter"); |
e2158c40 |
49 | |
50 | undef $tr; |
51 | $tr = SQL::Translator->new(parser => \&silly_parser, |
52 | parser_args => { delimiter => ":" }); |
53 | $data =~ s/\t/:/g; |
54 | $pargs = $tr->parser_args; |
55 | $parsed = $tr->translate(\$data); |
56 | |
44fb27ae |
57 | is($pargs->{'delimiter'}, ":", |
58 | "parser_args works when called as constructor arg"); |
e2158c40 |
59 | |
44fb27ae |
60 | is(scalar @{$parsed}, 4, |
61 | "right number of fields with new delimiter"); |
e2158c40 |
62 | |