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