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;

use Scalar::Util qw(refaddr);

use lib 't/lib';

# DDR - default default ref -- uses the default default_logger_ref
{ package DDR_P; use DDR::Parent '$Logger'; }
{ package DDR_C; use DDR::Child  '$Logger'; }

# SDR - shared default ref -- uses a default_logger_ref shared between classes
{ package SDR_P; use SDR::Parent '$Logger'; }
{ package SDR_C; use SDR::Child  '$Logger'; }

is(
  refaddr( $DDR_P::Logger ),
  refaddr( $DDR_C::Logger ),
  "DDR parent and child share logger storage",
);

# DDR::Child can store its default in a different place, but
# $DDR::Parent::Logger is already defined when we get here, so the logic is
# "already defined and not equal to *my* default, so it is untouched."
is($DDR_P::Logger->ident, 'DDR::Parent', "parent won the initialization race");

is(
  refaddr( $SDR_P::Logger ),
  refaddr( $SDR_C::Logger ),
  "SDR parent and child share logger storage",
);

is(
  $SDR_P::Logger->ident,
  'SDR::Parent',
  "SDR::Parent is initialized first, so its default wins",
);

done_testing;