summaryrefslogtreecommitdiff
path: root/t/feature.t
diff options
context:
space:
mode:
Diffstat (limited to 't/feature.t')
-rw-r--r--t/feature.t87
1 files changed, 87 insertions, 0 deletions
diff --git a/t/feature.t b/t/feature.t
new file mode 100644
index 0000000..2600b77
--- /dev/null
+++ b/t/feature.t
@@ -0,0 +1,87 @@
+use strict;
+use Module::CPANfile;
+use Test::More;
+use t::Utils;
+
+{
+ my $r = write_cpanfile(<<FILE);
+on test => sub {
+ requires 'Test::More', '0.90';
+};
+
+feature 'sqlite' => sub {
+ on runtime => sub { requires 'DBD::SQLite' },
+};
+FILE
+ my $cpanfile = Module::CPANfile->load;
+ my @features = $cpanfile->features;
+ is $features[0]->identifier, 'sqlite';
+ is $features[0]->description, 'sqlite';
+}
+
+{
+ my $r = write_cpanfile(<<FILE);
+on test => sub {
+ requires 'Test::More', '0.90';
+};
+
+feature 'sqlite', 'SQLite support' => sub {
+ on runtime => sub { requires 'DBD::SQLite' },
+};
+FILE
+ my $cpanfile = Module::CPANfile->load;
+
+ my @features = $cpanfile->features;
+ is @features, 1;
+ ok $features[0]->isa('CPAN::Meta::Feature');
+ is $features[0]->identifier, 'sqlite';
+ is $features[0]->description, 'SQLite support';
+ ok $features[0]->prereqs;
+
+ is_deeply $features[0]->prereqs->as_string_hash, { runtime => { requires => { 'DBD::SQLite' => '0' } } };
+
+ {
+ my $prereqs = $cpanfile->prereqs;
+ is_deeply $prereqs->as_string_hash, {
+ test => { requires => { 'Test::More' => '0.90' } },
+ };
+ }
+
+ {
+ my $prereqs = $cpanfile->effective_prereqs;
+ is_deeply $prereqs->as_string_hash, {
+ test => { requires => { 'Test::More' => '0.90' } },
+ };
+ }
+
+ {
+ my $prereqs = $cpanfile->prereqs_with('sqlite');
+ is_deeply $prereqs->as_string_hash, {
+ test => { requires => { 'Test::More' => '0.90' } },
+ runtime => { requires => { 'DBD::SQLite' => '0' } },
+ };
+ }
+
+ {
+ my $prereqs = $cpanfile->effective_prereqs(['sqlite']);
+ is_deeply $prereqs->as_string_hash, {
+ test => { requires => { 'Test::More' => '0.90' } },
+ runtime => { requires => { 'DBD::SQLite' => '0' } },
+ };
+ }
+
+ {
+ eval { my $prereqs = $cpanfile->prereqs_with('foobar') };
+ like $@, qr/Unknown feature 'foobar'/;
+ }
+
+ {
+ # no features, it's ok
+ eval { my $prereqs = $cpanfile->prereqs_with() };
+ ok !$@, $@;
+ }
+
+ like $cpanfile->to_string, qr/feature/;
+}
+
+done_testing;