Commit | Line | Data |
0494e672 |
1 | #!/usr/bin/perl |
2 | # vim: set ft=perl: |
3 | # |
4 | # This tests that the same file can be passed in using a filename, |
5 | # a filehandle, and a string, and return identical results. There's |
6 | # a lot of setup here, because we have to emulate the various ways |
7 | # that $tr->translate might be called: with a string (filename), |
8 | # with a filehandle (IO::File, FileHandle, or \*FOO), and with a |
9 | # scalar reference (data in a string). |
10 | # |
11 | |
12 | use strict; |
13 | |
14 | use IO::File; |
15 | use SQL::Translator; |
16 | |
17 | # How many tests |
18 | BEGIN { print "1..3\n"; } |
19 | |
20 | # Our object. |
21 | my $tr = SQL::Translator->new(parser => "MySQL", producer => "Oracle"); |
22 | |
23 | # The filename, holder for all the data, and the filehandle |
24 | my $datafile = "t/data/mysql/Apache-Session-MySQL.sql"; |
25 | my $data; |
26 | my $fh = IO::File->new($datafile); |
27 | |
28 | # Pass filename: simplest way |
29 | my $translated_datafile = $tr->translate($datafile); |
30 | print "Data from filename method is\n$translated_datafile\n\n\n"; |
31 | |
32 | # Pass string reference |
33 | read($fh, $data, -s $datafile); |
34 | my $translated_data = $tr->translate(\$data); |
35 | print "Data from string is\n$translated_data\n\n\n"; |
36 | |
37 | |
38 | # Pass IO::File instance |
39 | $fh->setpos(0); |
40 | my $translated_fh = $tr->translate($fh); |
41 | print "Data from filehandle method is\n$translated_fh\n\n\n"; |
42 | |
43 | # With all that setup out of the way, we can perform the actual tests. |
44 | # We need to test the equality of: |
45 | # |
46 | # filename and string |
47 | # filename and filehandle |
48 | # filehandle and string |
49 | # |
50 | # And then we have all possibilities. Note that the order in which |
51 | # the comparison is done is pretty arbitrary, and doesn't affect the |
52 | # outcomes. Similarly, the order of the eq tests is also unimportant. |
53 | # |
54 | print "not " unless ($translated_datafile eq $translated_fh); |
55 | print "ok 1 # from file == from filehandle\n"; |
56 | |
57 | print "not " unless ($translated_datafile eq $translated_data); |
58 | print "ok 2 # from file == from string\n"; |
59 | |
60 | print "not " unless ($translated_data eq $translated_fh); |
61 | print "ok 3 # from string == from filehandle\n"; |
62 | # |
63 | # Problem with SQL::Translator::Producer::Oracle: it is keeping track of |
64 | # the last sequence number used, so as not to duplicate them, which |
65 | # is reasonable. However on runs past the first, it seems to be |
66 | # creating multiple constraint lines, that look like: |
67 | # |
68 | # CONSTRAINT i_sessions_pk_2 PRIMARY KEY (id), |
69 | # CONSTRAINT i_sessions_pk_3 PRIMARY KEY (id) |
70 | # |
71 | # Dunno why. |
72 | |
73 | # For this test, we should devise some other sort of output routine, |
74 | # that can take a data structure and output it in a reasonable -- and |
75 | # machine parsable! -- way. The tendency of ::Producer::Oracle to |
76 | # produce numerically incrementing constraints is fine, and is not a |
77 | # bug, but it makes this test fail. (The duplicate CONSTRAINT *is* a |
78 | # bug, though.) |