Commit | Line | Data |
0be5b227 |
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 { |
f51d8e46 |
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 | |
0be5b227 |
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 |
41fa63fd |
73 | Foreign Keys: |
0be5b227 |
74 | Data Fields: name, age, weight, iq, description |
75 | |
76 | } |
77 | , "person.txt looks right"; |
41fa63fd |
78 | close(FILE); |
0be5b227 |
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 |
41fa63fd |
83 | Foreign Keys: |
0be5b227 |
84 | Data Fields: name, age |
85 | |
86 | } |
41fa63fd |
87 | , "pet.txt looks right"; |
88 | close(FILE); |
0be5b227 |
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 |
41fa63fd |
97 | Foreign Keys: |
0be5b227 |
98 | Data Fields: name, age, weight, iq, description |
99 | |
100 | Table: pet |
101 | Primary Key: pet_id, person_id |
41fa63fd |
102 | Foreign Keys: |
0be5b227 |
103 | Data Fields: name, age |
104 | |