Commit | Line | Data |
3c5dc866 |
1 | #!/usr/bin/perl |
2 | # vim: set ft=perl: |
8061d279 |
3 | # Test for Dumper producer |
3c5dc866 |
4 | |
5 | use strict; |
04c13c01 |
6 | use File::Temp 'tempfile'; |
c401ac4b |
7 | use FindBin qw/$Bin/; |
8 | use IPC::Open3; |
3c5dc866 |
9 | use SQL::Translator; |
c401ac4b |
10 | use Test::More; |
3c5dc866 |
11 | use Test::SQL::Translator qw(maybe_plan); |
c401ac4b |
12 | use Symbol qw(gensym); |
3c5dc866 |
13 | |
14 | BEGIN { |
15 | maybe_plan( |
aee4b66e |
16 | 5, |
d2f0a9f6 |
17 | 'DBI', |
3c5dc866 |
18 | 'SQL::Translator::Parser::SQLite', |
19 | 'SQL::Translator::Producer::Dumper' |
20 | ); |
21 | } |
22 | |
04c13c01 |
23 | my $db_user = 'nomar'; |
24 | my $db_pass = 'gos0X!'; |
25 | my $dsn = 'dbi:SQLite:dbname=/tmp/foo'; |
3c5dc866 |
26 | my $file = "$Bin/data/sqlite/create.sql"; |
27 | my $t = SQL::Translator->new( |
28 | from => 'SQLite', |
29 | to => 'Dumper', |
30 | producer_args => { |
04c13c01 |
31 | skip => 'pet', |
32 | skiplike => '', |
3c5dc866 |
33 | db_user => $db_user, |
34 | db_password => $db_pass, |
35 | dsn => $dsn, |
36 | } |
37 | ); |
38 | |
39 | my $output = $t->translate( $file ); |
04c13c01 |
40 | ok( $output, 'Got dumper script' ); |
41 | |
ae99f367 |
42 | like( $output, qr{DBI->connect\(\s*'$dsn',\s*'$db_user',\s*'$db_pass',}, |
43 | 'Script contains correct DSN, db user and password' ); |
44 | |
45 | like( $output, qr/table_name\s*=>\s*'person',/, 'Found "person" table' ); |
46 | unlike( $output, qr/table_name\s*=>\s*'pet',/, 'Skipped "pet" table' ); |
47 | |
04c13c01 |
48 | my ( $fh, $filename ) = tempfile( 'XXXXXXXX' ); |
49 | |
50 | print $fh $output; |
8061d279 |
51 | close $fh or die "Can't close file '$filename': $!"; |
04c13c01 |
52 | |
ae99f367 |
53 | my $out; |
54 | my $pid = open3( undef, $out, undef, $^X, '-cw', $filename ); |
55 | my $res = do { local $/; <$out> }; |
c401ac4b |
56 | waitpid($pid, 0); |
57 | |
04c13c01 |
58 | like( $res, qr/syntax OK/, 'Generated script syntax is OK' ); |
59 | |
04c13c01 |
60 | unlink $filename; |