The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;

use FindBin qw/$Bin/;
use Test::More;
use Test::SQL::Translator;
use Test::Exception;
use Test::Differences;
use Data::Dumper;
use SQL::Translator;
use SQL::Translator::Schema::Constants;


BEGIN {
    maybe_plan(2, 'SQL::Translator::Parser::XML::SQLFairy',
              'SQL::Translator::Producer::MySQL');
}

my $xmlfile = "$Bin/data/xml/schema.xml";

my $sqlt;
$sqlt = SQL::Translator->new(
    no_comments => 1,
    show_warnings  => 0,
    add_drop_table => 1,
    producer_args => {
        mysql_version => 5.005,
    },
);

die "Can't find test schema $xmlfile" unless -e $xmlfile;

my @want = (
    q[SET foreign_key_checks=0],

    q[DROP TABLE IF EXISTS `Basic`],
    q[CREATE TABLE `Basic` (
  `id` integer(10) zerofill NOT NULL auto_increment,
  `title` varchar(100) NOT NULL DEFAULT 'hello',
  `description` text DEFAULT '',
  `email` varchar(500),
  `explicitnulldef` varchar(255),
  `explicitemptystring` varchar(255) DEFAULT '',
  `emptytagdef` varchar(255) DEFAULT '' comment 'Hello emptytagdef',
  `another_id` integer(10) DEFAULT 2,
  `timest` timestamp,
  INDEX `titleindex` (`title`),
  INDEX (`another_id`),
  PRIMARY KEY (`id`),
  UNIQUE `emailuniqueindex` (`email`),
  UNIQUE `very_long_index_name_on_title_field_which_should_be_tru_14b59999` (`title`),
  CONSTRAINT `Basic_fk` FOREIGN KEY (`another_id`) REFERENCES `Another` (`id`)
) ENGINE=InnoDB],

    q[DROP TABLE IF EXISTS `Another`],
    q[CREATE TABLE `Another` (
  `id` integer(10) NOT NULL auto_increment,
  `num` numeric(10, 2),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB],
    q[CREATE OR REPLACE
  VIEW `email_list` ( `email` ) AS
    SELECT email FROM Basic WHERE (email IS NOT NULL)
],

    q[DROP TRIGGER IF EXISTS `foo_trigger`],
    q[CREATE TRIGGER `foo_trigger` after insert ON `Basic`
  FOR EACH ROW BEGIN update modified=timestamp(); END],

    q[DROP TRIGGER IF EXISTS `bar_trigger_insert`],
    q[CREATE TRIGGER `bar_trigger_insert` before insert ON `Basic`
  FOR EACH ROW BEGIN update modified2=timestamp(); END],

    q[DROP TRIGGER IF EXISTS `bar_trigger_update`],
    q[CREATE TRIGGER `bar_trigger_update` before update ON `Basic`
  FOR EACH ROW BEGIN update modified2=timestamp(); END],

    q[SET foreign_key_checks=1],
);

my $sql = $sqlt->translate(
    from     => 'XML-SQLFairy',
    to       => 'MySQL',
    filename => $xmlfile,
) or die $sqlt->error;

eq_or_diff($sql, join("", map { "$_;\n\n" } @want));

my @sql = $sqlt->translate(
    from     => 'XML-SQLFairy',
    to       => 'MySQL',
    filename => $xmlfile,
) or die $sqlt->error;

is_deeply(\@sql, \@want);