Added support for proper enums under pg (as of 8.3), with pg version check, and defer...
[dbsrgits/SQL-Translator.git] / t / 33tt-table-producer.t
1 #!/usr/bin/perl -w 
2 # vim:filetype=perl
3
4 # Before `make install' is performed this script should be runnable with
5 # `make test'. After `make install' it should work as `perl test.pl'
6
7 use strict;
8 use Test::More;
9 use Test::Exception;
10 use Test::SQL::Translator qw(maybe_plan);
11
12 use Data::Dumper;
13 use vars '%opt';
14 BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; }
15 use constant DEBUG => (exists $opt{d} ? 1 : 0);
16
17 use FindBin qw/$Bin/;
18 use File::Temp qw/tempdir/;
19
20 # Testing 1,2,3,4...
21 #=============================================================================
22
23 BEGIN {
24     eval {require Template;};
25     plan skip_all => "Template v2.15+ is incompatible with SQL::Translator 0.08+"
26       if !$@ && Template->VERSION >= 2.15;
27
28     maybe_plan(8, 'Template', 'Test::Differences')
29 }
30 use Test::Differences;
31
32 use SQL::Translator;
33 use SQL::Translator::Producer::TT::Table;
34
35 # Setup a tmp directory we can output files to.
36 my $tdir = tempdir( CLEANUP => 1 );
37
38 # Parse the test XML schema
39 my $obj;
40 $obj = SQL::Translator->new(
41     debug          => DEBUG, #$opt{d},
42     show_warnings  => 1,
43     add_drop_table => 1,
44     from           => "SQLite",
45     filename       => "$Bin/data/sqlite/create.sql",
46     to             => "TT-Table",
47     producer_args  => {
48         tt_table => "$Bin/data/template/table.tt",
49         mk_files      => 1,
50         mk_files_base => "$tdir",
51         mk_file_ext   => "txt",
52         on_exists     => "replace",
53     },
54 );
55 my $out;
56 lives_ok { $out = $obj->translate; }  "Translate ran";
57 ok $out ne ""                        ,"Produced something!";
58 warn $obj->error unless $out;
59
60 # Normal output looks ok
61 local $/ = undef; # slurp
62 eq_or_diff $out, <DATA>              ,"Output looks right";
63
64 # File output
65 my @files = glob("$tdir/*.txt");
66 ok( @files == 2, "Wrote 2 files." );
67 is( $files[0], "$tdir/person.txt" , "Wrote person.txt" );
68 is( $files[1], "$tdir/pet.txt"    , "Wrote pet.txt" );
69
70 open(FILE, "$tdir/person.txt") || die "Couldn't open $tdir/person.txt : $!";
71 eq_or_diff <FILE>, qq{Table: person
72   Primary Key:  person_id
73   Foreign Keys: 
74   Data Fields:  name, age, weight, iq, description
75
76 }
77 , "person.txt looks right";
78 close(FILE);
79
80 open(FILE, "$tdir/pet.txt") || die "Couldn't open $tdir/pet.txt : $!";
81 eq_or_diff <FILE>, qq{Table: pet
82   Primary Key:  pet_id, person_id
83   Foreign Keys: 
84   Data Fields:  name, age
85
86 }
87 , "pet.txt looks right";
88 close(FILE);
89
90
91 print $out if DEBUG;
92 #print "Debug:", Dumper($obj) if DEBUG;
93
94 __DATA__
95 Table: person
96   Primary Key:  person_id
97   Foreign Keys: 
98   Data Fields:  name, age, weight, iq, description
99
100 Table: pet
101   Primary Key:  pet_id, person_id
102   Foreign Keys: 
103   Data Fields:  name, age
104