Added passing of schema arg.
[dbsrgits/SQL-Translator.git] / t / 06xsv.t
1 #!/usr/bin/perl
2 # vim: set ft=perl:
3
4 #
5 # Tests for xSV parser
6 #
7 use strict;
8 use SQL::Translator;
9 use SQL::Translator::Schema;
10 use SQL::Translator::Parser::xSV qw(parse);
11 use Test::More tests => 13;
12
13 my $tr = SQL::Translator->new;
14 my $s  = SQL::Translator::Schema->new;
15 my $data = q|One, Two, Three, Four, Five, Six, Seven
16 I, Am, Some, Data, Yo, -10, .04
17 And, So, am, I, "you crazy, crazy bastard", 500982, 1.1
18 |;
19
20 $tr->parser_args( trim_fields => 1, scan_fields => 1 );
21 my $val = parse($tr, $data, $s);
22
23 # $val holds the processed data structure.
24
25 # The data structure should have one key:
26 is(scalar keys %{$val}, 1, "One table...");
27
28 # The data structure should have a single key, named sessions
29 ok(defined $val->{'table1'} => "...named 'table1'");
30
31 # $val->{'table1'} should have a single index (since we haven't
32 # defined an index, but have defined a primary key)
33 my $indices = $val->{'table1'}->{'indices'};
34 is(scalar @{$indices}, 1, "correct index number");
35
36 is($indices->[0]->{'type'}, 'primary_key', "correct index type");
37 is($indices->[0]->{'fields'}->[0], 'One', "correct index name");
38
39 # $val->{'table1'} should have two fields, id and a_sessionn
40 my $fields = $val->{'table1'}->{'fields'};
41 is(scalar keys %{$fields} => 7 => "7 fields in %fields");
42
43 is($fields->{'One'}->{'data_type'}, 'char',
44     "\$fields->{'One'}->{'data_type'} == 'char'");
45
46 my $size = join(',', @{ $fields->{'One'}{'size'} } );
47 is( $size, 3, "\$fields->{'One'}->{'size'} == 3");
48
49 is($fields->{'One'}->{'is_primary_key'} => 1,
50     "\$fields->{'One'}->{'is_primary_key'} == 1");
51
52 ok(! defined $fields->{'Two'}->{'is_primary_key'},
53     "\$fields->{'Two'}->{'is_primary_key'} == 0");
54
55 is($fields->{'Six'}->{'data_type'}, 'integer',
56     "\$fields->{'Six'}->{'data_type'} == 'integer'");
57
58 is($fields->{'Seven'}->{'data_type'}, 'float',
59     "\$fields->{'Seven'}->{'data_type'} == 'float'");
60
61 # Test that the order is being maintained by the internal order
62 # data element
63 my @order = sort { $fields->{$a}->{'order'}
64                              <=>
65                    $fields->{$b}->{'order'}
66                  } keys %{$fields};
67 ok($order[0] eq 'One' && $order[4] eq 'Five', "Ordering OK");