summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2013-10-28 18:09:08 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2013-10-28 18:09:08 +0000
commit1f3ec55911f841590a62ed06becc2bd9131a5fc4 (patch)
treec5cc7c17e75fff9f97efbd575d464cb9da4f60e9 /t
downloadSub-Exporter-Progressive-tarball-master.tar.gz
Sub-Exporter-Progressive-0.001011HEADSub-Exporter-Progressive-0.001011master
Diffstat (limited to 't')
-rw-r--r--t/all.t22
-rw-r--r--t/basic.t13
-rw-r--r--t/default.t13
-rw-r--r--t/lib/A/Junk.pm15
-rw-r--r--t/lib/A/JunkAll.pm13
-rw-r--r--t/sex.t18
-rw-r--r--t/tags.t69
-rw-r--r--t/version-check.t42
8 files changed, 205 insertions, 0 deletions
diff --git a/t/all.t b/t/all.t
new file mode 100644
index 0000000..bf6fad5
--- /dev/null
+++ b/t/all.t
@@ -0,0 +1,22 @@
+
+use strict;
+use warnings;
+
+use Test::More;
+use List::Util 'first';
+use lib 't/lib';
+use A::JunkAll;
+
+ok(main->can('junk1'), 'sub exported');
+ok(main->can('junk2'), 'sub exported');
+ok(! $INC{'Sub/Exporter.pm'}, 'Sub::Exporter not loaded');
+
+package Other;
+use Test::More;
+use A::JunkAll ':all';
+
+ok(main->can('junk1'), 'sub exported');
+ok(main->can('junk2'), 'sub exported');
+ok(! $INC{'Sub/Exporter.pm'}, 'Sub::Exporter not loaded');
+
+done_testing;
diff --git a/t/basic.t b/t/basic.t
new file mode 100644
index 0000000..5a841d1
--- /dev/null
+++ b/t/basic.t
@@ -0,0 +1,13 @@
+
+use strict;
+use warnings;
+
+use Test::More;
+use List::Util 'first';
+use lib 't/lib';
+use A::Junk 'junk1';
+
+ok(main->can('junk1'), 'requested sub exported');
+ok(! $INC{'Sub/Exporter.pm'}, 'Sub::Exporter not loaded');
+
+done_testing;
diff --git a/t/default.t b/t/default.t
new file mode 100644
index 0000000..f7eb327
--- /dev/null
+++ b/t/default.t
@@ -0,0 +1,13 @@
+
+use strict;
+use warnings;
+
+use Test::More;
+use List::Util 'first';
+use lib 't/lib';
+use A::Junk;
+
+ok(main->can('junk2'), 'sub exported');
+ok(! $INC{'Sub/Exporter.pm'}, 'Sub::Exporter not loaded');
+
+done_testing;
diff --git a/t/lib/A/Junk.pm b/t/lib/A/Junk.pm
new file mode 100644
index 0000000..a5eab20
--- /dev/null
+++ b/t/lib/A/Junk.pm
@@ -0,0 +1,15 @@
+package A::Junk;
+
+use Sub::Exporter::Progressive -setup => {
+ exports => [qw(junk1 junk2 junk3)],
+ groups => {
+ default => ['junk2'],
+ other => ['junk3'],
+ },
+};
+
+sub junk1 { 1 }
+sub junk2 { 1 }
+sub junk3 { 1 }
+
+1;
diff --git a/t/lib/A/JunkAll.pm b/t/lib/A/JunkAll.pm
new file mode 100644
index 0000000..d3e6123
--- /dev/null
+++ b/t/lib/A/JunkAll.pm
@@ -0,0 +1,13 @@
+package A::JunkAll;
+
+use Sub::Exporter::Progressive -setup => {
+ exports => [qw(junk1 junk2)],
+ groups => {
+ default => [ -all ],
+ },
+};
+
+sub junk1 { 1 }
+sub junk2 { 1 }
+
+1;
diff --git a/t/sex.t b/t/sex.t
new file mode 100644
index 0000000..103b0d1
--- /dev/null
+++ b/t/sex.t
@@ -0,0 +1,18 @@
+
+use strict;
+use warnings;
+
+use Test::More;
+BEGIN {
+ plan skip_all => 'Sub::Exporter not installed'
+ unless eval { require Sub::Exporter };
+}
+
+use List::Util 'first';
+use lib 't/lib';
+use A::Junk 'junk1' => { -as => 'junk' };
+
+ok(main->can('junk'), 'sub renamed with Sub::Exporter');
+ok($INC{'Sub/Exporter.pm'}, 'Sub::Exporter loaded');
+
+done_testing;
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;
+
diff --git a/t/version-check.t b/t/version-check.t
new file mode 100644
index 0000000..5fe1062
--- /dev/null
+++ b/t/version-check.t
@@ -0,0 +1,42 @@
+
+use strict;
+use warnings;
+use Test::More;
+
+BEGIN {
+ package AAA;
+ our $VERSION = 2;
+ use Sub::Exporter::Progressive -setup => {
+ exports => ['aaa'],
+ };
+ sub aaa { 'aaa' };
+ $INC{'AAA.pm'} = __FILE__;
+};
+
+ok(eval('use AAA 1; 1'), 'perl built-in module version check');
+
+{
+ local $@;
+ ok(!eval('use AAA 3; 1'), 'perl built-in module version check');
+ like(
+ $@,
+ qr/^AAA version 3 required/,
+ 'perl built-in module version check error message',
+ );
+}
+
+{
+ local $@;
+ ok(
+ !eval('use AAA aaa => 1; 1'),
+ 'Exporter.pm-style version check',
+ );
+ like(
+ $@,
+ qr{^cannot export symbols with a leading digit: '1'},
+ 'Sub::Exporter::Progressive error message',
+ );
+}
+
+done_testing;
+