5 use Test::More tests => 17;
6 use File::Temp qw( tempfile tempdir );
7 use Fcntl qw( :flock );
11 my $dir = tempdir( CLEANUP => 1 );
12 my ($fh, $filename) = tempfile( 'tmpXXXX', UNLINK => 1, DIR => $dir );
14 my $db = DBM::Deep->new(
18 ok( !$db->set_filter( 'floober', sub {} ), "floober isn't a value filter key" );
21 # First try store filters only (values will be unfiltered)
23 ok( $db->set_filter( 'store_key', \&my_filter_store_key ), "set the store_key filter" );
24 ok( $db->set_filter( 'store_value', \&my_filter_store_value ), "set the store_value filter" );
26 $db->{key1} = "value1";
27 $db->{key2} = "value2";
29 is($db->{key1}, "MYFILTERvalue1", "The value for key1 was filtered correctly" );
30 is($db->{key2}, "MYFILTERvalue2", "The value for key2 was filtered correctly" );
33 # Now try fetch filters as well
35 ok( $db->set_filter( 'fetch_key', \&my_filter_fetch_key ), "Set the fetch_key filter" );
36 ok( $db->set_filter( 'fetch_value', \&my_filter_fetch_value), "Set the fetch_value filter" );
38 is($db->{key1}, "value1", "Fetchfilters worked right");
39 is($db->{key2}, "value2", "Fetchfilters worked right");
42 # Try fetching keys as well as values
44 my $first_key = $db->first_key();
45 my $next_key = $db->next_key($first_key);
48 (($first_key eq "key1") || ($first_key eq "key2")) &&
49 (($next_key eq "key1") || ($next_key eq "key2"))
53 # Now clear all filters, and make sure all is unfiltered
55 ok( $db->set_filter( 'store_key', undef ), "Unset store_key filter" );
56 ok( $db->set_filter( 'store_value', undef ), "Unset store_value filter" );
57 ok( $db->set_filter( 'fetch_key', undef ), "Unset fetch_key filter" );
58 ok( $db->set_filter( 'fetch_value', undef ), "Unset fetch_value filter" );
60 is($db->{MYFILTERkey1}, "MYFILTERvalue1");
61 is($db->{MYFILTERkey2}, "MYFILTERvalue2");
63 sub my_filter_store_key { return 'MYFILTER' . $_[0]; }
64 sub my_filter_store_value { return 'MYFILTER' . $_[0]; }
66 sub my_filter_fetch_key { $_[0] =~ s/^MYFILTER//; return $_[0]; }
67 sub my_filter_fetch_value { $_[0] =~ s/^MYFILTER//; return $_[0]; }