Bring tests to passing.
[dbsrgits/SQL-Translator.git] / t / 17sqlfxml-producer.t
CommitLineData
d0c12b9f 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
1ea530d4 7local $^W = 0;
8
d0c12b9f 9use strict;
10use Test::More;
11use Test::Exception;
12
13use Data::Dumper;
2e11379e 14my %opt;
d0c12b9f 15BEGIN { map { $opt{$_}=1 if s/^-// } @ARGV; }
16use constant DEBUG => (exists $opt{d} ? 1 : 0);
17use constant TRACE => (exists $opt{t} ? 1 : 0);
18
19use FindBin qw/$Bin/;
20
21my $file = "$Bin/data/mysql/sqlfxml-producer-basic.sql";
22
23
24# Testing 1,2,3,4...
25#=============================================================================
26
27eval { require XML::Writer; };
28if ($@ && $@ =~ m!locate XML::Writer.pm in!) {
ac62dff1 29 plan skip_all => "You need XML::Writer to use XML::SQLFairy.";
d0c12b9f 30}
31eval { require Test::Differences; };
32if ($@ && $@ =~ m!locate Test/Differences.pm in!) {
33 plan skip_all => "You need Test::Differences for this test.";
34}
35use Test::Differences;
f11724ad 36plan tests => 9;
d0c12b9f 37
38use SQL::Translator;
ac62dff1 39use SQL::Translator::Producer::XML::SQLFairy;
d0c12b9f 40
41my ($obj,$ans,$xml);
42
43#
44# emit_empty_tags => 0
45#
46
47$ans = <<EOXML;
48<sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
1caf2bb2 49 <sqlt:database></sqlt:database>
3b80481c 50 <sqlt:name></sqlt:name>
d0c12b9f 51 <sqlt:table>
52 <sqlt:name>Basic</sqlt:name>
53 <sqlt:order>1</sqlt:order>
54 <sqlt:fields>
55 <sqlt:field>
3b80481c 56 <sqlt:comments>comment on id field</sqlt:comments>
d0c12b9f 57 <sqlt:data_type>integer</sqlt:data_type>
58 <sqlt:is_auto_increment>1</sqlt:is_auto_increment>
d0c12b9f 59 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
3b80481c 60 <sqlt:is_nullable>0</sqlt:is_nullable>
61 <sqlt:is_primary_key>1</sqlt:is_primary_key>
62 <sqlt:name>id</sqlt:name>
d0c12b9f 63 <sqlt:order>1</sqlt:order>
64 <sqlt:size>10</sqlt:size>
65 </sqlt:field>
66 <sqlt:field>
3b80481c 67 <sqlt:comments></sqlt:comments>
d0c12b9f 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>
d0c12b9f 71 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
3b80481c 72 <sqlt:is_nullable>0</sqlt:is_nullable>
73 <sqlt:is_primary_key>0</sqlt:is_primary_key>
74 <sqlt:name>title</sqlt:name>
d0c12b9f 75 <sqlt:order>2</sqlt:order>
76 <sqlt:size>100</sqlt:size>
77 </sqlt:field>
78 <sqlt:field>
3b80481c 79 <sqlt:comments></sqlt:comments>
d0c12b9f 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>
d0c12b9f 83 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
3b80481c 84 <sqlt:is_nullable>1</sqlt:is_nullable>
85 <sqlt:is_primary_key>0</sqlt:is_primary_key>
86 <sqlt:name>description</sqlt:name>
d0c12b9f 87 <sqlt:order>3</sqlt:order>
ac62dff1 88 <sqlt:size>65535</sqlt:size>
d0c12b9f 89 </sqlt:field>
90 <sqlt:field>
3b80481c 91 <sqlt:comments></sqlt:comments>
d0c12b9f 92 <sqlt:data_type>varchar</sqlt:data_type>
93 <sqlt:is_auto_increment>0</sqlt:is_auto_increment>
d0c12b9f 94 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
3b80481c 95 <sqlt:is_nullable>1</sqlt:is_nullable>
96 <sqlt:is_primary_key>0</sqlt:is_primary_key>
97 <sqlt:name>email</sqlt:name>
d0c12b9f 98 <sqlt:order>4</sqlt:order>
99 <sqlt:size>255</sqlt:size>
100 </sqlt:field>
101 </sqlt:fields>
102 <sqlt:indices>
103 <sqlt:index>
104 <sqlt:fields>title</sqlt:fields>
105 <sqlt:name>titleindex</sqlt:name>
106 <sqlt:options></sqlt:options>
107 <sqlt:type>NORMAL</sqlt:type>
108 </sqlt:index>
109 </sqlt:indices>
110 <sqlt:constraints>
111 <sqlt:constraint>
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>
d0c12b9f 117 <sqlt:on_delete></sqlt:on_delete>
118 <sqlt:on_update></sqlt:on_update>
3b80481c 119 <sqlt:options></sqlt:options>
d0c12b9f 120 <sqlt:reference_table></sqlt:reference_table>
121 <sqlt:type>PRIMARY KEY</sqlt:type>
122 </sqlt:constraint>
123 <sqlt:constraint>
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>
d0c12b9f 129 <sqlt:on_delete></sqlt:on_delete>
130 <sqlt:on_update></sqlt:on_update>
3b80481c 131 <sqlt:options></sqlt:options>
d0c12b9f 132 <sqlt:reference_table></sqlt:reference_table>
133 <sqlt:type>UNIQUE</sqlt:type>
134 </sqlt:constraint>
135 </sqlt:constraints>
136 </sqlt:table>
137</sqlt:schema>
138EOXML
139
140$obj = SQL::Translator->new(
141 debug => DEBUG,
142 trace => TRACE,
143 show_warnings => 1,
144 add_drop_table => 1,
ac62dff1 145 from => 'MySQL',
146 to => 'XML-SQLFairy',
d0c12b9f 147);
f11724ad 148lives_ok {$xml = $obj->translate($file);} "Translate (emit_empty_tags=>0) ran";
d0c12b9f 149ok("$xml" ne "" ,"Produced something!");
150print "XML:\n$xml" if DEBUG;
151# Strip sqlf header with its variable date so we diff safely
152$xml =~ s/^([^\n]*\n){7}//m;
153eq_or_diff $xml, $ans ,"XML looks right";
154
155#
156# emit_empty_tags => 1
157#
158
159$ans = <<EOXML;
160<sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
1caf2bb2 161 <sqlt:database></sqlt:database>
3b80481c 162 <sqlt:name></sqlt:name>
d0c12b9f 163 <sqlt:table>
164 <sqlt:name>Basic</sqlt:name>
165 <sqlt:order>2</sqlt:order>
166 <sqlt:fields>
167 <sqlt:field>
3b80481c 168 <sqlt:comments>comment on id field</sqlt:comments>
d0c12b9f 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>
d0c12b9f 172 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
3b80481c 173 <sqlt:is_nullable>0</sqlt:is_nullable>
174 <sqlt:is_primary_key>1</sqlt:is_primary_key>
175 <sqlt:name>id</sqlt:name>
d0c12b9f 176 <sqlt:order>5</sqlt:order>
177 <sqlt:size>10</sqlt:size>
178 </sqlt:field>
179 <sqlt:field>
3b80481c 180 <sqlt:comments></sqlt:comments>
d0c12b9f 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>
d0c12b9f 184 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
3b80481c 185 <sqlt:is_nullable>0</sqlt:is_nullable>
186 <sqlt:is_primary_key>0</sqlt:is_primary_key>
187 <sqlt:name>title</sqlt:name>
d0c12b9f 188 <sqlt:order>6</sqlt:order>
189 <sqlt:size>100</sqlt:size>
190 </sqlt:field>
191 <sqlt:field>
3b80481c 192 <sqlt:comments></sqlt:comments>
d0c12b9f 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>
d0c12b9f 196 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
3b80481c 197 <sqlt:is_nullable>1</sqlt:is_nullable>
198 <sqlt:is_primary_key>0</sqlt:is_primary_key>
199 <sqlt:name>description</sqlt:name>
d0c12b9f 200 <sqlt:order>7</sqlt:order>
ac62dff1 201 <sqlt:size>65535</sqlt:size>
d0c12b9f 202 </sqlt:field>
203 <sqlt:field>
3b80481c 204 <sqlt:comments></sqlt:comments>
d0c12b9f 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>
d0c12b9f 208 <sqlt:is_foreign_key>0</sqlt:is_foreign_key>
3b80481c 209 <sqlt:is_nullable>1</sqlt:is_nullable>
210 <sqlt:is_primary_key>0</sqlt:is_primary_key>
211 <sqlt:name>email</sqlt:name>
d0c12b9f 212 <sqlt:order>8</sqlt:order>
213 <sqlt:size>255</sqlt:size>
214 </sqlt:field>
215 </sqlt:fields>
216 <sqlt:indices>
217 <sqlt:index>
218 <sqlt:fields>title</sqlt:fields>
219 <sqlt:name>titleindex</sqlt:name>
220 <sqlt:options></sqlt:options>
221 <sqlt:type>NORMAL</sqlt:type>
222 </sqlt:index>
223 </sqlt:indices>
224 <sqlt:constraints>
225 <sqlt:constraint>
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>
d0c12b9f 231 <sqlt:on_delete></sqlt:on_delete>
232 <sqlt:on_update></sqlt:on_update>
3b80481c 233 <sqlt:options></sqlt:options>
d0c12b9f 234 <sqlt:reference_fields></sqlt:reference_fields>
235 <sqlt:reference_table></sqlt:reference_table>
236 <sqlt:type>PRIMARY KEY</sqlt:type>
237 </sqlt:constraint>
238 <sqlt:constraint>
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>
d0c12b9f 244 <sqlt:on_delete></sqlt:on_delete>
245 <sqlt:on_update></sqlt:on_update>
3b80481c 246 <sqlt:options></sqlt:options>
d0c12b9f 247 <sqlt:reference_fields></sqlt:reference_fields>
248 <sqlt:reference_table></sqlt:reference_table>
249 <sqlt:type>UNIQUE</sqlt:type>
250 </sqlt:constraint>
251 </sqlt:constraints>
252 </sqlt:table>
253</sqlt:schema>
254EOXML
255
256undef $obj;
257$obj = SQL::Translator->new(
258 debug => DEBUG,
259 trace => TRACE,
260 show_warnings => 1,
261 add_drop_table => 1,
ac62dff1 262 from => 'MySQL',
263 to => 'XML-SQLFairy',
d0c12b9f 264 producer_args => { emit_empty_tags => 1 },
265);
f11724ad 266lives_ok { $xml=$obj->translate($file); } "Translate (emit_empty_tags=>1) ran";
d0c12b9f 267ok("$xml" ne "" ,"Produced something!");
268print "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;
271eq_or_diff $xml, $ans ,"XML looks right";
d0c12b9f 272
f11724ad 273
274
275#
276# attrib_values => 1
277#
278
279$ans = <<EOXML;
280<sqlt:schema database="" name="" xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml">
281 <sqlt:table order="3" name="Basic">
282 <sqlt:fields>
3b80481c 283 <sqlt:field comments="comment on id field" is_primary_key="1" data_type="integer" name="id" is_foreign_key="0" is_auto_increment="1" is_nullable="0" order="9" size="10" />
284 <sqlt:field comments="" is_primary_key="0" data_type="varchar" name="title" is_foreign_key="0" is_nullable="0" is_auto_increment="0" order="10" size="100" default_value="hello" />
285 <sqlt:field comments="" is_primary_key="0" data_type="text" name="description" is_foreign_key="0" is_nullable="1" is_auto_increment="0" order="11" size="65535" default_value="" />
286 <sqlt:field comments="" is_primary_key="0" data_type="varchar" name="email" is_foreign_key="0" is_nullable="1" is_auto_increment="0" order="12" size="255" />
f11724ad 287 </sqlt:fields>
288 <sqlt:indices>
289 <sqlt:index options="" name="titleindex" fields="title" type="NORMAL" />
290 </sqlt:indices>
291 <sqlt:constraints>
3b80481c 292 <sqlt:constraint reference_table="" options="" deferrable="1" name="" fields="id" on_delete="" expression="" on_update="" match_type="" type="PRIMARY KEY" />
293 <sqlt:constraint reference_table="" options="" deferrable="1" name="" fields="email" on_delete="" expression="" on_update="" match_type="" type="UNIQUE" />
f11724ad 294 </sqlt:constraints>
295 </sqlt:table>
296</sqlt:schema>
297EOXML
298
299$obj = SQL::Translator->new(
300 debug => DEBUG,
301 trace => TRACE,
302 show_warnings => 1,
303 add_drop_table => 1,
304 from => "MySQL",
305 to => "XML-SQLFairy",
306 producer_args => { attrib_values => 1 },
307);
308lives_ok {$xml = $obj->translate($file);} "Translate (attrib_values=>1) ran";
309ok("$xml" ne "" ,"Produced something!");
310print "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;
313eq_or_diff $xml, $ans ,"XML looks right";
314