use strict; use warnings; use Test::More; use Test::Database::Driver; use version; # test version_matches() on a dummy driver my @requests; my @ok = ( {}, { version => '1.2.3' }, { min_version => '1.2.2' }, { min_version => '1.2.3' }, { max_version => '1.3.0' }, { version => '1.2.3', min_version => '1.2.0' }, { version => '1.2.3', max_version => '1.4.3' }, { min_version => '1.2.0', max_version => '2.0' }, { version => '1.2.3', min_version => '1.2.0', max_version => '2.0' }, { regex_version => qr/^1\.2/ }, ); my @ok_beta = map { my %r = %$_; $r{version} = '1.2.3-beta' if $r{version}; \%r } @ok; push @ok_beta, { regex_version => qr/beta/ }; my @not_ok = ( { min_version => '1.3.0' }, { max_version => '1.002' }, { max_version => '1.2.3' }, { version => '1.2.3-beta' }, { version => '1.3.4' }, { min_version => '1.3.0', max_version => '2.1' }, { min_version => '0.1.3', max_version => '1.002' }, { regex_version => qr/^1\.2\.[1245]$/ }, { regex_version => qr/^1\.2$/ }, ); my @not_ok_beta = map { my %r = %$_; $r{version} = '1.2.3' if $r{version} && $r{version} eq '1.2.3-beta'; \%r } @not_ok; # define our dummy class package Test::Database::Driver::Dummy; our @ISA = qw( Test::Database::Driver ); sub _version { $_[0]{xxx} || '1.2.3' } package main; my $driver = bless {}, 'Test::Database::Driver::Dummy'; my $driver_beta = bless { xxx => '1.2.3-beta' }, 'Test::Database::Driver::Dummy'; plan tests => @ok + @not_ok + @ok_beta + @not_ok_beta; for my $request (@ok) { ok( $driver->version_matches($request), to_string($request) . ' matches driver' ); } for my $request (@not_ok) { ok( !$driver->version_matches($request), to_string($request) . ' does not match driver' ); } for my $request (@ok_beta) { ok( $driver_beta->version_matches($request), to_string($request) . ' matches beta driver' ); } for my $request (@not_ok_beta) { ok( !$driver_beta->version_matches($request), to_string($request) . ' does not match beta driver' ); } sub to_string { my ($request) = @_; return '{ ' . join( ', ', map {"$_ => $request->{$_}"} sort keys %$request ) . ' }'; }