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'
15 BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; }
16 use constant DEBUG => (exists $opt{d} ? 1 : 0);
17 use constant TRACE => (exists $opt{t} ? 1 : 0);
21 my $file = "$Bin/data/mysql/sqlfxml-producer-basic.sql";
25 #=============================================================================
27 eval { require XML::Writer; };
28 if ($@ && $@ =~ m!locate XML::Writer.pm in!) {
29 plan skip_all => "You need XML::Writer to use XML::SQLFairy.";
31 eval { require Test::Differences; };
32 if ($@ && $@ =~ m!locate Test/Differences.pm in!) {
33 plan skip_all => "You need Test::Differences for this test.";
35 use Test::Differences;
39 use SQL::Translator::Producer::XML::SQLFairy;
44 # emit_empty_tags => 0
48 <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
50 <sqlt:name>Basic</sqlt:name>
51 <sqlt:order>1</sqlt:order>
54 <sqlt:name>id</sqlt:name>
55 <sqlt:data_type>integer</sqlt:data_type>
56 <sqlt:is_auto_increment>1</sqlt:is_auto_increment>
57 <sqlt:is_primary_key>1</sqlt:is_primary_key>
58 <sqlt:is_nullable>0</sqlt:is_nullable>
59 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
60 <sqlt:order>1</sqlt:order>
61 <sqlt:size>10</sqlt:size>
64 <sqlt:name>title</sqlt:name>
65 <sqlt:data_type>varchar</sqlt:data_type>
66 <sqlt:default_value>hello</sqlt:default_value>
67 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
68 <sqlt:is_primary_key>0</sqlt:is_primary_key>
69 <sqlt:is_nullable>0</sqlt:is_nullable>
70 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
71 <sqlt:order>2</sqlt:order>
72 <sqlt:size>100</sqlt:size>
75 <sqlt:name>description</sqlt:name>
76 <sqlt:data_type>text</sqlt:data_type>
77 <sqlt:default_value></sqlt:default_value>
78 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
79 <sqlt:is_primary_key>0</sqlt:is_primary_key>
80 <sqlt:is_nullable>1</sqlt:is_nullable>
81 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
82 <sqlt:order>3</sqlt:order>
83 <sqlt:size>65535</sqlt:size>
86 <sqlt:name>email</sqlt:name>
87 <sqlt:data_type>varchar</sqlt:data_type>
88 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
89 <sqlt:is_primary_key>0</sqlt:is_primary_key>
90 <sqlt:is_nullable>1</sqlt:is_nullable>
91 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
92 <sqlt:order>4</sqlt:order>
93 <sqlt:size>255</sqlt:size>
98 <sqlt:fields>title</sqlt:fields>
99 <sqlt:name>titleindex</sqlt:name>
100 <sqlt:options></sqlt:options>
101 <sqlt:type>NORMAL</sqlt:type>
106 <sqlt:deferrable>1</sqlt:deferrable>
107 <sqlt:expression></sqlt:expression>
108 <sqlt:fields>id</sqlt:fields>
109 <sqlt:match_type></sqlt:match_type>
110 <sqlt:name></sqlt:name>
111 <sqlt:options></sqlt:options>
112 <sqlt:on_delete></sqlt:on_delete>
113 <sqlt:on_update></sqlt:on_update>
114 <sqlt:reference_table></sqlt:reference_table>
115 <sqlt:type>PRIMARY KEY</sqlt:type>
118 <sqlt:deferrable>1</sqlt:deferrable>
119 <sqlt:expression></sqlt:expression>
120 <sqlt:fields>email</sqlt:fields>
121 <sqlt:match_type></sqlt:match_type>
122 <sqlt:name></sqlt:name>
123 <sqlt:options></sqlt:options>
124 <sqlt:on_delete></sqlt:on_delete>
125 <sqlt:on_update></sqlt:on_update>
126 <sqlt:reference_table></sqlt:reference_table>
127 <sqlt:type>UNIQUE</sqlt:type>
134 $obj = SQL::Translator->new(
140 to => 'XML-SQLFairy',
142 lives_ok { $xml = $obj->translate($file); } "Translate ran";
143 ok("$xml" ne "" ,"Produced something!");
144 print "XML:\n$xml" if DEBUG;
145 # Strip sqlf header with its variable date so we diff safely
146 $xml =~ s/^([^\n]*\n){7}//m;
147 eq_or_diff $xml, $ans ,"XML looks right";
150 # emit_empty_tags => 1
154 <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
156 <sqlt:name>Basic</sqlt:name>
157 <sqlt:order>2</sqlt:order>
160 <sqlt:name>id</sqlt:name>
161 <sqlt:data_type>integer</sqlt:data_type>
162 <sqlt:default_value></sqlt:default_value>
163 <sqlt:is_auto_increment>1</sqlt:is_auto_increment>
164 <sqlt:is_primary_key>1</sqlt:is_primary_key>
165 <sqlt:is_nullable>0</sqlt:is_nullable>
166 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
167 <sqlt:order>5</sqlt:order>
168 <sqlt:size>10</sqlt:size>
171 <sqlt:name>title</sqlt:name>
172 <sqlt:data_type>varchar</sqlt:data_type>
173 <sqlt:default_value>hello</sqlt:default_value>
174 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
175 <sqlt:is_primary_key>0</sqlt:is_primary_key>
176 <sqlt:is_nullable>0</sqlt:is_nullable>
177 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
178 <sqlt:order>6</sqlt:order>
179 <sqlt:size>100</sqlt:size>
182 <sqlt:name>description</sqlt:name>
183 <sqlt:data_type>text</sqlt:data_type>
184 <sqlt:default_value></sqlt:default_value>
185 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
186 <sqlt:is_primary_key>0</sqlt:is_primary_key>
187 <sqlt:is_nullable>1</sqlt:is_nullable>
188 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
189 <sqlt:order>7</sqlt:order>
190 <sqlt:size>65535</sqlt:size>
193 <sqlt:name>email</sqlt:name>
194 <sqlt:data_type>varchar</sqlt:data_type>
195 <sqlt:default_value></sqlt:default_value>
196 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
197 <sqlt:is_primary_key>0</sqlt:is_primary_key>
198 <sqlt:is_nullable>1</sqlt:is_nullable>
199 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
200 <sqlt:order>8</sqlt:order>
201 <sqlt:size>255</sqlt:size>
206 <sqlt:fields>title</sqlt:fields>
207 <sqlt:name>titleindex</sqlt:name>
208 <sqlt:options></sqlt:options>
209 <sqlt:type>NORMAL</sqlt:type>
214 <sqlt:deferrable>1</sqlt:deferrable>
215 <sqlt:expression></sqlt:expression>
216 <sqlt:fields>id</sqlt:fields>
217 <sqlt:match_type></sqlt:match_type>
218 <sqlt:name></sqlt:name>
219 <sqlt:options></sqlt:options>
220 <sqlt:on_delete></sqlt:on_delete>
221 <sqlt:on_update></sqlt:on_update>
222 <sqlt:reference_fields></sqlt:reference_fields>
223 <sqlt:reference_table></sqlt:reference_table>
224 <sqlt:type>PRIMARY KEY</sqlt:type>
227 <sqlt:deferrable>1</sqlt:deferrable>
228 <sqlt:expression></sqlt:expression>
229 <sqlt:fields>email</sqlt:fields>
230 <sqlt:match_type></sqlt:match_type>
231 <sqlt:name></sqlt:name>
232 <sqlt:options></sqlt:options>
233 <sqlt:on_delete></sqlt:on_delete>
234 <sqlt:on_update></sqlt:on_update>
235 <sqlt:reference_fields></sqlt:reference_fields>
236 <sqlt:reference_table></sqlt:reference_table>
237 <sqlt:type>UNIQUE</sqlt:type>
245 $obj = SQL::Translator->new(
251 to => 'XML-SQLFairy',
252 producer_args => { emit_empty_tags => 1 },
254 lives_ok { $xml = $obj->translate($file); } "Translate ran";
255 ok("$xml" ne "" ,"Produced something!");
256 print "XML emit_empty_tags=>1:\n$xml" if DEBUG;
257 # Strip sqlf header with its variable date so we diff safely
258 $xml =~ s/^([^\n]*\n){7}//m;
259 eq_or_diff $xml, $ans ,"XML looks right";
260 # This diff probably isn't a very good test! Should really check the
261 # result with XPath or something, but that would take ages to write ;-)
263 # TODO Make this a real test of attrib_values
264 # $obj = SQL::Translator->new(
267 # show_warnings => 1,
268 # add_drop_table => 1,
271 # producer_args => { attrib_values => 1 },
273 # print $obj->translate($file);