The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use utf8;
use Encode 'decode';
use Test::More;
use Path::Class;
use Unicode::Collate;

my $utf8 = "我想写的东西在中国傻了。";

my $dir = Path::Class::tempdir(CLEANUP => 1);
copy_dist_files_into_dir($dir, $utf8);
chdir $dir;

my $status = system 'dzil build >/dev/null 2>/dev/null';
is $status << 0, 0, 'zero exit status';

my $dist_dir = $dir->subdir('UTF8-Script-0.07');
ok -d $dist_dir,
    'dist dir';

my $packed_script_file = $dist_dir->file('bin/script.pl');
my $output   = safe_pipe_command(':utf8', 'perl', $packed_script_file);
my $collator = Unicode::Collate->new;
ok $collator->eq($output, $utf8), 'utf8 string is unmodified after fatpacking';


done_testing();


sub copy_dist_files_into_dir {
    my $dir  = shift;
    my $utf8 = shift;

    foreach my $subdir (qw(t lib/UTF8 bin)) {
        $dir->subdir($subdir)->mkpath;
    }

    $dir->file('dist.ini')->spew(dist_ini());
    $dir->file('lib/UTF8/Script.pm')->spew(script_pm());
    $dir->file('bin/script.pl')->spew(iomode => '>:utf8', script($utf8));
}

sub dist_ini { <<'DIST_INI' }
name    = UTF8-Script
version = 0.07
author  = CPAN Tester
license = Perl_5
copyright_holder = CPAN Tester

[@Classic]

[FatPacker]
script = bin/script.pl
DIST_INI

sub script_pm { <<'SCRIPT_PM' }
package UTF8::Script;
# ABSTRACT: UTF8 Script
1;
SCRIPT_PM

sub script { <<"SCRIPT" }
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use open qw/:std :utf8/;

print "$_[0]";
SCRIPT

sub safe_pipe_command {
    my ($binmode, @cmd) = @_;

    open(my($pipe), '-|', @cmd) or die "can't run command @cmd: $!";
    binmode($pipe, $binmode);
    my $output = join('', <$pipe>);
    close($pipe);

    return $output;
}