X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F18ttschema-producer.t;h=a9b6510dbf3b680583c1a27f3331720c0861bef3;hb=7ed7402c72e81504c8acd4f1bba4837dc69390f0;hp=a398f6696286bd67e4d55e24960e64c641048aff;hpb=2b2601b506861fa81674c960752231365bdbf436;p=dbsrgits%2FSQL-Translator.git diff --git a/t/18ttschema-producer.t b/t/18ttschema-producer.t index a398f66..a9b6510 100644 --- a/t/18ttschema-producer.t +++ b/t/18ttschema-producer.t @@ -4,61 +4,96 @@ # Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' +use strict; use Test::More; use Test::Exception; +use Test::SQL::Translator qw(maybe_plan); use Data::Dumper; -BEGIN { our %opt; map { $opt{$_}=1 if s/^-// } @ARGV; } -use constant DEBUG => (exists $opt{d} ? 1 : 0); -local $SIG{__WARN__} = sub { diag "[warn] ", @_; }; - use FindBin qw/$Bin/; # Testing 1,2,3,4... #============================================================================= -eval { require Template; }; -if ($@ && $@ =~ m!locate Template.pm in!) { - plan skip_all => "You need Template Toolkit to run this test."; -} -eval { require Test::Differences; }; -if ($@ && $@ =~ m!locate Test/Differences.pm in!) { - plan skip_all => "You need Test::Differences for this test."; +BEGIN { + maybe_plan(6, + 'XML::XPath', + 'SQL::Translator::Parser::XML::SQLFairy', + 'Template', + 'Test::Differences' + ) } use Test::Differences; -plan tests => 3; - + use SQL::Translator; use SQL::Translator::Producer::TTSchema; -# Parse the test XML schema -our $obj; -$obj = SQL::Translator->new( - debug => DEBUG, #$opt{d}, - show_warnings => 1, - add_drop_table => 1, - from => "SqlfXML", - filename => "$Bin/data/xml/schema-basic.xml", - to => "TTSchema", - producer_args => { - ttfile => "$Bin/data/template/basic.tt", - }, -); -my $out; -lives_ok { $out = $obj->translate; } "Produced template"; -ok $out ne "" ,"Output has some content"; -local $/ = undef; # slurp -eq_or_diff $out, ,"Output looks right"; -# I'm sure if this diff is the best test, it is probaly too sensitive. But it -# at least it will blow up if anything changes! - -print $out if DEBUG; -#print "Debug:", Dumper($obj) if DEBUG; +# Main test. Template whole schema and test tt_vars +{ + my $obj; + $obj = SQL::Translator->new( + show_warnings => 1, + from => "XML-SQLFairy", + filename => "$Bin/data/xml/schema.xml", + to => "TTSchema", + producer_args => { + ttfile => "$Bin/data/template/basic.tt", +# ttfile => "$Bin/data/template/test.tt", + tt_vars => { + foo => 'bar', + hello => 'world', + }, + }, + ); + my $out; + lives_ok { $out = $obj->translate; } "Translate ran"; +# print STDERR "Output: $out\n"; + ok $out ne "" ,"Produced something!"; + local $/ = undef; # slurp + eq_or_diff $out, ,"Output looks right"; +} + +# Test passing of Template config +{ + my $tmpl = q{ + [%- FOREACH table = schema.get_tables %] + Table: $table + [%- END %]}; + my $obj; + $obj = SQL::Translator->new( + show_warnings => 1, + from => "XML-SQLFairy", + filename => "$Bin/data/xml/schema.xml", + to => "TTSchema", + producer_args => { + ttfile => \$tmpl, + tt_conf => { + INTERPOLATE => 1, + }, + tt_vars => { + foo => 'bar', + hello => 'world', + }, + }, + ); + my $out; + lives_ok { $out = $obj->translate; } "Translate ran"; + ok $out ne "" ,"Produced something!"; + local $/ = undef; # slurp + eq_or_diff $out, q{ + Table: Basic + Table: Another} + ,"Output looks right"; +} + __DATA__ Schema: Database: +Foo: bar +Hello: world + Table: Basic ========================================================================== @@ -75,7 +110,6 @@ Fields foreign_key_reference: is_valid: 1 order: 1 - extra: table: Basic title @@ -90,7 +124,6 @@ Fields foreign_key_reference: is_valid: 1 order: 2 - extra: table: Basic description @@ -105,7 +138,6 @@ Fields foreign_key_reference: is_valid: 1 order: 3 - extra: table: Basic email @@ -120,7 +152,6 @@ Fields foreign_key_reference: is_valid: 1 order: 4 - extra: table: Basic explicitnulldef @@ -135,7 +166,6 @@ Fields foreign_key_reference: is_valid: 1 order: 5 - extra: table: Basic explicitemptystring @@ -150,7 +180,48 @@ Fields foreign_key_reference: is_valid: 1 order: 6 - extra: + table: Basic + + emptytagdef + data_type: varchar + size: 0 + is_nullable: 1 + default_value: + is_primary_key: 0 + is_unique: 0 + is_auto_increment: 0 + is_foreign_key: 0 + foreign_key_reference: + is_valid: 1 + order: 7 + table: Basic + + another_id + data_type: int + size: 10 + is_nullable: 1 + default_value: 2 + is_primary_key: 0 + is_unique: 0 + is_auto_increment: 0 + is_foreign_key: 1 + foreign_key_reference: Another + is_valid: 1 + order: 8 + table: Basic + + timest + data_type: timestamp + size: 0 + is_nullable: 1 + default_value: + is_primary_key: 0 + is_unique: 0 + is_auto_increment: 0 + is_foreign_key: 0 + foreign_key_reference: + is_valid: 1 + order: 9 table: Basic @@ -190,3 +261,51 @@ Constraints options: is_valid: 1 + ? + type: FOREIGN KEY + fields: another_id + expression: + match_type: + reference_fields: id + reference_table: Another + deferrable: 1 + on_delete: + on_update: + options: + is_valid: 1 + +Table: Another +========================================================================== + +Fields + id + data_type: int + size: 10 + is_nullable: 0 + default_value: + is_primary_key: 1 + is_unique: 0 + is_auto_increment: 1 + is_foreign_key: 0 + foreign_key_reference: + is_valid: 1 + order: 10 + table: Another + + +Indices + +Constraints + ? + type: PRIMARY KEY + fields: id + expression: + match_type: + reference_fields: + reference_table: + deferrable: 1 + on_delete: + on_update: + options: + is_valid: 1 +