15759b3d2Safresh1use strict; 25759b3d2Safresh1use warnings; 35759b3d2Safresh1 4256a93a4Safresh1if ($] lt "5.008") { 5256a93a4Safresh1 print "1..0 # SKIP Test cannot run on perls below 5.8.0 because local doesn't work on hash keys.\n"; 6256a93a4Safresh1 exit 0; 7256a93a4Safresh1} 8256a93a4Safresh1 95759b3d2Safresh1use Test2::IPC; 105759b3d2Safresh1use Test2::Tools::Tiny; 115759b3d2Safresh1use Test2::API::Breakage; 125759b3d2Safresh1my $CLASS = 'Test2::API::Breakage'; 135759b3d2Safresh1 145759b3d2Safresh1for my $meth (qw/upgrade_suggested upgrade_required known_broken/) { 155759b3d2Safresh1 my @list = $CLASS->$meth; 165759b3d2Safresh1 ok(!(@list % 2), "Got even list ($meth)"); 175759b3d2Safresh1 ok(!(grep {!defined($_)} @list), "No undefined items ($meth)"); 185759b3d2Safresh1} 195759b3d2Safresh1 205759b3d2Safresh1{ 215759b3d2Safresh1 no warnings 'redefine'; 225759b3d2Safresh1 local *Test2::API::Breakage::upgrade_suggested = sub { 235759b3d2Safresh1 return ('T2Test::UG1' => '1.0', 'T2Test::UG2' => '0.5'); 245759b3d2Safresh1 }; 255759b3d2Safresh1 265759b3d2Safresh1 local *Test2::API::Breakage::upgrade_required = sub { 275759b3d2Safresh1 return ('T2Test::UR1' => '1.0', 'T2Test::UR2' => '0.5'); 285759b3d2Safresh1 }; 295759b3d2Safresh1 305759b3d2Safresh1 local *Test2::API::Breakage::known_broken = sub { 315759b3d2Safresh1 return ('T2Test::KB1' => '1.0', 'T2Test::KB2' => '0.5'); 325759b3d2Safresh1 }; 335759b3d2Safresh1 use warnings 'redefine'; 345759b3d2Safresh1 355759b3d2Safresh1 ok(!$CLASS->report, "Nothing to report"); 365759b3d2Safresh1 ok(!$CLASS->report(1), "Still nothing to report"); 375759b3d2Safresh1 385759b3d2Safresh1 { 39256a93a4Safresh1 local $INC{"T2Test/UG1.pm"} = "T2Test/UG1.pm"; 40256a93a4Safresh1 local $INC{"T2Test/UG2.pm"} = "T2Test/UG2.pm"; 41256a93a4Safresh1 local $INC{"T2Test/UR1.pm"} = "T2Test/UR1.pm"; 42256a93a4Safresh1 local $INC{"T2Test/UR2.pm"} = "T2Test/UR2.pm"; 43256a93a4Safresh1 local $INC{"T2Test/KB1.pm"} = "T2Test/KB1.pm"; 44256a93a4Safresh1 local $INC{"T2Test/KB2.pm"} = "T2Test/KB2.pm"; 45256a93a4Safresh1 465759b3d2Safresh1 local $T2Test::UG1::VERSION = '0.9'; 475759b3d2Safresh1 local $T2Test::UG2::VERSION = '0.9'; 485759b3d2Safresh1 local $T2Test::UR1::VERSION = '0.9'; 495759b3d2Safresh1 local $T2Test::UR2::VERSION = '0.9'; 505759b3d2Safresh1 local $T2Test::KB1::VERSION = '0.9'; 515759b3d2Safresh1 local $T2Test::KB2::VERSION = '0.9'; 525759b3d2Safresh1 535759b3d2Safresh1 my @report = $CLASS->report; 545759b3d2Safresh1 55de8cc8edSafresh1 $_ =~ s{\S+/Breakage\.pm}{Breakage.pm}g for @report; 56de8cc8edSafresh1 575759b3d2Safresh1 is_deeply( 585759b3d2Safresh1 [sort @report], 595759b3d2Safresh1 [ 605759b3d2Safresh1 sort 615759b3d2Safresh1 " * Module 'T2Test::UR1' is outdated and known to be broken, please update to 1.0 or higher.", 625759b3d2Safresh1 " * Module 'T2Test::KB1' is known to be broken in version 1.0 and below, newer versions have not been tested. You have: 0.9", 635759b3d2Safresh1 " * Module 'T2Test::KB2' is known to be broken in version 0.5 and below, newer versions have not been tested. You have: 0.9", 64*5486feefSafresh1 " * Module 'T2Test::UG1' is outdated, we recommend updating above 1.0. error was: 'T2Test::UG1 version 1.0 required--this is only version 0.9 at Breakage.pm line 75.'; INC is T2Test/UG1.pm", 655759b3d2Safresh1 ], 665759b3d2Safresh1 "Got expected report items" 675759b3d2Safresh1 ); 685759b3d2Safresh1 } 695759b3d2Safresh1 705759b3d2Safresh1 my %look; 715759b3d2Safresh1 unshift @INC => sub { 725759b3d2Safresh1 my ($this, $file) = @_; 735759b3d2Safresh1 $look{$file}++ if $file =~ m{T2Test}; 745759b3d2Safresh1 return; 755759b3d2Safresh1 }; 765759b3d2Safresh1 ok(!$CLASS->report, "Nothing to report"); 775759b3d2Safresh1 is_deeply(\%look, {}, "Did not try to load anything"); 785759b3d2Safresh1 795759b3d2Safresh1 ok(!$CLASS->report(1), "Nothing to report"); 805759b3d2Safresh1 is_deeply( 815759b3d2Safresh1 \%look, 825759b3d2Safresh1 { 835759b3d2Safresh1 'T2Test/UG1.pm' => 1, 845759b3d2Safresh1 'T2Test/UG2.pm' => 1, 855759b3d2Safresh1 'T2Test/UR1.pm' => 1, 865759b3d2Safresh1 'T2Test/UR2.pm' => 1, 875759b3d2Safresh1 'T2Test/KB1.pm' => 1, 885759b3d2Safresh1 'T2Test/KB2.pm' => 1, 895759b3d2Safresh1 }, 905759b3d2Safresh1 "Tried to load modules" 915759b3d2Safresh1 ); 925759b3d2Safresh1} 935759b3d2Safresh1 945759b3d2Safresh1done_testing; 95