use strict;
use warnings;
use Test::More 0.88;
use Test::Deep;

use ExtUtils::Manifest 1.66; # or maniread can't cope with quoting properly

use Test::DZil;

my $tzil = Builder->from_config(
  { dist_root => 'corpus/dist/DZT' },
  {
    add_files => {
      q{source/file with spaces.txt}        => "foo\n",
      q{source/'file-with-ticks.txt'}       => "baz\n",
      'source/dist.ini' => simple_ini(
        'GatherDir',
        'Manifest',
      ),
      $^O =~ /^(MSWin32|cygwin|msys)$/ ? () : (
        q{source/file\\with some\\whacks.txt} => "bar\n",
        q{source/file'with'quotes\\or\\backslash.txt} => "quux\n",
        q{source/dir\\with some\\/whacks.txt} => "mar\n",
      ),
    },
  },
);

$tzil->build;

my $manihash = ExtUtils::Manifest::maniread($tzil->built_in->child('MANIFEST'));

cmp_deeply(
  [ keys %$manihash ],
  bag(
    'MANIFEST',
    q{file with spaces.txt},
    q{'file-with-ticks.txt'},
    'dist.ini',
    'lib/DZT/Sample.pm',
    't/basic.t',
    $^O =~ /^(MSWin32|cygwin|msys)$/ ? () : (
      q{file\\with some\\whacks.txt},
      q{file'with'quotes\\or\\backslash.txt},
      q{dir\\with some\\/whacks.txt},
    ),
  ),
  'manifest quotes files with spaces'
);

my @manilines = grep { ! /^#/ } split /\n/, $tzil->slurp_file('build/MANIFEST');
chomp @manilines;

cmp_deeply(
  \@manilines,
  bag(
    'MANIFEST',
    q{'file with spaces.txt'},
    q{'\\'file-with-ticks.txt\\''},
    'dist.ini',
    'lib/DZT/Sample.pm',
    't/basic.t',
    $^O =~ /^(MSWin32|cygwin|msys)$/ ? () : (
      q{'file\\\\with some\\\\whacks.txt'},
      q{'file\\'with\\'quotes\\\\or\\\\backslash.txt'},
      q{'dir\\\\with some\\\\/whacks.txt'},
    ),
  ),
  'manifest quotes files with spaces'
);

done_testing;