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