Commit | Line | Data |
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 |
7 | local $^W = 0; |
8 | |
d0c12b9f |
9 | use strict; |
10 | use Test::More; |
11 | use Test::Exception; |
12 | |
13 | use Data::Dumper; |
2e11379e |
14 | my %opt; |
d0c12b9f |
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); |
18 | |
19 | use FindBin qw/$Bin/; |
20 | |
21 | my $file = "$Bin/data/mysql/sqlfxml-producer-basic.sql"; |
22 | |
23 | |
24 | # Testing 1,2,3,4... |
25 | #============================================================================= |
26 | |
27 | eval { require XML::Writer; }; |
28 | if ($@ && $@ =~ m!locate XML::Writer.pm in!) { |
ac62dff1 |
29 | plan skip_all => "You need XML::Writer to use XML::SQLFairy."; |
d0c12b9f |
30 | } |
31 | eval { require Test::Differences; }; |
32 | if ($@ && $@ =~ m!locate Test/Differences.pm in!) { |
33 | plan skip_all => "You need Test::Differences for this test."; |
34 | } |
35 | use Test::Differences; |
36 | plan tests => 6; |
37 | |
38 | use SQL::Translator; |
ac62dff1 |
39 | use SQL::Translator::Producer::XML::SQLFairy; |
d0c12b9f |
40 | |
41 | my ($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"> |
49 | <sqlt:table> |
50 | <sqlt:name>Basic</sqlt:name> |
51 | <sqlt:order>1</sqlt:order> |
52 | <sqlt:fields> |
53 | <sqlt:field> |
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> |
11a08bd9 |
62 | <sqlt:comments>comment on id field</sqlt:comments> |
d0c12b9f |
63 | </sqlt:field> |
64 | <sqlt:field> |
65 | <sqlt:name>title</sqlt:name> |
66 | <sqlt:data_type>varchar</sqlt:data_type> |
67 | <sqlt:default_value>hello</sqlt:default_value> |
68 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
69 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
70 | <sqlt:is_nullable>0</sqlt:is_nullable> |
71 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
72 | <sqlt:order>2</sqlt:order> |
73 | <sqlt:size>100</sqlt:size> |
11a08bd9 |
74 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
75 | </sqlt:field> |
76 | <sqlt:field> |
77 | <sqlt:name>description</sqlt:name> |
78 | <sqlt:data_type>text</sqlt:data_type> |
79 | <sqlt:default_value></sqlt:default_value> |
80 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
81 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
82 | <sqlt:is_nullable>1</sqlt:is_nullable> |
83 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
84 | <sqlt:order>3</sqlt:order> |
ac62dff1 |
85 | <sqlt:size>65535</sqlt:size> |
11a08bd9 |
86 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
87 | </sqlt:field> |
88 | <sqlt:field> |
89 | <sqlt:name>email</sqlt:name> |
90 | <sqlt:data_type>varchar</sqlt:data_type> |
91 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
92 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
93 | <sqlt:is_nullable>1</sqlt:is_nullable> |
94 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
95 | <sqlt:order>4</sqlt:order> |
96 | <sqlt:size>255</sqlt:size> |
11a08bd9 |
97 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
98 | </sqlt:field> |
99 | </sqlt:fields> |
100 | <sqlt:indices> |
101 | <sqlt:index> |
102 | <sqlt:fields>title</sqlt:fields> |
103 | <sqlt:name>titleindex</sqlt:name> |
104 | <sqlt:options></sqlt:options> |
105 | <sqlt:type>NORMAL</sqlt:type> |
106 | </sqlt:index> |
107 | </sqlt:indices> |
108 | <sqlt:constraints> |
109 | <sqlt:constraint> |
110 | <sqlt:deferrable>1</sqlt:deferrable> |
111 | <sqlt:expression></sqlt:expression> |
112 | <sqlt:fields>id</sqlt:fields> |
113 | <sqlt:match_type></sqlt:match_type> |
114 | <sqlt:name></sqlt:name> |
115 | <sqlt:options></sqlt:options> |
116 | <sqlt:on_delete></sqlt:on_delete> |
117 | <sqlt:on_update></sqlt:on_update> |
118 | <sqlt:reference_table></sqlt:reference_table> |
119 | <sqlt:type>PRIMARY KEY</sqlt:type> |
120 | </sqlt:constraint> |
121 | <sqlt:constraint> |
122 | <sqlt:deferrable>1</sqlt:deferrable> |
123 | <sqlt:expression></sqlt:expression> |
124 | <sqlt:fields>email</sqlt:fields> |
125 | <sqlt:match_type></sqlt:match_type> |
126 | <sqlt:name></sqlt:name> |
127 | <sqlt:options></sqlt:options> |
128 | <sqlt:on_delete></sqlt:on_delete> |
129 | <sqlt:on_update></sqlt:on_update> |
130 | <sqlt:reference_table></sqlt:reference_table> |
131 | <sqlt:type>UNIQUE</sqlt:type> |
132 | </sqlt:constraint> |
133 | </sqlt:constraints> |
134 | </sqlt:table> |
135 | </sqlt:schema> |
136 | EOXML |
137 | |
138 | $obj = SQL::Translator->new( |
139 | debug => DEBUG, |
140 | trace => TRACE, |
141 | show_warnings => 1, |
142 | add_drop_table => 1, |
ac62dff1 |
143 | from => 'MySQL', |
144 | to => 'XML-SQLFairy', |
d0c12b9f |
145 | ); |
146 | lives_ok { $xml = $obj->translate($file); } "Translate ran"; |
147 | ok("$xml" ne "" ,"Produced something!"); |
148 | print "XML:\n$xml" if DEBUG; |
149 | # Strip sqlf header with its variable date so we diff safely |
150 | $xml =~ s/^([^\n]*\n){7}//m; |
151 | eq_or_diff $xml, $ans ,"XML looks right"; |
152 | |
153 | # |
154 | # emit_empty_tags => 1 |
155 | # |
156 | |
157 | $ans = <<EOXML; |
158 | <sqlt:schema xmlns:sqlt="http://sqlfairy.sourceforge.net/sqlfairy.xml"> |
159 | <sqlt:table> |
160 | <sqlt:name>Basic</sqlt:name> |
161 | <sqlt:order>2</sqlt:order> |
162 | <sqlt:fields> |
163 | <sqlt:field> |
164 | <sqlt:name>id</sqlt:name> |
165 | <sqlt:data_type>integer</sqlt:data_type> |
166 | <sqlt:default_value></sqlt:default_value> |
167 | <sqlt:is_auto_increment>1</sqlt:is_auto_increment> |
168 | <sqlt:is_primary_key>1</sqlt:is_primary_key> |
169 | <sqlt:is_nullable>0</sqlt:is_nullable> |
170 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
171 | <sqlt:order>5</sqlt:order> |
172 | <sqlt:size>10</sqlt:size> |
11a08bd9 |
173 | <sqlt:comments>comment on id field</sqlt:comments> |
d0c12b9f |
174 | </sqlt:field> |
175 | <sqlt:field> |
176 | <sqlt:name>title</sqlt:name> |
177 | <sqlt:data_type>varchar</sqlt:data_type> |
178 | <sqlt:default_value>hello</sqlt:default_value> |
179 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
180 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
181 | <sqlt:is_nullable>0</sqlt:is_nullable> |
182 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
183 | <sqlt:order>6</sqlt:order> |
184 | <sqlt:size>100</sqlt:size> |
11a08bd9 |
185 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
186 | </sqlt:field> |
187 | <sqlt:field> |
188 | <sqlt:name>description</sqlt:name> |
189 | <sqlt:data_type>text</sqlt:data_type> |
190 | <sqlt:default_value></sqlt:default_value> |
191 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
192 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
193 | <sqlt:is_nullable>1</sqlt:is_nullable> |
194 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
195 | <sqlt:order>7</sqlt:order> |
ac62dff1 |
196 | <sqlt:size>65535</sqlt:size> |
11a08bd9 |
197 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
198 | </sqlt:field> |
199 | <sqlt:field> |
200 | <sqlt:name>email</sqlt:name> |
201 | <sqlt:data_type>varchar</sqlt:data_type> |
202 | <sqlt:default_value></sqlt:default_value> |
203 | <sqlt:is_auto_increment>0</sqlt:is_auto_increment> |
204 | <sqlt:is_primary_key>0</sqlt:is_primary_key> |
205 | <sqlt:is_nullable>1</sqlt:is_nullable> |
206 | <sqlt:is_foreign_key>0</sqlt:is_foreign_key> |
207 | <sqlt:order>8</sqlt:order> |
208 | <sqlt:size>255</sqlt:size> |
11a08bd9 |
209 | <sqlt:comments></sqlt:comments> |
d0c12b9f |
210 | </sqlt:field> |
211 | </sqlt:fields> |
212 | <sqlt:indices> |
213 | <sqlt:index> |
214 | <sqlt:fields>title</sqlt:fields> |
215 | <sqlt:name>titleindex</sqlt:name> |
216 | <sqlt:options></sqlt:options> |
217 | <sqlt:type>NORMAL</sqlt:type> |
218 | </sqlt:index> |
219 | </sqlt:indices> |
220 | <sqlt:constraints> |
221 | <sqlt:constraint> |
222 | <sqlt:deferrable>1</sqlt:deferrable> |
223 | <sqlt:expression></sqlt:expression> |
224 | <sqlt:fields>id</sqlt:fields> |
225 | <sqlt:match_type></sqlt:match_type> |
226 | <sqlt:name></sqlt:name> |
227 | <sqlt:options></sqlt:options> |
228 | <sqlt:on_delete></sqlt:on_delete> |
229 | <sqlt:on_update></sqlt:on_update> |
230 | <sqlt:reference_fields></sqlt:reference_fields> |
231 | <sqlt:reference_table></sqlt:reference_table> |
232 | <sqlt:type>PRIMARY KEY</sqlt:type> |
233 | </sqlt:constraint> |
234 | <sqlt:constraint> |
235 | <sqlt:deferrable>1</sqlt:deferrable> |
236 | <sqlt:expression></sqlt:expression> |
237 | <sqlt:fields>email</sqlt:fields> |
238 | <sqlt:match_type></sqlt:match_type> |
239 | <sqlt:name></sqlt:name> |
240 | <sqlt:options></sqlt:options> |
241 | <sqlt:on_delete></sqlt:on_delete> |
242 | <sqlt:on_update></sqlt:on_update> |
243 | <sqlt:reference_fields></sqlt:reference_fields> |
244 | <sqlt:reference_table></sqlt:reference_table> |
245 | <sqlt:type>UNIQUE</sqlt:type> |
246 | </sqlt:constraint> |
247 | </sqlt:constraints> |
248 | </sqlt:table> |
249 | </sqlt:schema> |
250 | EOXML |
251 | |
252 | undef $obj; |
253 | $obj = SQL::Translator->new( |
254 | debug => DEBUG, |
255 | trace => TRACE, |
256 | show_warnings => 1, |
257 | add_drop_table => 1, |
ac62dff1 |
258 | from => 'MySQL', |
259 | to => 'XML-SQLFairy', |
d0c12b9f |
260 | producer_args => { emit_empty_tags => 1 }, |
261 | ); |
262 | lives_ok { $xml = $obj->translate($file); } "Translate ran"; |
263 | ok("$xml" ne "" ,"Produced something!"); |
264 | print "XML emit_empty_tags=>1:\n$xml" if DEBUG; |
265 | # Strip sqlf header with its variable date so we diff safely |
266 | $xml =~ s/^([^\n]*\n){7}//m; |
267 | eq_or_diff $xml, $ans ,"XML looks right"; |
268 | # This diff probably isn't a very good test! Should really check the |
269 | # result with XPath or something, but that would take ages to write ;-) |
270 | |
a8e0cc1a |
271 | # TODO Make this a real test of attrib_values |
272 | # $obj = SQL::Translator->new( |
273 | # debug => DEBUG, |
274 | # trace => TRACE, |
275 | # show_warnings => 1, |
276 | # add_drop_table => 1, |
277 | # from => "MySQL", |
2e11379e |
278 | # to => "XML-SQLFairy", |
a8e0cc1a |
279 | # producer_args => { attrib_values => 1 }, |
280 | # ); |
281 | # print $obj->translate($file); |