diff options
Diffstat (limited to 't/90-impl-selection.t')
-rw-r--r-- | t/90-impl-selection.t | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/t/90-impl-selection.t b/t/90-impl-selection.t new file mode 100644 index 0000000..4457dbe --- /dev/null +++ b/t/90-impl-selection.t @@ -0,0 +1,67 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; + +sub clear_load { + delete $Package::{'Stash::'}; + delete $INC{'Package/Stash.pm'}; + delete $INC{'Package/Stash/PP.pm'}; + delete $INC{'Package/Stash/XS.pm'}; +} + +my $has_xs; + +{ + $has_xs = eval "require Package::Stash::XS; 1"; + clear_load; +} + +{ + require Package::Stash; + warn $Package::Stash::IMPLEMENTATION; + is($Package::Stash::IMPLEMENTATION, $has_xs ? 'XS' : 'PP', + "autodetected properly"); + can_ok('Package::Stash', 'new', "and got some methods"); + clear_load; +} + +{ + $ENV{PACKAGE_STASH_IMPLEMENTATION} = 'PP'; + require Package::Stash; + is($Package::Stash::IMPLEMENTATION, 'PP', + "autodetected properly"); + can_ok('Package::Stash', 'new', "and got some methods"); + clear_load; +} + +SKIP: { + skip "no XS", 2 unless $has_xs; + $ENV{PACKAGE_STASH_IMPLEMENTATION} = 'XS'; + require Package::Stash; + is($Package::Stash::IMPLEMENTATION, 'XS', + "autodetected properly"); + can_ok('Package::Stash', 'new', "and got some methods"); + clear_load; +} + +{ + $Package::Stash::IMPLEMENTATION = 'PP'; + require Package::Stash; + is($Package::Stash::IMPLEMENTATION, 'PP', + "autodetected properly"); + can_ok('Package::Stash', 'new', "and got some methods"); + clear_load; +} + +SKIP: { + skip "no XS", 2 unless $has_xs; + $Package::Stash::IMPLEMENTATION = 'XS'; + require Package::Stash; + is($Package::Stash::IMPLEMENTATION, 'XS', + "autodetected properly"); + can_ok('Package::Stash', 'new', "and got some methods"); + clear_load; +} + +done_testing; |