#!/usr/local/bin/perl
use strict;
use Test::Assertions qw(test);
use Log::Trace;
use Getopt::Std;
use File::Path;
use vars qw($opt_t $opt_T);
getopts('tT');
plan tests;
#Move into the t directory
chdir($1) if ($0 =~ /(.*)(\/|\\)(.*)/);
use lib qw(.);
#Load the library of tests
use constant SLEEP_INT => 2;
use vars qw($callcount $callback);
require "CacheAgainstFile.lib";
#Compile
unshift @INC, "../lib";
require Cache::AgainstFile;
ASSERT($INC{"Cache/AgainstFile.pm"}, "compiled version $Cache::AgainstFile::VERSION");
#Log::Trace
import Log::Trace qw(print) if($opt_t);
deep_import Log::Trace qw(print) if($opt_T);
#Test directories
my $dir = "data";
my $filename = "$dir/foo.dat";
#Set up test env
mkpath($dir);
touch($filename);
############################################################################
# Error checks
############################################################################
#Invalid coderef
ASSERT(DIED(sub {
new Cache::AgainstFile({}, {Method => 'Null'})
}) && $@ =~ /not a code reference/, "Check for coderef");
#Invalid hashref
ASSERT(DIED(sub {
new Cache::AgainstFile($callback, [])
}) && $@ =~ /not a hash reference/, "Check for hashref");
#No backend
ASSERT(DIED(sub {
new Cache::AgainstFile($callback, {})
}) && $@ =~ /No cache 'Method' option/, "Check for backend");
#Invalid backend
ASSERT(DIED(sub {
new Cache::AgainstFile($callback, {Method => ';'})
}) && $@ =~ /Package name 'Cache::AgainstFile::;' doesn't look valid/, "Check for valid backend");
#Non-existant backend
ASSERT(DIED(sub {
new Cache::AgainstFile($callback, {Method => 'DoesNotExist'})
}) && $@ =~ /Unable to load Cache::AgainstFile::DoesNotExist/, "non-existant backend");
############################################################################
# Null cache
############################################################################
my $null_cache = new Cache::AgainstFile($callback, {Method => 'Cache::AgainstFile::Null'});
ASSERT(ref $null_cache eq 'Cache::AgainstFile', 'Object is of correct class');
ASSERT($null_cache->get($filename) eq "filename:$filename", "Null cache");
ASSERT($null_cache->size() == 0, "Null cache - size");
ASSERT($null_cache->count() == 0, "Null cache - count");
$null_cache->purge();
ASSERT(1, "Null cache - purge");
$null_cache->clear();
ASSERT(1, "Null cache - clear");
############################################################################
# Clean up
############################################################################
END {
TRACE("Cleaning up $dir");
rmtree($dir);
}