#!perl # Test that Want::howmany gets used and that Want module absence is # handled gracefully. use Test::More tests => 12; use strict; use warnings; use Data::Iterator::Hierarchical; my @test_data= map { [ "A$_","B$_","C$_" ] } 1 .. 100; my $it = hierarchical_iterator(\@test_data); sub test_Want_not_installed { my ($want) = @_; local $@; ok( !eval { () = $it->(my $inner); 1}, "$want not installed fails"); like($@,qr/not installed/,"$want not installed error"); } # To test the 'not installed' error even if Want is installed we # need to fake it not being installed Hmmm... is there not a # Test:: for this? sub fake_Want_not_installed { require Data::Iterator::Hierarchical::FakeWant::WillFail if $_[1] eq 'Want.pm'; } # To test the 'not installed' error we need to fake Want not being installed # Hmmm... is there not a Test:: for this? unshift @INC, \&fake_Want_not_installed; test_Want_not_installed 'fake Want'; shift @INC; SKIP: { skip 'Want is installed', 2 if eval { require Want; 1 }; test_Want_not_installed 'Want'; } our $howmany; my $want = 'Want::howmany'; sub do_tests { { local $howmany = 1; my($one)=$it->(my $inner); my($two)=$inner->(); like($two,qr/^B/,"$want 1"); } { local $howmany = 2; my($one,$two)=$it->(my $inner); my($three)=$inner->(); like($three,qr/^C/,"$want 2"); } { local $howmany; local $@; ok( !eval { my @stuff = $it->(my $inner); 1}, "$want undef fails"); like($@,qr/not implicit/,"$want undef error"); } } SKIP: { skip 'Want not installed', 4 unless eval { require Want; 1 }; do_tests; } # Run the fake tests even when Want *is* installed to test the tests no warnings 'redefine'; *Want::howmany = sub () { $howmany }; $want = "fake $want"; $INC{'Want.pm'} ||= ''; do_tests;