X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FSQL-Translator.git;a=blobdiff_plain;f=t%2F17sqlfxml-producer.t;h=7989e35d43ea2aa0139cba66ef9cb41a249f062c;hp=29acb01ab47ecd8e5b8eeddea7f7d8cf9e8da71f;hb=c0ec0e22d3f0e3852c00daac5ef5763010b410c3;hpb=d3422086e661d79a28578bdd9ca64bfedc68fee5 diff --git a/t/17sqlfxml-producer.t b/t/17sqlfxml-producer.t index 29acb01..7989e35 100644 --- a/t/17sqlfxml-producer.t +++ b/t/17sqlfxml-producer.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl -w +#!/usr/bin/perl -w # vim:filetype=perl # Before `make install' is performed this script should be runnable with @@ -9,6 +9,7 @@ local $^W = 0; use strict; use Test::More; use Test::Exception; +use Test::SQL::Translator qw(maybe_plan); use Data::Dumper; my %opt; @@ -20,285 +21,86 @@ use FindBin qw/$Bin/; my $file = "$Bin/data/mysql/sqlfxml-producer-basic.sql"; +local $SIG{__WARN__} = sub { + CORE::warn(@_) + unless $_[0] =~ m!XML/Writer!; +}; # Testing 1,2,3,4... #============================================================================= -eval { require XML::Writer; }; -if ($@ && $@ =~ m!locate XML::Writer.pm in!) { - plan skip_all => "You need XML::Writer to use XML::SQLFairy."; +BEGIN { + maybe_plan(14, + 'XML::Writer', + 'Test::Differences', + 'SQL::Translator::Producer::XML::SQLFairy'); } -eval { require Test::Differences; }; -if ($@ && $@ =~ m!locate Test/Differences.pm in!) { - plan skip_all => "You need Test::Differences for this test."; -} -use Test::Differences; -plan tests => 18; +use Test::Differences; use SQL::Translator; use SQL::Translator::Producer::XML::SQLFairy; -# -# emit_empty_tags => 0 -# +# Due to formatters being able to change style, e.g. by entries in .rc files +# in $HOME, the layout and or indent might differ slightly. As leading white +# is not important in XML, strip it when comparing +sub xml_equals { -my ($obj,$ans,$xml); - -$ans = < - - - - Basic - 1 - - - id - integer - 10 - 0 - 1 - 1 - 0 - comment on id field - 1 - - - title - varchar - 100 - 0 - hello - 0 - 0 - 0 - - 2 - - - description - text - 65535 - 1 - - 0 - 0 - 0 - - 3 - - - email - varchar - 255 - 1 - 0 - 0 - 0 - - 4 - - - - - titleindex - NORMAL - title - - - - - - - PRIMARY KEY - id - - - - - - - 1 - - - - UNIQUE - email - - - - - - - 1 - - - - -EOXML - -$obj = SQL::Translator->new( - debug => DEBUG, - trace => TRACE, - show_warnings => 1, - add_drop_table => 1, - from => 'MySQL', - to => 'XML-SQLFairy', -); -lives_ok {$xml = $obj->translate($file);} "Translate (emit_empty_tags=>0) ran"; -ok("$xml" ne "" ,"Produced something!"); -print "XML:\n$xml" if DEBUG; -# Strip sqlf header with its variable date so we diff safely -$xml =~ s/^([^\n]*\n){7}//m; -eq_or_diff $xml, $ans ,"XML looks right"; - -} # end emit_empty_tags=>0 - -# -# emit_empty_tags => 1 -# -{ -my ($obj,$ans,$xml); - -$ans = < - - - - Basic - 2 - - - id - integer - 10 - 0 - - 1 - 1 - 0 - comment on id field - 5 - - - title - varchar - 100 - 0 - hello - 0 - 0 - 0 - - 6 - - - description - text - 65535 - 1 - - 0 - 0 - 0 - - 7 - - - email - varchar - 255 - 1 - - 0 - 0 - 0 - - 8 - - - - - titleindex - NORMAL - title - - - - - - - PRIMARY KEY - id - - - - - - - - 1 - - - - UNIQUE - email - - - - - - - - 1 - - - - -EOXML - -$obj = SQL::Translator->new( - debug => DEBUG, - trace => TRACE, - show_warnings => 1, - add_drop_table => 1, - from => 'MySQL', - to => 'XML-SQLFairy', - producer_args => { emit_empty_tags => 1 }, -); -lives_ok { $xml=$obj->translate($file); } "Translate (emit_empty_tags=>1) ran"; -ok("$xml" ne "" ,"Produced something!"); -print "XML emit_empty_tags=>1:\n$xml" if DEBUG; -# Strip sqlf header with its variable date so we diff safely -$xml =~ s/^([^\n]*\n){7}//m; -eq_or_diff $xml, $ans ,"XML looks right"; - -} # end emit_empty_tags => 1 + my ($got, $expect, $msg) = (@_, "XML looks right"); + $got =~ s/^ +//gm; + $expect =~ s/^ +//gm; + eq_or_diff $got, $expect, $msg; +} # -# attrib_values => 1 +# basic stuff # { my ($obj,$ans,$xml); $ans = < - - - - - - - - - - - - - - - - + + + + + + + + + comment on id field + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
EOXML $obj = SQL::Translator->new( @@ -308,16 +110,15 @@ $obj = SQL::Translator->new( add_drop_table => 1, from => "MySQL", to => "XML-SQLFairy", - producer_args => { attrib_values => 1 }, ); -lives_ok {$xml = $obj->translate($file);} "Translate (attrib_values=>1) ran"; +$xml = $obj->translate($file) or die $obj->error; ok("$xml" ne "" ,"Produced something!"); -print "XML attrib_values=>1:\n$xml" if DEBUG; +print "XML:\n$xml" if DEBUG; # Strip sqlf header with its variable date so we diff safely -$xml =~ s/^([^\n]*\n){7}//m; -eq_or_diff $xml, $ans ,"XML looks right"; +$xml =~ s/^([^\n]*\n){7}//m; +xml_equals $xml, $ans; -} # end attrib_values => 1 +} # end basic stuff # # View @@ -327,16 +128,18 @@ eq_or_diff $xml, $ans ,"XML looks right"; my ($obj,$ans,$xml); $ans = < - - - - foo_view - select name, age from person - name,age - 1 - - + + + + + + select name, age from person + + + + + + EOXML $obj = SQL::Translator->new( @@ -355,17 +158,18 @@ EOXML name => $name, sql => $sql, fields => $fields, + extra => { hello => "world" }, schema => $s, ) or die $s->error; - + # As we have created a Schema we give translate a dummy string so that # it will run the produce. lives_ok {$xml =$obj->translate("FOO");} "Translate (View) ran"; ok("$xml" ne "" ,"Produced something!"); print "XML attrib_values=>1:\n$xml" if DEBUG; # Strip sqlf header with its variable date so we diff safely - $xml =~ s/^([^\n]*\n){7}//m; - eq_or_diff $xml, $ans ,"XML looks right"; + $xml =~ s/^([^\n]*\n){7}//m; + xml_equals $xml, $ans; } # end View # @@ -376,18 +180,26 @@ EOXML my ($obj,$ans,$xml); $ans = < - - - - foo_trigger - insert - update modified=timestamp(); - foo - after - 1 - - + + + + + + + + + +
+
+ + + + update modified=timestamp(); + + + + +
EOXML $obj = SQL::Translator->new( @@ -402,24 +214,26 @@ EOXML my $name = 'foo_trigger'; my $perform_action_when = 'after'; my $database_event = 'insert'; - my $on_table = 'foo'; my $action = 'update modified=timestamp();'; + my $table = $s->add_table( name => "Basic" ) or die $s->error; my $t = $s->add_trigger( name => $name, perform_action_when => $perform_action_when, - database_event => $database_event, - on_table => $on_table, + database_events => [$database_event], + table => $table, action => $action, + scope => 'row', + extra => { hello => "world" }, ) or die $s->error; - + # As we have created a Schema we give translate a dummy string so that # it will run the produce. lives_ok {$xml =$obj->translate("FOO");} "Translate (Trigger) ran"; ok("$xml" ne "" ,"Produced something!"); print "XML attrib_values=>1:\n$xml" if DEBUG; # Strip sqlf header with its variable date so we diff safely - $xml =~ s/^([^\n]*\n){7}//m; - eq_or_diff $xml, $ans ,"XML looks right"; + $xml =~ s/^([^\n]*\n){7}//m; + xml_equals $xml, $ans; } # end Trigger # @@ -430,18 +244,19 @@ EOXML my ($obj,$ans,$xml); $ans = < - - - - foo_proc - select foo from bar - foo,bar - Nomar - Go Sox! - 1 - - + + + + + + + + select foo from bar + Go Sox! + + + + EOXML $obj = SQL::Translator->new( @@ -464,6 +279,7 @@ EOXML parameters => $parameters, owner => $owner, comments => $comments, + extra => { hello => "world" }, ) or die $s->error; # As we have created a Schema we give translate a dummy string so that @@ -472,6 +288,82 @@ EOXML ok("$xml" ne "" ,"Produced something!"); print "XML attrib_values=>1:\n$xml" if DEBUG; # Strip sqlf header with its variable date so we diff safely - $xml =~ s/^([^\n]*\n){7}//m; - eq_or_diff $xml, $ans ,"XML looks right"; + $xml =~ s/^([^\n]*\n){7}//m; + xml_equals $xml, $ans; } # end Procedure + +# +# Field.extra +# +{ +my ($obj,$ans,$xml); + +$ans = < + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +EOXML + + $obj = SQL::Translator->new( + debug => DEBUG, + trace => TRACE, + show_warnings => 1, + add_drop_table => 1, + from => "MySQL", + to => "XML-SQLFairy", + ); + my $s = $obj->schema; + my $t = $s->add_table( name => "Basic" ) or die $s->error; + my $f = $t->add_field( + name => "foo", + data_type => "integer", + size => "10", + ) or die $t->error; + $f->extra(ZEROFILL => "1"); + + $t->add_field( + name => "bar", + data_type => "numeric", + size => "10,2", + ) or die $t->error; + $t->add_field( + name => "baz", + data_type => "decimal", + size => [8,3], + ) or die $t->error; + + + # As we have created a Schema we give translate a dummy string so that + # it will run the produce. + lives_ok {$xml =$obj->translate("FOO");} "Translate (Field.extra) ran"; + ok("$xml" ne "" ,"Produced something!"); + print "XML:\n$xml" if DEBUG; + # Strip sqlf header with its variable date so we diff safely + $xml =~ s/^([^\n]*\n){7}//m; + xml_equals $xml, $ans; +} # end extra