The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Moo::_strictures;
use Test::More;
use Test::Fatal;

use Moo::_Utils qw(_maybe_load_module);

use t::lib::INCModule;

my %files = (
  'Broken/Class.pm' => q{
    use strict;
    use warnings;
    my $f = flub;
  },
);
unshift @INC, sub {
  my $out = $files{$_[1]} or return;
  return inc_module($out);
};

{
  my @warn;
  local $SIG{__WARN__} = sub { push @warn, @_ };
  is exception {
    ok !_maybe_load_module('Broken::Class'),
      '_maybe_load_module returns false for broken modules';
  }, undef, "_maybe_load_module doesn't die on broken modules";
  like $warn[0], qr/Broken::Class exists but failed to load with error/,
    '_maybe_load_module errors become warnings';
  _maybe_load_module('Broken::Class');
  is scalar @warn, 1,
    '_maybe_load_module only warns once per module';
}

done_testing;