1use strict;
2use warnings FATAL => 'all';
3
4use Test::More 0.88;
5
6use File::Spec;
7use File::Temp qw( tempdir );
8use Log::Dispatch;
9
10my $dir = tempdir( CLEANUP => 1 );
11
12{
13    my $logger = Log::Dispatch->new(
14        outputs => [
15            [
16                'File',
17                min_level => 'debug',
18                newline   => 1,
19                name      => 'lazy_open',
20                filename  => File::Spec->catfile( $dir, 'lazy_open.log' ),
21                lazy_open => 1,
22            ],
23        ],
24    );
25
26    ok(
27        !$logger->output('lazy_open')->{fh},
28        'lazy_open output has not created a fh before first write'
29    );
30
31    $logger->log( level => 'info', message => 'first message' );
32    is(
33        _slurp( $logger->output('lazy_open')->{filename} ),
34        "first message\n",
35        'first line from lazy_open output'
36    );
37
38    ok(
39        $logger->output('lazy_open')->{fh},
40        'lazy_open output has still an open fh'
41    );
42
43    $logger->log( level => 'info', message => 'second message' );
44
45    is(
46        _slurp( $logger->output('lazy_open')->{filename} ),
47        "first message\nsecond message\n",
48        'full content from caw output'
49    );
50
51    ok(
52        $logger->output('lazy_open')->{fh},
53        'lazy_open output has still an open fh'
54    );
55}
56
57done_testing();
58
59sub _slurp {
60    open my $fh, '<', $_[0]
61        or die "Cannot read $_[0]: $!";
62    my $s = do {
63        local $/ = undef;
64        <$fh>;
65    };
66    close $fh or die $!;
67    return $s;
68}
69