File: SRand.t

package info (click to toggle)
perl 5.42.0-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 128,392 kB
  • sloc: perl: 534,963; ansic: 240,563; sh: 72,042; pascal: 6,934; xml: 2,428; yacc: 1,360; makefile: 1,197; cpp: 208; lisp: 1
file content (102 lines) | stat: -rw-r--r-- 2,886 bytes parent folder | download | duplicates (3)
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();