ddclient/t/version.pl.in
Richard Hansen 54b6d0cb0d Use semver 2.0.0 as the human-readable version string format
This avoids the need to escape tilde in tag names.
2024-12-23 21:40:07 -05:00

62 lines
1.9 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-beta.1'],
['v1.0.0_1', '1.0-beta.1'],
['v1.2.3.0_1', '1.2.3-beta.1'],
['v1.2.3.4.0_1', '1.2.3.4-beta.1'],
['v1.2.3.0_899', '1.2.3-beta.899'],
['v1.0_901', '1-rc.1'],
['v1.0.0_901', '1.0-rc.1'],
['v1.2.3.0_901', '1.2.3-rc.1'],
['v1.2.3.4.0_901', '1.2.3.4-rc.1'],
['v1.2.3.0_998', '1.2.3-rc.98'],
['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', '1+r.1'],
['v1.0.999.1', '1.0+r.1'],
['v1.2.3.999.1', '1.2.3+r.1'],
['v1.2.3.4.999.1', '1.2.3.4+r.1'],
['v1.2.3.999.999', '1.2.3+r.999'],
[$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();