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">
49 <sqlt:name></sqlt:name>
50 <sqlt:database></sqlt:database>
52 <sqlt:name>Basic</sqlt:name>
53 <sqlt:order>1</sqlt:order>
56 <sqlt:name>id</sqlt:name>
57 <sqlt:data_type>integer</sqlt:data_type>
58 <sqlt:is_auto_increment>1</sqlt:is_auto_increment>
59 <sqlt:is_primary_key>1</sqlt:is_primary_key>
60 <sqlt:is_nullable>0</sqlt:is_nullable>
61 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
62 <sqlt:order>1</sqlt:order>
63 <sqlt:size>10</sqlt:size>
64 <sqlt:comments>comment on id field</sqlt:comments>
67 <sqlt:name>title</sqlt:name>
68 <sqlt:data_type>varchar</sqlt:data_type>
69 <sqlt:default_value>hello</sqlt:default_value>
70 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
71 <sqlt:is_primary_key>0</sqlt:is_primary_key>
72 <sqlt:is_nullable>0</sqlt:is_nullable>
73 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
74 <sqlt:order>2</sqlt:order>
75 <sqlt:size>100</sqlt:size>
76 <sqlt:comments></sqlt:comments>
79 <sqlt:name>description</sqlt:name>
80 <sqlt:data_type>text</sqlt:data_type>
81 <sqlt:default_value></sqlt:default_value>
82 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
83 <sqlt:is_primary_key>0</sqlt:is_primary_key>
84 <sqlt:is_nullable>1</sqlt:is_nullable>
85 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
86 <sqlt:order>3</sqlt:order>
87 <sqlt:size>65535</sqlt:size>
88 <sqlt:comments></sqlt:comments>
91 <sqlt:name>email</sqlt:name>
92 <sqlt:data_type>varchar</sqlt:data_type>
93 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
94 <sqlt:is_primary_key>0</sqlt:is_primary_key>
95 <sqlt:is_nullable>1</sqlt:is_nullable>
96 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
97 <sqlt:order>4</sqlt:order>
98 <sqlt:size>255</sqlt:size>
99 <sqlt:comments></sqlt:comments>
104 <sqlt:fields>title</sqlt:fields>
105 <sqlt:name>titleindex</sqlt:name>
106 <sqlt:options></sqlt:options>
107 <sqlt:type>NORMAL</sqlt:type>
112 <sqlt:deferrable>1</sqlt:deferrable>
113 <sqlt:expression></sqlt:expression>
114 <sqlt:fields>id</sqlt:fields>
115 <sqlt:match_type></sqlt:match_type>
116 <sqlt:name></sqlt:name>
117 <sqlt:options></sqlt:options>
118 <sqlt:on_delete></sqlt:on_delete>
119 <sqlt:on_update></sqlt:on_update>
120 <sqlt:reference_table></sqlt:reference_table>
121 <sqlt:type>PRIMARY KEY</sqlt:type>
124 <sqlt:deferrable>1</sqlt:deferrable>
125 <sqlt:expression></sqlt:expression>
126 <sqlt:fields>email</sqlt:fields>
127 <sqlt:match_type></sqlt:match_type>
128 <sqlt:name></sqlt:name>
129 <sqlt:options></sqlt:options>
130 <sqlt:on_delete></sqlt:on_delete>
131 <sqlt:on_update></sqlt:on_update>
132 <sqlt:reference_table></sqlt:reference_table>
133 <sqlt:type>UNIQUE</sqlt:type>
140 $obj = SQL::Translator->new(
146 to => 'XML-SQLFairy',
148 lives_ok {$xml = $obj->translate($file);} "Translate (emit_empty_tags=>0) ran";
149 ok("$xml" ne "" ,"Produced something!");
150 print "XML:\n$xml" if DEBUG;
151 # Strip sqlf header with its variable date so we diff safely
152 $xml =~ s/^([^\n]*\n){7}//m;
153 eq_or_diff $xml, $ans ,"XML looks right";
156 # emit_empty_tags => 1
160 <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
161 <sqlt:name></sqlt:name>
162 <sqlt:database></sqlt:database>
164 <sqlt:name>Basic</sqlt:name>
165 <sqlt:order>2</sqlt:order>
168 <sqlt:name>id</sqlt:name>
169 <sqlt:data_type>integer</sqlt:data_type>
170 <sqlt:default_value></sqlt:default_value>
171 <sqlt:is_auto_increment>1</sqlt:is_auto_increment>
172 <sqlt:is_primary_key>1</sqlt:is_primary_key>
173 <sqlt:is_nullable>0</sqlt:is_nullable>
174 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
175 <sqlt:order>5</sqlt:order>
176 <sqlt:size>10</sqlt:size>
177 <sqlt:comments>comment on id field</sqlt:comments>
180 <sqlt:name>title</sqlt:name>
181 <sqlt:data_type>varchar</sqlt:data_type>
182 <sqlt:default_value>hello</sqlt:default_value>
183 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
184 <sqlt:is_primary_key>0</sqlt:is_primary_key>
185 <sqlt:is_nullable>0</sqlt:is_nullable>
186 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
187 <sqlt:order>6</sqlt:order>
188 <sqlt:size>100</sqlt:size>
189 <sqlt:comments></sqlt:comments>
192 <sqlt:name>description</sqlt:name>
193 <sqlt:data_type>text</sqlt:data_type>
194 <sqlt:default_value></sqlt:default_value>
195 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
196 <sqlt:is_primary_key>0</sqlt:is_primary_key>
197 <sqlt:is_nullable>1</sqlt:is_nullable>
198 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
199 <sqlt:order>7</sqlt:order>
200 <sqlt:size>65535</sqlt:size>
201 <sqlt:comments></sqlt:comments>
204 <sqlt:name>email</sqlt:name>
205 <sqlt:data_type>varchar</sqlt:data_type>
206 <sqlt:default_value></sqlt:default_value>
207 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
208 <sqlt:is_primary_key>0</sqlt:is_primary_key>
209 <sqlt:is_nullable>1</sqlt:is_nullable>
210 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
211 <sqlt:order>8</sqlt:order>
212 <sqlt:size>255</sqlt:size>
213 <sqlt:comments></sqlt:comments>
218 <sqlt:fields>title</sqlt:fields>
219 <sqlt:name>titleindex</sqlt:name>
220 <sqlt:options></sqlt:options>
221 <sqlt:type>NORMAL</sqlt:type>
226 <sqlt:deferrable>1</sqlt:deferrable>
227 <sqlt:expression></sqlt:expression>
228 <sqlt:fields>id</sqlt:fields>
229 <sqlt:match_type></sqlt:match_type>
230 <sqlt:name></sqlt:name>
231 <sqlt:options></sqlt:options>
232 <sqlt:on_delete></sqlt:on_delete>
233 <sqlt:on_update></sqlt:on_update>
234 <sqlt:reference_fields></sqlt:reference_fields>
235 <sqlt:reference_table></sqlt:reference_table>
236 <sqlt:type>PRIMARY KEY</sqlt:type>
239 <sqlt:deferrable>1</sqlt:deferrable>
240 <sqlt:expression></sqlt:expression>
241 <sqlt:fields>email</sqlt:fields>
242 <sqlt:match_type></sqlt:match_type>
243 <sqlt:name></sqlt:name>
244 <sqlt:options></sqlt:options>
245 <sqlt:on_delete></sqlt:on_delete>
246 <sqlt:on_update></sqlt:on_update>
247 <sqlt:reference_fields></sqlt:reference_fields>
248 <sqlt:reference_table></sqlt:reference_table>
249 <sqlt:type>UNIQUE</sqlt:type>
257 $obj = SQL::Translator->new(
263 to => 'XML-SQLFairy',
264 producer_args => { emit_empty_tags => 1 },
266 lives_ok { $xml=$obj->translate($file); } "Translate (emit_empty_tags=>1) ran";
267 ok("$xml" ne "" ,"Produced something!");
268 print "XML emit_empty_tags=>1:\n$xml" if DEBUG;
269 # Strip sqlf header with its variable date so we diff safely
270 $xml =~ s/^([^\n]*\n){7}//m;
271 eq_or_diff $xml, $ans ,"XML looks right";
280 <sqlt:schema database="" name="" xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
281 <sqlt:table order="3" name="Basic">
283 <sqlt:field is_primary_key="1" is_foreign_key="0" name="id" comments="comment on id field" size="10" data_type="integer" is_auto_increment="1" order="9" is_nullable="0" />
284 <sqlt:field is_primary_key="0" is_foreign_key="0" name="title" comments="" size="100" is_auto_increment="0" data_type="varchar" order="10" default_value="hello" is_nullable="0" />
285 <sqlt:field is_primary_key="0" is_foreign_key="0" name="description" comments="" size="65535" is_auto_increment="0" data_type="text" order="11" default_value="" is_nullable="1" />
286 <sqlt:field is_primary_key="0" is_foreign_key="0" name="email" comments="" size="255" is_auto_increment="0" data_type="varchar" order="12" is_nullable="1" />
289 <sqlt:index options="" name="titleindex" fields="title" type="NORMAL" />
292 <sqlt:constraint options="" match_type="" deferrable="1" name="" on_update="" reference_table="" on_delete="" fields="id" expression="" type="PRIMARY KEY" />
293 <sqlt:constraint options="" match_type="" deferrable="1" name="" on_update="" reference_table="" on_delete="" fields="email" expression="" type="UNIQUE" />
299 $obj = SQL::Translator->new(
305 to => "XML-SQLFairy",
306 producer_args => { attrib_values => 1 },
308 lives_ok {$xml = $obj->translate($file);} "Translate (attrib_values=>1) ran";
309 ok("$xml" ne "" ,"Produced something!");
310 print "XML attrib_values=>1:\n$xml" if DEBUG;
311 # Strip sqlf header with its variable date so we diff safely
312 $xml =~ s/^([^\n]*\n){7}//m;
313 eq_or_diff $xml, $ans ,"XML looks right";