1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
use strict;
use warnings;
use Test::More;
use Test::Requires::Git;
use Test::Git;
use Git::Repository;
# get the git version
my ($version) = Git::Repository->run('--version') =~ /git version (.*)/g;
diag "git version $version";
# other versions based on the current one
my ( @lesser, @greater );
if ( $version =~ /^([1-9]+(?:\.[0-9]+)*)/ ) { # pick meaningful bits
my @version = split /\./, $1;
for ( 0 .. $#version ) {
local $" = '.';
my @v = @version;
$v[$_]++;
push @greater, "@v";
next if 0 > ( $v[$_] -= 2 );
push @lesser, "@v";
}
}
# more complex comparisons
my @true = (
[ '1.7.2.rc0.13.gc9eaaa', 'version_eq', '1.7.2.rc0.13.gc9eaaa' ],
[ '1.7.2.rc0.13.gc9eaaa', 'version_ge', '1.7.2.rc0.13.gc9eaaa' ],
[ '1.7.2.rc0.13.gc9eaaa', 'version_le', '1.7.2.rc0.13.gc9eaaa' ],
[ '1.7.1', 'version_gt', '1.7.1.rc0' ],
[ '1.7.1.rc1', 'version_gt', '1.7.1.rc0' ],
[ '1.3.2', 'version_gt', '0.99' ],
[ '1.7.2.rc0.13.gc9eaaa', 'version_gt', '1.7.0.4' ],
[ '1.7.1.rc2', 'version_gt', '1.7.1.rc1' ],
[ '1.7.2.rc0.1.g078e', 'version_gt', '1.7.2.rc0' ],
[ '1.7.2.rc0.10.g1ba5c', 'version_gt', '1.7.2.rc0.1.g078e' ],
[ '1.7.1.1', 'version_gt', '1.7.1.1.gc8c07' ],
[ '1.7.1.1', 'version_gt', '1.7.1.1.g5f35a' ],
[ '1.0.0b', 'version_gt', '1.0.0a' ],
[ '1.0.3', 'version_gt', '1.0.0a' ],
[ '1.7.0.4', 'version_ne', '1.7.2.rc0.13.gc9eaaa' ],
[ '1.7.1.rc1', 'version_ne', '1.7.1.rc2' ],
[ '1.0.0a', 'version_ne', '1.0.0' ],
[ '1.4.0.rc1', 'version_le', '1.4.1' ],
[ '1.0.0a', 'version_gt', '1.0.0' ],
[ '1.0.0a', 'version_lt', '1.0.3' ],
[ '1.0.0a', 'version_eq', '1.0.1' ],
[ '1.0.0b', 'version_eq', '1.0.2' ],
# the 0.99 series
[ '0.99', 'version_lt', '1.0.2' ],
[ '0.99', 'version_lt', '0.99.7a' ],
[ '0.99.9c', 'version_lt', '0.99.9g' ],
[ '0.99.7c', 'version_lt', '0.99.7d' ],
[ '0.99.7c', 'version_lt', '0.99.8' ],
[ '1.0.rc2', 'version_eq', '0.99.9i' ],
# non-standard versions
[ '1.7.1.236.g81fa0', 'version_gt', '1.7.1' ],
[ '1.7.1.236.g81fa0', 'version_lt', '1.7.1.1' ],
[ '1.7.1.211.g54fcb21', 'version_gt', '1.7.1.209.gd60ad81' ],
[ '1.7.1.211.g54fcb21', 'version_ge', '1.7.1.209.gd60ad81' ],
[ '1.7.1.209.gd60ad81', 'version_lt', '1.7.1.1.1.g66bd8ab' ],
[ '1.7.0.2.msysgit.0', 'version_gt', '1.6.6' ],
[ '1.7.1', 'version_lt', '1.7.1.1.gc8c07' ],
[ '1.7.1', 'version_lt', '1.7.1.1.g5f35a' ],
[ '1.7.1.1', 'version_gt', '1.7.1.1.gc8c07' ],
[ '1.7.1.1', 'version_gt', '1.7.1.1.g5f35a' ],
[ '1.7.1.1.gc8c07', 'version_eq', '1.7.1.1.g5f35a' ],
[ '1.3.GIT', 'version_gt', '1.3.0' ],
[ '1.3.GIT', 'version_lt', '1.3.1' ],
);
# operator reversal: $a op $b <=> $b rop $a
my %reverse = (
version_eq => 'version_eq',
version_ne => 'version_ne',
version_ge => 'version_le',
version_gt => 'version_lt',
version_le => 'version_ge',
version_lt => 'version_gt',
);
my %negate = (
version_ne => 'version_eq',
version_eq => 'version_ne',
version_ge => 'version_lt',
version_gt => 'version_le',
version_le => 'version_gt',
version_lt => 'version_ge',
);
@true = (
@true,
map { [ $_->[2], $reverse{ $_->[1] }, $_->[0], $_->[3] || () ] } @true
);
plan tests => 5 + 6 * @lesser + 6 * @greater + 2 * @true;
my $r = 'Git::Repository';
# version
is( Git::Repository->version(), $version, "git version $version" );
# version_eq
ok( $r->version_eq($version), "$version version_eq $version" );
ok( !$r->version_eq($_), "$version not version_eq $_" ) for @greater, @lesser;
# version_ne
ok( $r->version_ne($_), "$version version_ne $_" ) for @greater, @lesser;
ok( !$r->version_ne($version), "$version not version_ne $version" );
# version_gt
ok( $r->version_gt($_), "$version version_gt $_" ) for @lesser;
ok( !$r->version_gt($_), "$version not version_gt $_" ) for @greater;
# version_le
ok( $r->version_lt($_), "$version version_lt $_" ) for @greater;
ok( !$r->version_lt($_), "$version not version_lt $_" ) for @lesser;
# version_le
ok( $r->version_le($_), "$version version_le $_" ) for $version, @greater;
ok( !$r->version_le($_), "$version not version_le $_" ) for @lesser;
# version_ge
ok( $r->version_ge($_), "$version version_ge $_" ) for $version, @lesser;
ok( !$r->version_ge($_), "$version not version_ge $_" ) for @greater;
# test a number of special cases
my $dev;
{
package Git::Repository::VersionFaker;
our @ISA = qw( Git::Repository );
sub version { return $dev }
}
$r = 'Git::Repository::VersionFaker';
for (@true) {
( $dev, my $meth, my $v ) = @$_;
ok( $r->$meth($v), "$dev $meth $v" );
$meth = $negate{$meth};
ok( !$r->$meth($v), "$dev not $meth $v" );
}
|