#!perl

use strict;
use warnings;
use utf8;

use Test::More;
use Test::Differences;
use Cwd qw(getcwd chdir);
use Encode qw(decode_utf8);
use English qw(-no_match_vars $CHILD_ERROR);

$ENV{AUTHOR_TESTING}
    or plan skip_all => 'Set $ENV{AUTHOR_TESTING} to run this test.';

my @data = (
    {
        test   => '13_little_endian_utf-8',
        path   => 'example',
        script => '-I../lib -T 13_little_endian_utf-8.pl',
        result => <<'EOT',
$messages_result = [
  {
    msgid => '',
    msgstr => 'MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Plural-Forms: nplurals=2; plural=n != 1;
'
  },
  {
    msgid => '11ë',
    msgstr => '12ü'
  },
  {
    msgctxt => '21ä',
    msgid => '22ë',
    msgstr => '23ü'
  },
  {
    msgid => '31ë',
    msgid_plural => '32ö',
    msgstr_plural => [
      '33ü',
      '34ü'
    ]
  },
  {
    msgctxt => '41ä',
    msgid => '42ë',
    msgid_plural => '43ö',
    msgstr_plural => [
      '44ü',
      '45ü'
    ]
  }
];
EOT
    },
    {
        test   => '14_little_endian_fh_utf-8',
        path   => 'example',
        script => '-I../lib -T 14_little_endian_fh_utf-8.pl',
        result => <<'EOT',
$messages_result = [
  {
    msgid => '',
    msgstr => 'MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Plural-Forms: nplurals=2; plural=n != 1;
'
  },
  {
    msgid => '11ë',
    msgstr => '12ü'
  },
  {
    msgctxt => '21ä',
    msgid => '22ë',
    msgstr => '23ü'
  },
  {
    msgid => '31ë',
    msgid_plural => '32ö',
    msgstr_plural => [
      '33ü',
      '34ü'
    ]
  },
  {
    msgctxt => '41ä',
    msgid => '42ë',
    msgid_plural => '43ö',
    msgstr_plural => [
      '44ü',
      '45ü'
    ]
  }
];
EOT
    },
    {
        test   => '23_big_endian_utf-8',
        path   => 'example',
        script => '-I../lib -T 23_big_endian_utf-8.pl',
        result => <<'EOT',
$messages_result = [
  {
    msgid => '',
    msgstr => 'MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Plural-Forms: nplurals=2; plural=n != 1;
'
  },
  {
    msgid => '11ë',
    msgstr => '12ü'
  },
  {
    msgctxt => '21ä',
    msgid => '22ë',
    msgstr => '23ü'
  },
  {
    msgid => '31ë',
    msgid_plural => '32ö',
    msgstr_plural => [
      '33ü',
      '34ü'
    ]
  },
  {
    msgctxt => '41ä',
    msgid => '42ë',
    msgid_plural => '43ö',
    msgstr_plural => [
      '44ü',
      '45ü'
    ]
  }
];
EOT
    },
    {
        test   => '24_big_endian_fh_utf-8',
        path   => 'example',
        script => '-I../lib -T 24_big_endian_fh_utf-8.pl',
        result => <<'EOT',
$messages_result = [
  {
    msgid => '',
    msgstr => 'MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Plural-Forms: nplurals=2; plural=n != 1;
'
  },
  {
    msgid => '11ë',
    msgstr => '12ü'
  },
  {
    msgctxt => '21ä',
    msgid => '22ë',
    msgstr => '23ü'
  },
  {
    msgid => '31ë',
    msgid_plural => '32ö',
    msgstr_plural => [
      '33ü',
      '34ü'
    ]
  },
  {
    msgctxt => '41ä',
    msgid => '42ë',
    msgid_plural => '43ö',
    msgstr_plural => [
      '44ü',
      '45ü'
    ]
  }
];
EOT
    },
);

plan tests => 0 + @data;

for my $data (@data) {
    my $dir = getcwd;
    chdir("$dir/$data->{path}");
    my $result = decode_utf8( qx{perl $data->{script} 2>&1} );
    $CHILD_ERROR
        and die "Couldn't run $data->{script} (status $CHILD_ERROR)";
    chdir($dir);
    eq_or_diff
        $result,
        $data->{result},
        $data->{test};
}