avoid temp file littering in tests
[p5sagit/p5-mst-13.2.git] / lib / Memoize / t / expire_file.t
CommitLineData
a0cb3900 1#!/usr/bin/perl
2
3use lib '..';
4use Memoize;
5
6my $n = 0;
7
8
9if (-e '.fast') {
10 print "1..0\n";
11 exit 0;
12}
13
899dc88a 14print "1..12\n";
a0cb3900 15
16++$n; print "ok $n\n";
17
18my $READFILE_CALLS = 0;
19my $FILE = './TESTFILE';
20
21sub writefile {
22 my $FILE = shift;
23 open F, "> $FILE" or die "Couldn't write temporary file $FILE: $!";
24 print F scalar(localtime), "\n";
25 close F;
26}
27
28sub readfile {
29 $READFILE_CALLS++;
30 my $FILE = shift;
31 open F, "< $FILE" or die "Couldn't write temporary file $FILE: $!";
32 my $data = <F>;
33 close F;
34 $data;
35}
36
899dc88a 37require Memoize::ExpireFile;
38++$n; print "ok $n\n";
39
40tie my %cache => 'Memoize::ExpireFile';
a0cb3900 41memoize 'readfile',
899dc88a 42 SCALAR_CACHE => [HASH => \%cache],
a0cb3900 43 LIST_CACHE => 'FAULT'
44 ;
45
46++$n; print "ok $n\n";
47
48writefile($FILE);
49++$n; print "ok $n\n";
50sleep 1;
51
52my $t1 = readfile($FILE);
53++$n; print "ok $n\n";
54++$n; print ((($READFILE_CALLS == 1) ? '' : 'not '), "ok $n\n");
55
56my $t2 = readfile($FILE);
57++$n; print "ok $n\n";
58++$n; print ((($READFILE_CALLS == 1) ? '' : 'not '), "ok $n\n");
59++$n; print ((($t1 eq $t2) ? '' : 'not '), "ok $n\n");
60
61sleep 2;
62writefile($FILE);
63my $t3 = readfile($FILE);
64++$n; print "ok $n\n";
65++$n; print ((($READFILE_CALLS == 2) ? '' : 'not '), "ok $n\n");
66++$n; print ((($t1 ne $t3) ? '' : 'not '), "ok $n\n");
67
899dc88a 68END { 1 while unlink $FILE }