Blame t/bad_version_hook.t

Packit f40462
use strict;
Packit f40462
use warnings;
Packit f40462
Packit f40462
use CPAN::Meta::Requirements;
Packit f40462
use version;
Packit f40462
Packit f40462
use Test::More 0.88;
Packit f40462
Packit f40462
my %DATA = (
Packit f40462
  'Foo::Bar' => [ 10, 10 ],
Packit f40462
  'Foo::Baz' => [ 'invalid_version', 42 ],
Packit f40462
  'Foo::Qux' => [ 'version', 42 ],
Packit f40462
);
Packit f40462
my %input = map { ($_ => $DATA{$_}->[0]) } keys %DATA;
Packit f40462
my %expected = map { ($_ => $DATA{$_}->[1]) } keys %DATA;
Packit f40462
Packit f40462
sub dies_ok (&@) {
Packit f40462
  my ($code, $qr, $comment) = @_;
Packit f40462
Packit f40462
  no warnings 'redefine';
Packit f40462
  local *Regexp::CARP_TRACE  = sub { "<regexp>" };
Packit f40462
  my $lived = eval { $code->(); 1 };
Packit f40462
Packit f40462
  if ($lived) {
Packit f40462
    fail("$comment: did not die");
Packit f40462
  } else {
Packit f40462
    like($@, $qr, $comment);
Packit f40462
  }
Packit f40462
}
Packit f40462
Packit f40462
my $hook_text;
Packit f40462
sub _fixit { my ($v, $m) = @_; $hook_text .= $m; return version->new(42) }
Packit f40462
Packit f40462
{
Packit f40462
  my $req = CPAN::Meta::Requirements->new( {bad_version_hook => \&_fixit} );
Packit f40462
Packit f40462
  my ($k, $v);
Packit f40462
  while (($k, $v) = each %input) {
Packit f40462
    note "adding minimum requirement: $k => $v";
Packit f40462
    eval { $req->add_minimum($k => $v) };
Packit f40462
    is( $@, '', "adding minimum '$k' for $v" );
Packit f40462
  }
Packit f40462
  like( $hook_text, qr/Foo::Baz/, 'hook stored module name' );
Packit f40462
Packit f40462
  is_deeply(
Packit f40462
    $req->as_string_hash,
Packit f40462
    \%expected,
Packit f40462
    "hook fixes invalid version",
Packit f40462
  );
Packit f40462
}
Packit f40462
Packit f40462
{
Packit f40462
  my $req = CPAN::Meta::Requirements->new( {bad_version_hook => sub { 0 }} );
Packit f40462
Packit f40462
  dies_ok { $req->add_minimum('Foo::Baz' => 'invalid_version') }
Packit f40462
    qr/Invalid version/,
Packit f40462
    "dies if hook doesn't return version object";
Packit f40462
Packit f40462
}
Packit f40462
Packit f40462
Packit f40462
done_testing;