diff options
Diffstat (limited to 't/tags.t')
-rw-r--r-- | t/tags.t | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/t/tags.t b/t/tags.t new file mode 100644 index 0000000..90f20ca --- /dev/null +++ b/t/tags.t @@ -0,0 +1,69 @@ +use strict; +use warnings; + +use Test::More; +use List::Util 'first'; +use Carp; +use lib 't/lib'; +use A::Junk ':other'; + +BEGIN { + unshift @INC, sub { croak 'Shouldn\'t load Sub::Exporter' if $_[1] eq 'Sub/Exporter.pm' }; +} + +ok(!main->can('junk1'), 'junk1 not exported'); +ok(!main->can('junk2'), 'junk2 not exported'); +ok(main->can('junk3'), 'junk3 exported'); +ok(! $INC{'Sub/Exporter.pm'}, 'Sub::Exporter not loaded'); + +BEGIN { + package Local::Exporter; + use Sub::Exporter::Progressive -setup => { + exports => [qw/ foo bar baz /], + groups => { + default => [qw/ foo /], + bb => [qw/ bar baz /], + }, + }; + use constant foo => 1; + use constant bar => 2; + use constant baz => 3; + + $INC{'Local/Exporter.pm'} = __FILE__; +}; + +my $i = 0; +sub check_tag { + my ($tag, $should, $shouldnt) = @_; + my $pkg = 'Local::Importer' . ++$i; + + ok(eval qq{ + package $pkg; + use Local::Exporter qw( $tag ); + 1; + }, "'$tag' tag: $pkg compiled") or diag $@; + + ok( $pkg->can($_), "'$tag' tag: $pkg\->can(\"$_\")") for @$should; + ok(!$pkg->can($_), "'$tag' tag: $pkg\->can't(\"$_\")") for @$shouldnt; +} + +check_tag(':default', [qw/foo/], [qw/bar baz/]); +check_tag('-default', [qw/foo/], [qw/bar baz/]); +check_tag(':default bar', [qw/foo bar/], [qw/baz/]); +check_tag('-default bar', [qw/foo bar/], [qw/baz/]); +check_tag(':bb', [qw/bar baz/], [qw/foo/]); +check_tag('-bb', [qw/bar baz/], [qw/foo/]); +check_tag(':all', [qw/foo bar baz/], []); +check_tag('-all', [qw/foo bar baz/], []); + +SKIP: { + skip "Your version of Exporter (@{[ Exporter->VERSION ]}) supports " + .'tags only as the first argument to import()', 1 + unless eval { Exporter->VERSION('5.58') }; + + check_tag('bar :default', [qw/foo bar/], [qw/baz/]); + check_tag('bar -default', [qw/foo bar/], [qw/baz/]); +} + +done_testing; + |