
Perl version strings are flawed in a few ways. Convert them to user-friendly strings when printed so that Git tags and tarball names are easier for downstream distributions to work with.
62 lines
1.8 KiB
Perl
62 lines
1.8 KiB
Perl
use Test::More;
|
|
use version;
|
|
|
|
SKIP: { eval { require Test::Warnings; } or skip($@, 1); }
|
|
eval { require 'ddclient'; } or BAIL_OUT($@);
|
|
|
|
ok(ddclient::parse_version($ddclient::VERSION),
|
|
"module's Perl version string is in opinionated form");
|
|
|
|
my $n = qr/0|[1-9]\d{0,2}/;
|
|
like($ddclient::version, qr/^$n\.$n\.$n(?:~alpha|~beta$n|~rc$n|r$n)?$/,
|
|
"human-readable version is in opinionated form");
|
|
|
|
my @tcs = (
|
|
['v1.0_0', '1~alpha'],
|
|
['v1.0.0_0', '1.0~alpha'],
|
|
['v1.2.3.0_0', '1.2.3~alpha'],
|
|
['v1.2.3.4.0_0', '1.2.3.4~alpha'],
|
|
['v1.0_1', '1~beta1'],
|
|
['v1.0.0_1', '1.0~beta1'],
|
|
['v1.2.3.0_1', '1.2.3~beta1'],
|
|
['v1.2.3.4.0_1', '1.2.3.4~beta1'],
|
|
['v1.2.3.0_899', '1.2.3~beta899'],
|
|
['v1.0_901', '1~rc1'],
|
|
['v1.0.0_901', '1.0~rc1'],
|
|
['v1.2.3.0_901', '1.2.3~rc1'],
|
|
['v1.2.3.4.0_901', '1.2.3.4~rc1'],
|
|
['v1.2.3.0_998', '1.2.3~rc98'],
|
|
['v1.999', '1'],
|
|
['v1.0.999', '1.0'],
|
|
['v1.2.3.999', '1.2.3'],
|
|
['v1.2.3.4.999', '1.2.3.4'],
|
|
['v1.999.1', '1r1'],
|
|
['v1.0.999.1', '1.0r1'],
|
|
['v1.2.3.999.1', '1.2.3r1'],
|
|
['v1.2.3.4.999.1', '1.2.3.4r1'],
|
|
['v1.2.3.999.999', '1.2.3r999'],
|
|
[$ddclient::VERSION, $ddclient::version],
|
|
);
|
|
|
|
subtest 'humanize_version' => sub {
|
|
for my $tc (@tcs) {
|
|
my ($pv, $want) = @$tc;
|
|
is(ddclient::humanize_version($pv), $want, "$pv -> $want");
|
|
}
|
|
};
|
|
|
|
subtest 'human-readable version can be translated back to Perl version' => sub {
|
|
for my $tc (@tcs) {
|
|
my ($want, $hv) = @$tc;
|
|
my $pv = "v$hv";
|
|
$pv =~ s/^(?!.*~)(.*?)(?:r(\d+))?$/"$1.999" . (defined($2) ? ".$2" : "")/e;
|
|
$pv =~ s/~alpha$/.0_0/;
|
|
$pv =~ s/~beta(\d+)$/.0_$1/;
|
|
$pv =~ s/~rc(\d+)$/'.0_' . (900 + $1)/e;
|
|
is($pv, $want, "$hv -> $want");
|
|
}
|
|
};
|
|
|
|
is($ddclient::version, '@PACKAGE_VERSION@', "version matches version in Autoconf");
|
|
|
|
done_testing();
|