1use strict; 2use warnings; 3use FindBin; 4use lib "$FindBin::Bin/../../"; 5use Test::More; 6use t::Util; 7 8test_cpanfile('no features', sub { 9 my $tmpdir = shift; 10 11 test_file("$tmpdir/lib/MyTest.pm", <<'END'); 12use strict; 13use warnings; 14use Foo; 15END 16 17 test_file("$tmpdir/lib/MyTest/FeatureA/Bar.pm", <<'END'); 18use strict; 19use warnings; 20use Bar; 21END 22 23 test_file("$tmpdir/lib/MyTest/FeatureB/Baz.pm", <<'END'); 24use strict; 25use warnings; 26use Baz; 27END 28}, {}, <<'CPANFILE'); 29requires 'Bar'; 30requires 'Baz'; 31requires 'Foo'; 32requires 'strict'; 33requires 'warnings'; 34CPANFILE 35 36test_cpanfile('feature', sub { 37 my $tmpdir = shift; 38 39 test_file("$tmpdir/lib/MyTest.pm", <<'END'); 40use strict; 41use warnings; 42use Foo; 43END 44 45 test_file("$tmpdir/lib/MyTest/FeatureA/Bar.pm", <<'END'); 46use strict; 47use warnings; 48use Bar; 49END 50 51 test_file("$tmpdir/lib/MyTest/FeatureB/Baz.pm", <<'END'); 52use strict; 53use warnings; 54use Baz; 55END 56}, {features => [qw!A:A:lib/MyTest/FeatureA!]}, <<'CPANFILE'); 57requires 'Baz'; 58requires 'Foo'; 59requires 'strict'; 60requires 'warnings'; 61feature 'A', 'A' => sub { 62 requires 'Bar'; 63}; 64CPANFILE 65 66test_cpanfile('features glob', sub { 67 my $tmpdir = shift; 68 69 test_file("$tmpdir/lib/MyTest.pm", <<'END'); 70use strict; 71use warnings; 72use Foo; 73END 74 75 test_file("$tmpdir/lib/MyTest/FeatureA/Bar.pm", <<'END'); 76use strict; 77use warnings; 78use Bar; 79END 80 81 test_file("$tmpdir/lib/MyTest/FeatureB/Baz.pm", <<'END'); 82use strict; 83use warnings; 84use Baz; 85END 86}, {features => [qw!features:features:lib/MyTest/Feature*!]}, <<'CPANFILE'); 87requires 'Foo'; 88requires 'strict'; 89requires 'warnings'; 90feature 'features', 'features' => sub { 91 requires 'Bar'; 92 requires 'Baz'; 93}; 94CPANFILE 95 96done_testing; 97