#!/usr/bin/perl -w
use
lib
$ENV
{PERL_CORE} ?
'../lib/Module/Build/t/lib'
:
't/lib'
;
use_ok
'Module::Build'
;
ensure_blib(
'Module::Build'
);
my
$tmp
= MBTest->tmpdir;
my
%metadata
=
(
module_name
=>
'Simple'
,
dist_version
=>
'3.14159265'
,
dist_author
=> [
'Simple Simon <ss\@somewhere.priv>'
],
dist_abstract
=>
'Something interesting'
,
license
=>
'perl'
,
meta_add
=> {
keywords
=> [
qw(super duper something)
],
},
);
my
$dist
= DistGen->new(
dir
=>
$tmp
);
$dist
->change_build_pl( \
%metadata
);
$dist
->regen;
my
$simple_file
=
'lib/Simple.pm'
;
my
$simple2_file
=
'lib/Simple2.pm'
;
if
($^O eq
'VMS'
) {
$simple_file
=
lc
(
$simple_file
);
$simple2_file
=
lc
(
$simple2_file
);
}
$dist
->chdir_in;
my
$mb
= Module::Build->new_from_context;
{
my
$node
=
$mb
->prepare_metadata( {} );
is
$node
->{name},
$metadata
{module_name};
is
$node
->{version},
$metadata
{dist_version};
is
$node
->{abstract},
$metadata
{dist_abstract};
is_deeply
$node
->{author},
$metadata
{dist_author};
is
$node
->{license},
$metadata
{license};
like
$node
->{generated_by},
qr{Module::Build}
;
ok
defined
(
$node
->{
'meta-spec'
}{version} ),
"'meta-spec' -> 'version' field present in META.yml"
;
ok
defined
(
$node
->{
'meta-spec'
}{url} ),
"'meta-spec' -> 'url' field present in META.yml"
;
is_deeply
$node
->{keywords},
$metadata
{meta_add}{keywords};
is_deeply
$node
->{resources},
$metadata
{meta_add}{resources};
}
$dist
->clean;
my
$provides
;
sub
new_build {
return
Module::Build->new_from_context(
quiet
=> 1,
@_
) }
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Simple'
=> {
file
=>
$simple_file
}});
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Foo::Bar;
$VERSION = '1.23';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Foo::Bar'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Foo::Bar;
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Foo::Bar'
=> {
file
=>
$simple_file
}});
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
package Foo::Bar;
$VERSION = '1.23';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
},
'Foo::Bar'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
{
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = version->new('0.60.' . (qw$Revision: 128 $)[1]);
package Simple::Simon;
$VERSION = version->new('0.61.' . (qw$Revision: 129 $)[1]);
---
$dist
->regen;
my
$provides
= new_build()->prepare_metadata()->{provides};
is
$provides
->{
'Simple'
}{version},
'0.60.128'
,
"Check version"
;
is
$provides
->{
'Simple::Simon'
}{version},
'0.61.129'
,
"Check version"
;
is
ref
(
$provides
->{
'Simple'
}{version}),
''
,
"Versions from prepare_metadata() aren't refs"
;
is
ref
(
$provides
->{
'Simple::Simon'
}{version}),
''
,
"Versions from prepare_metadata() aren't refs"
;
}
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Foo;
$VERSION = '1.23';
package Foo::Bar;
$VERSION = '1.23';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Foo'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
},
'Foo::Bar'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
package Simple;
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Simple'
=> {
file
=>
$simple_file
}});
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
package Simple;
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
package Simple;
$VERSION = '1.23';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
package Simple;
$VERSION = '2.34';
---
$dist
->regen(
clean
=> 1 );
my
$err
=
''
;
$err
= stderr_of(
sub
{
$mb
= new_build() } );
$err
= stderr_of(
sub
{
$provides
=
$mb
->find_dist_packages } );
is_deeply(
$provides
,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
like(
$err
,
qr/already declared/
,
' with conflicting versions reported'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Foo;
$VERSION = '1.23';
package Foo;
$VERSION = '2.34';
---
$dist
->regen(
clean
=> 1 );
$err
= stderr_of(
sub
{
$mb
= new_build() } );
$err
= stderr_of(
sub
{
$provides
=
$mb
->find_dist_packages } );
is_deeply(
$provides
,
{
'Foo'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
like(
$err
,
qr/already declared/
,
' with conflicting versions reported'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Simple;
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Simple'
=> {
file
=>
$simple_file
}});
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Simple;
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Simple'
=> {
file
=>
$simple2_file
,
version
=>
'1.23'
}});
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Simple;
$VERSION = '2.34';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
$err
= stderr_of(
sub
{
$provides
=
$mb
->find_dist_packages } );
is_deeply(
$provides
,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
like(
$err
,
qr/Found conflicting versions for package/
,
' with conflicting versions reported'
);
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
$err
= stderr_of(
sub
{
$provides
=
$mb
->find_dist_packages } );
is_deeply(
$provides
,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Foo;
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Foo;
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
$provides
=
$mb
->find_dist_packages;
ok(
exists
(
$provides
->{Foo} ) );
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Foo;
$VERSION = '1.23';
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Foo;
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Foo'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Foo;
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Foo;
$VERSION = '1.23';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Foo'
=> {
file
=>
$simple2_file
,
version
=>
'1.23'
}});
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Foo;
$VERSION = '1.23';
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Foo;
$VERSION = '2.34';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
$err
= stderr_of(
sub
{
$provides
=
$mb
->find_dist_packages } );
ok(
exists
(
$provides
->{Foo} ) );
like(
$err
,
qr/Found conflicting versions for package/
,
' with conflicting versions reported'
);
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Foo;
$VERSION = '1.23';
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Foo;
$VERSION = '1.23';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
$err
= stderr_of(
sub
{
$provides
=
$mb
->find_dist_packages } );
ok(
exists
(
$provides
->{Foo} ) );
is(
$provides
->{Foo}{version},
'1.23'
);
ok(
exists
(
$provides
->{Foo}{file} ) );
is(
$err
,
''
,
' no conflicts reported'
);
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Simple;
$VERSION = '2.34';
---
$dist
->add_file(
'lib/Simple3.pm'
,
<<'---' );
package Simple;
$VERSION = '2.34';
---
$dist
->regen(
clean
=> 1 );
$err
= stderr_of(
sub
{
$mb
= new_build();
} );
$err
= stderr_of(
sub
{
$provides
=
$mb
->find_dist_packages } );
is_deeply(
$provides
,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
like(
$err
,
qr/Found conflicting versions for package/
,
' corresponding package conflicts with multiple alternatives'
);
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->remove_file(
'lib/Simple3.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
---
$dist
->add_file(
'lib/Simple2.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
---
$dist
->add_file(
'lib/Simple3.pm'
,
<<'---' );
package Simple;
$VERSION = '2.34';
---
$dist
->regen(
clean
=> 1 );
$err
= stderr_of(
sub
{
$mb
= new_build();
} );
$err
= stderr_of(
sub
{
$provides
=
$mb
->find_dist_packages } );
is_deeply(
$provides
,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
like(
$err
,
qr/Found conflicting versions for package/
,
' only one alternative conflicts with corresponding package'
);
$dist
->remove_file(
'lib/Simple2.pm'
);
$dist
->remove_file(
'lib/Simple3.pm'
);
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
package Simple;
$VERSION = '1.23';
package Simple::_private;
$VERSION = '2.34';
package Simple::_private::too;
$VERSION = '3.45';
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages,
{
'Simple'
=> {
file
=>
$simple_file
,
version
=>
'1.23'
}});
$dist
->change_file(
'lib/Simple.pm'
,
''
);
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages, {} );
$dist
->change_file(
'lib/Simple.pm'
,
<<'---' );
=pod
=head1 NAME
Simple - Pure Documentation
=head1 DESCRIPTION
Doesn't do anything.
=cut
---
$dist
->regen(
clean
=> 1 );
$mb
= new_build();
is_deeply(
$mb
->find_dist_packages, {});
$dist
->remove;