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