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