Add sqlite roundtrip test (probably need to do the same for the rest of the parser...
[dbsrgits/SQL-Translator.git] / t / 27sqlite-roundtrip.t
CommitLineData
54360ac9 1#!/usr/bin/perl
2
3use warnings;
4use strict;
5use Test::More;
6use Test::SQL::Translator qw(maybe_plan);
7use FindBin qw/$Bin/;
8
9use SQL::Translator;
10use SQL::Translator::Schema::Constants;
11
12BEGIN {
13 maybe_plan(7,
14 'SQL::Translator::Parser::SQLite',
15 'SQL::Translator::Producer::SQLite',
16 );
17}
18
19my $file = "$Bin/data/sqlite/create.sql";
20
21{
22 local $/;
23 open my $fh, "<$file" or die "Can't read file '$file': $!\n";
24 my $data = <$fh>;
25
26 my $t = SQL::Translator->new;
27
28 $t->translate (
29 parser => 'SQLite',
30 data => \$data,
31 );
32 my $schema1 = $t->schema;
33 isa_ok ($schema1, 'SQL::Translator::Schema', 'First parser pass produced a schema');
34
35
36 my $data2 = $t->translate (
37 producer => 'SQLite',
38 );
39 like ($data2, qr/BEGIN.+COMMIT/is, 'Received some meaningful output from the producer');
40
41 # get a new translator
42 $t = SQL::Translator->new;
43
44 $t->translate (
45 parser => 'SQLite',
46 data => \$data2,
47 );
48 my $schema2 = $t->schema;
49 isa_ok ($schema2, 'SQL::Translator::Schema', 'Second parser pass produced a schema');
50
51 my @t1 = $schema1->get_tables;
52 my @t2 = $schema2->get_tables;
53
54 my @v1 = $schema1->get_views;
55 my @v2 = $schema2->get_views;
56
57 my @g1 = $schema1->get_triggers;
58 my @g2 = $schema2->get_triggers;
59
60 is (@t2, @t1, 'Equal amount of tables');
61
62 is_deeply (
63 [ map { $_->name } (@t1) ],
64 [ map { $_->name } (@t2) ],
65 'Table names match',
66 );
67
68 is (@v2, @v1, 'Equal amount of views');
69
70 is (@g2, @g1, 'Equal amount of triggers');
71}