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

use strict;
BEGIN {
	$|  = 1;
	$^W = 1;
}

use Test::More;
use t::lib::Test;
use YAML::Tiny;

plan tests => 20 * 2;

foreach my $command ('', "build_subdirs 'bar';") {
	SCOPE: {
		ok( create_dist('Foo', { 'Makefile.PL' => <<"END_DSL" }), 'create_dist Foo');
use inc::Module::Install;
name          'Foo';
perl_version  '5.005';
all_from      'lib/Foo.pm';
$command
WriteAll;
END_DSL

		ok( mkdir(dir('bar'), 0777),     'created bar directory');
		ok( mkdir(dir('bar/lib'), 0777), 'created bar/lib directory');
		ok( mkdir(dir('bar/t'), 0777),   'created bar/t directory');
		ok( add_file('bar/MANIFEST', <<'END_MANIFEST'), 'created MANIFEST');
MANIFEST
Makefile.PL
lib/Bar.pm
t/load.t
END_MANIFEST

		ok( add_file('bar/Makefile.PL', <<'END_DSL'), 'created Makefile.PL');
use inc::Module::Install;
name          'Bar';
abstract      'bar';
author        'foobar';
perl_version  '5.005';
version_from  'lib/Bar.pm';
WriteAll;
END_DSL

		ok( add_file('bar/lib/Bar.pm', <<'END_PERL'), 'created Bar.pm');
package Bar;

$VERSION = '0.01';

1;
END_PERL

		ok( add_file('bar/t/load.t', <<'END_T'), 'created load.t');
use Test::More tests => 1;
use_ok('Bar');
END_T

		ok( supports_capture() ? capture_build_dist() : build_dist(), 'build_dist' );

		my $makefile_foo = makefile();
		ok( -f $makefile_foo, 'has Makefile for Foo' );
		my $content_foo = _read($makefile_foo);
		ok( $content_foo =~ /DISTNAME\s*=>\s*q\[Foo\]/, 'content is correct');
		my $meta_yml_foo = file('META.yml');
		ok( -f $meta_yml_foo, 'has META.yml for Foo');
		my $meta_foo = YAML::Tiny::LoadFile($meta_yml_foo);
		ok( $meta_foo->{name} eq 'Foo', 'META.yml is correct' );
		ok( $meta_foo->{version} eq '3.21', 'META.yml is correct' );

		my $makefile_bar = file('bar/Makefile');
		ok( -f $makefile_bar, 'has Makefile for Bar' );
		my $content_bar = _read($makefile_bar);
		ok( $content_bar =~ /DISTNAME\s*=>\s*q\[Bar\]/, 'content is correct');
		my $meta_yml_bar = file('bar/META.yml');
		ok( -f $meta_yml_bar, 'has META.yml for Bar');
		my $meta_bar = YAML::Tiny::LoadFile($meta_yml_bar);
		ok( $meta_bar->{name} eq 'Bar', 'META.yml is correct' );
		ok( $meta_bar->{version} eq '0.01', 'META.yml is correct' );

		ok( kill_dist(), 'kill_dist' );
	}
}