The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T
use strict;
use warnings;

use Test::More tests => 7;

BEGIN { use_ok('Package::Generator'); }

Package::Generator->new_package({
  make_unique => sub { return 'Totally::Not::Unique' },
});

# Now with that generated, let's try to generate it again.

eval {
  Package::Generator->new_package({
    make_unique => sub { return 'Totally::Not::Unique' },
  });
};

like(
  $@,
  qr/couldn't generate a pristene package/,
  "name collision (we MIHOP)",
);

sub seq {
  my $i = 0;
  sub { $i++ };
}

eval {
  Package::Generator->new_package({ unique_part => seq });
};

is($@, '', "no problem making table with 1");

eval {
  Package::Generator->new_package({ unique_part => seq });
};

like($@, qr/couldn't generate a pristene/, "but second attempt fails (good!)");

eval {
  Package::Generator->new_package({ max_tries   => 2, unique_part => seq });
};

is($@, '', "but an atempt with max_tries=2 is ok");

eval {
  Package::Generator->new_package({ max_tries   => 2, unique_part => seq });
};

like(
  $@,
  qr/couldn't generate a pristene/,
  "but next attempt with max_tries=2 fails (good!)",
);

eval {
  Package::Generator->new_package({ max_tries   => 3, unique_part => seq });
};

is($@, '', "but an atempt with max_tries=3 is ok");