The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

use strict;
use warnings;
use Test::More tests => 26 + 1;
use Test::NoWarnings;
use English;

use Log::Deep;

my $deep;
eval { $deep = Log::Deep->new; };

SKIP:
{
	if ($EVAL_ERROR) {
		skip("Could not wright log file: $EVAL_ERROR", 26) if $EVAL_ERROR;
	}

	my $level = $deep->level;
	is_deeply( $level, { fatal=>1, error=>1, warn=>1, debug=>0, message=>0, info=>0 }, "Check that the default setup is as expected" );

	$level = $deep->level('debug');
	is_deeply( $level, { fatal=>1, error=>1, warn=>1, debug=>1, message=>0, info=>0 }, "turn on debug and higher" );

	$level = $deep->level(1);
	is_deeply( $level, { fatal=>1, error=>1, warn=>1, debug=>1, message=>1, info=>0 }, "turn on message and higher" );

	$deep->level( -set => 'info' );
	$level = $deep->level;
	is_deeply( $level, { fatal=>1, error=>1, warn=>1, debug=>1, message=>1, info=>1 }, "trun on just info" );

	$deep->level( -unset => 'message' );
	$level = $deep->level;
	is_deeply( $level, { fatal=>1, error=>1, warn=>1, debug=>1, message=>0, info=>1 }, "trun off just message" );

	$deep->enable('info');
	ok( $deep->level->{info}, 'Enabled info' );
	ok( $deep->is_info, 'Enabled info via is' );
	$deep->disable('info');
	ok( !$deep->is_info, 'Disabled info' );

	$deep->enable('message');
	ok( $deep->level->{message}, 'Enabled message' );
	ok( $deep->is_message, 'Enabled message via is' );
	$deep->disable('message');
	ok( !$deep->is_message, 'Disabled message' );

	$deep->enable('debug');
	ok( $deep->level->{debug}, 'Enabled debug' );
	ok( $deep->is_debug, 'Enabled debug via is' );
	$deep->disable('debug');
	ok( !$deep->is_debug, 'Disabled debug' );

	$deep->enable('warn');
	ok( $deep->level->{warn}, 'Enabled warn' );
	ok( $deep->is_warn, 'Enabled warn via is' );
	$deep->disable('warn');
	ok( !$deep->is_warn, 'Disabled warn' );

	$deep->enable('error');
	ok( $deep->level->{error}, 'Enabled error' );
	ok( $deep->is_error, 'Enabled error via is' );
	$deep->disable('error');
	ok( !$deep->is_error, 'Disabled error' );

	$deep->enable('fatal');
	ok( $deep->level->{fatal}, 'Enabled fatal' );
	ok( $deep->is_fatal, 'Enabled fatal via is' );
	$deep->disable('fatal');
	ok( !$deep->is_fatal, 'Disabled fatal' );

	ok( $deep->is_security, 'Enabled security via is' );

	# setting levels with new
	$deep = Log::Deep->new( -level => [qw/fatal error/] );

	$level = $deep->level;
	is_deeply( $level, { fatal=>1, error=>1, warn=>0, debug=>0, message=>0, info=>0 }, "Check that the default setup is as expected" );

	$deep = Log::Deep->new( -level => 2 );

	$level = $deep->level;
	is_deeply( $level, { fatal=>1, error=>1, warn=>1, debug=>1, message=>0, info=>0 }, "Check that the default setup is as expected" );
}