1use strict;
2use warnings;
3use lib qw(t/lib);
4use Test::More;
5use Log::Dispatch;
6use Log::Dispatch::TestUtil qw(cmp_deeply);
7use File::Temp qw( tempdir );
8
9my $tempdir = tempdir( CLEANUP => 1 );
10
11{
12    my $emerg_log = File::Spec->catdir( $tempdir, 'emerg.log' );
13
14    # Short syntax
15    my $dispatch0 = Log::Dispatch->new(
16        outputs => [
17            [
18                'File', name => 'file', min_level => 'emerg',
19                filename => $emerg_log
20            ],
21            [
22                '+Log::Dispatch::Screen', name => 'screen',
23                min_level => 'debug'
24            ]
25        ]
26    );
27
28    # Short syntax alternate (2.23)
29    my $dispatch1 = Log::Dispatch->new(
30        outputs => [
31            'File' => {
32                name => 'file', min_level => 'emerg', filename => $emerg_log
33            },
34            '+Log::Dispatch::Screen' =>
35                { name => 'screen', min_level => 'debug' }
36        ]
37    );
38
39    # Long syntax
40    my $dispatch2 = Log::Dispatch->new;
41    $dispatch2->add(
42        Log::Dispatch::File->new(
43            name      => 'file',
44            min_level => 'emerg',
45            filename  => $emerg_log
46        )
47    );
48    $dispatch2->add(
49        Log::Dispatch::Screen->new( name => 'screen', min_level => 'debug' )
50    );
51
52    cmp_deeply( $dispatch0, $dispatch2,
53        "created equivalent dispatchers - 0" );
54    cmp_deeply( $dispatch1, $dispatch2,
55        "created equivalent dispatchers - 1" );
56}
57
58{
59    eval { Log::Dispatch->new( outputs => ['File'] ) };
60    like( $@, qr/expected arrayref/,
61        "got error for expected inner arrayref" );
62}
63{
64    eval { Log::Dispatch->new( outputs => 'File' ) };
65    like( $@, qr/not one of the allowed types: arrayref/,
66        "got error for expected outer arrayref" );
67}
68
69done_testing();
70