The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin/lib";
use Test::More;
use Log::Dump::Test::ClassUserA;
use Log::Dump::Test::ClassUserB;

subtest 'log_class_has' => sub {
  for my $method (qw( log logger logfilter logfile logcolor )) {
    ok(Log::Dump::Test::ClassLog->can($method), "has $method");
  }
};

subtest 'log_object_has' => sub {
  my $object = Log::Dump::Test::ClassLog->new;

  for my $method (qw( log logger logfilter logfile logcolor )) {
    ok($object->can($method), "has $method");
  }
};

subtest 'user_class_has' => sub {
  for my $method (qw( log logger logfilter logfile logcolor )) {
    ok(Log::Dump::Test::ClassUserA->can($method), "has $method");
  }
};

subtest 'user_object_has' => sub {
  my $object = Log::Dump::Test::ClassUserA->new;

  for my $method (qw( log logger logfilter logfile logcolor )) {
    ok($object->can($method), "has $method");
  }
};

subtest 'class_logger' => sub {
  Log::Dump::Test::ClassUserA->logger(undef);
  Log::Dump::Test::ClassUserB->logger(undef);

  ok(!defined Log::Dump::Test::ClassUserA->logger, 'logger for user A is not defined');

  ok(!defined Log::Dump::Test::ClassUserB->logger, 'logger for user A is not defined');

  ok(!defined Log::Dump::Class->logger, 'base logger is not defined');

  Log::Dump::Test::ClassUserA->logger(0);

  ok(defined Log::Dump::Test::ClassUserB->logger, 'logger for user B is also defined');

  ok(defined Log::Dump::Test::ClassLog->logger, 'class logger is also defined');

  ok(!defined Log::Dump::Class->logger, 'still, base logger is not defined');
};

subtest 'object_logger' => sub {
  Log::Dump::Test::ClassUserA->logger(undef);
  Log::Dump::Test::ClassUserB->logger(undef);

  my $user_a = Log::Dump::Test::ClassUserA->new;
  my $user_b = Log::Dump::Test::ClassUserB->new;

  ok(!defined $user_a->logger, 'logger for user A is not defined');

  ok(!defined $user_b->logger, 'logger for user A is not defined');

  ok(!defined Log::Dump::Test::ClassLog->logger, 'class logger is not defined');

  ok(!defined Log::Dump::Class->logger, 'base logger is not defined');

  $user_a->logger(0);

  ok(defined $user_b->logger, 'logger for user B is also defined');

  ok(defined Log::Dump::Test::ClassLog->logger, 'class logger is also defined');

  ok(!defined Log::Dump::Class->logger, 'still, base logger is not defined');
};

done_testing;