# vim: set ts=2 sts=2 sw=2 expandtab smarttab:
use strict;
use warnings;
use Test::More 0.96;
use lib 't/lib';
use GitDVTest;
my @tests = (
[1, 2, '1', 'v1', {}],
[1.2, 3, '1.002', 'v1.2', {}],
[undef, undef, '0.001', 'v0.1', {}],
[undef, undef, '2.001', 'v2.1', {first_version => '2.1'}],
[undef, undef, '2.001002', 'v2.1.2', {first_version => '2.1.2'}],
[undef, 3, '2.001', 'v2.1', {first_version => '2.1'}],
[undef, 3, '2.010', 'v2.10', {first_version => '2.10'}],
[undef, 4, '2.001003', 'v2.1.3', {first_version => '2.1.3'}],
[3.4, undef, '3.004', 'v3.4', {}],
['v3.4', undef, '3.004', 'v3.4', {}],
['3.4.4', undef, '3.004004', 'v3.4.4', {}],
['3.4.4', 52, '3.004004', 'v3.4.4', {}],
[undef, undef, undef, undef, {first_version => undef}],
['x', 'y', undef, undef, {}],
[' ', '201', undef, undef, {}],
['4', 'ppp', undef, undef, {}],
);
# tests * (formats + isa) + (formats * warnings)
plan tests => @tests * (3 + 1) + (3 * grep { !defined $$_[2] } @tests);
my $mod = 'Git::DescribeVersion';
eval "require $mod" or die $@;
foreach my $test ( @tests ){
my ($prefix, $count, $dec, $dot, $opts) = @$test;
my $gdv = $mod->new($opts);
isa_ok($gdv, $mod);
test_expectations($gdv, [$prefix, $dec, $dot], $count, sub {
my ($exp, $desc) = @_;
my $parsed;
my $parse = sub { $parsed = $gdv->parse_version($prefix, $count); };
defined $exp
? &$parse
: expect_warning(
(exists $opts->{first_version} && !defined($opts->{first_version})
? qr/could not be determined/
: qr/not a valid version string/),
$parse);
is($parsed, $exp, $desc);
});
}