1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
use strict;
use warnings;
use Test2::Tools::Basic;
use Test2::API qw/intercept test2_stack context/;
use Test2::Tools::Compare qw/array event end is like/;
use Test2::Tools::Target 'Test2::Plugin::SRand';
use Test2::Tools::Warnings qw/warning/;
test2_stack->top;
my ($root) = test2_stack->all;
sub intercept_2(&) {
my $code = shift;
# This is to force loading to happen
my $ctx = context();
my @events;
my $l = $root->listen(sub {
my ($h, $e) = @_;
push @events => $e;
});
$code->();
$root->unlisten($l);
$ctx->release;
return \@events;
}
{
local $ENV{HARNESS_IS_VERBOSE} = 1;
local $ENV{T2_RAND_SEED} = 1234;
my ($events, $warning);
my $reseed_qr = qr/SRand loaded multiple times, re-seeding rand/;
my $reseed_name = "Warned about resetting srand";
like(
intercept_2 { $CLASS->import('5555') },
array {
event Note => { message => "Seeded srand with seed '5555' from import arg." };
},
"got the event"
);
is($CLASS->seed, 5555, "set seed");
is($CLASS->from, 'import arg', "set from");
$warning = warning { $events = intercept_2 { $CLASS->import(seed => 56789) } };
like(
$events,
array {
event Note => { message => "Seeded srand with seed '56789' from import arg." };
},
"got the event"
);
is($CLASS->seed, 56789, "set seed");
is($CLASS->from, 'import arg', "set from");
like($warning, $reseed_qr, $reseed_name);
$warning = warning { $events = intercept_2 { $CLASS->import() } };
like(
$events,
array {
event Note => { message => "Seeded srand with seed '1234' from environment variable." };
},
"got the event"
);
is($CLASS->seed, 1234, "set seed");
is($CLASS->from, 'environment variable', "set from");
like($warning, $reseed_qr, $reseed_name);
delete $ENV{T2_RAND_SEED};
$warning = warning { $events = intercept_2 { $CLASS->import() } };
like(
$events,
array {
event Note => { message => qr/Seeded srand with seed '\d{8}' from local date\./ };
},
"got the event"
);
ok($CLASS->seed && $CLASS->seed != 1234, "set seed");
is($CLASS->from, 'local date', "set from");
$warning = like($warning, $reseed_qr, $reseed_name);
my $hooks = Test2::API::test2_list_exit_callbacks();
delete $ENV{HARNESS_IS_VERBOSE};
$ENV{HARNESS_ACTIVE} = 1;
$warning = warning { $events = intercept { $CLASS->import() } };
$warning = warning { $events = intercept { $CLASS->import() } };
is(Test2::API::test2_list_exit_callbacks, $hooks + 1, "added hook, but only once");
$warning = warning { $CLASS->import(undef) };
is($CLASS->seed, 0 , "set seed");
is($CLASS->from, 'import arg', "set from");
}
done_testing();
|