r11683@rob-kinyons-powerbook58: rob | 2006-04-28 20:54:09 -0400
[dbsrgits/DBM-Deep.git] / t / 14_filter.t
CommitLineData
ffed8b01 1##
2# DBM::Deep Test
3##
4use strict;
5use Test::More tests => 17;
fde3db1a 6use t::common qw( new_fh );
ffed8b01 7
8use_ok( 'DBM::Deep' );
9
fde3db1a 10my ($fh, $filename) = new_fh();
ffed8b01 11my $db = DBM::Deep->new(
2a81bf9e 12 file => $filename,
ffed8b01 13);
ffed8b01 14
15ok( !$db->set_filter( 'floober', sub {} ), "floober isn't a value filter key" );
16
17##
18# First try store filters only (values will be unfiltered)
19##
20ok( $db->set_filter( 'store_key', \&my_filter_store_key ), "set the store_key filter" );
21ok( $db->set_filter( 'store_value', \&my_filter_store_value ), "set the store_value filter" );
22
23$db->{key1} = "value1";
24$db->{key2} = "value2";
25
26is($db->{key1}, "MYFILTERvalue1", "The value for key1 was filtered correctly" );
27is($db->{key2}, "MYFILTERvalue2", "The value for key2 was filtered correctly" );
28
29##
30# Now try fetch filters as well
31##
32ok( $db->set_filter( 'fetch_key', \&my_filter_fetch_key ), "Set the fetch_key filter" );
33ok( $db->set_filter( 'fetch_value', \&my_filter_fetch_value), "Set the fetch_value filter" );
34
35is($db->{key1}, "value1", "Fetchfilters worked right");
36is($db->{key2}, "value2", "Fetchfilters worked right");
37
38##
39# Try fetching keys as well as values
40##
41my $first_key = $db->first_key();
42my $next_key = $db->next_key($first_key);
43
44ok(
45 (($first_key eq "key1") || ($first_key eq "key2")) &&
46 (($next_key eq "key1") || ($next_key eq "key2"))
47);
48
49##
50# Now clear all filters, and make sure all is unfiltered
51##
52ok( $db->set_filter( 'store_key', undef ), "Unset store_key filter" );
53ok( $db->set_filter( 'store_value', undef ), "Unset store_value filter" );
54ok( $db->set_filter( 'fetch_key', undef ), "Unset fetch_key filter" );
55ok( $db->set_filter( 'fetch_value', undef ), "Unset fetch_value filter" );
56
57is($db->{MYFILTERkey1}, "MYFILTERvalue1");
58is($db->{MYFILTERkey2}, "MYFILTERvalue2");
59
60sub my_filter_store_key { return 'MYFILTER' . $_[0]; }
61sub my_filter_store_value { return 'MYFILTER' . $_[0]; }
62
63sub my_filter_fetch_key { $_[0] =~ s/^MYFILTER//; return $_[0]; }
64sub my_filter_fetch_value { $_[0] =~ s/^MYFILTER//; return $_[0]; }