Converted all relevant tests to use new_dbm instead of new_fh and all tests (except...
[dbsrgits/DBM-Deep.git] / t / 14_filter.t
CommitLineData
ffed8b01 1use strict;
0e3e3555 2use warnings FATAL => 'all';
3
4use Test::More;
2120a181 5use Test::Deep;
0e3e3555 6
7use t::common qw( new_dbm );
ffed8b01 8
9use_ok( 'DBM::Deep' );
10
0e3e3555 11sub my_filter_store_key { return 'MYFILTER' . $_[0]; }
12sub my_filter_store_value { return 'MYFILTER' . $_[0]; }
ffed8b01 13
0e3e3555 14sub my_filter_fetch_key { $_[0] =~ s/^MYFILTER//; return $_[0]; }
15sub my_filter_fetch_value { $_[0] =~ s/^MYFILTER//; return $_[0]; }
ffed8b01 16
0e3e3555 17my $dbm_factory = new_dbm();
18while ( my $dbm_maker = $dbm_factory->() ) {
19 my $db = $dbm_maker->();
ffed8b01 20
0e3e3555 21 ok( !$db->set_filter( 'floober', sub {} ), "floober isn't a value filter key" );
ffed8b01 22
0e3e3555 23 ##
24 # First try store filters only (values will be unfiltered)
25 ##
26 ok( $db->set_filter( 'store_key', \&my_filter_store_key ), "set the store_key filter" );
27 ok( $db->set_filter( 'store_value', \&my_filter_store_value ), "set the store_value filter" );
ffed8b01 28
0e3e3555 29 $db->{key1} = "value1";
30 $db->{key2} = "value2";
ffed8b01 31
0e3e3555 32 is($db->{key1}, "MYFILTERvalue1", "The value for key1 was filtered correctly" );
33 is($db->{key2}, "MYFILTERvalue2", "The value for key2 was filtered correctly" );
ffed8b01 34
0e3e3555 35 ##
36 # Now try fetch filters as well
37 ##
38 ok( $db->set_filter( 'fetch_key', \&my_filter_fetch_key ), "Set the fetch_key filter" );
39 ok( $db->set_filter( 'fetch_value', \&my_filter_fetch_value), "Set the fetch_value filter" );
ffed8b01 40
0e3e3555 41 is($db->{key1}, "value1", "Fetchfilters worked right");
42 is($db->{key2}, "value2", "Fetchfilters worked right");
2120a181 43
0e3e3555 44 ##
45 # Try fetching keys as well as values
46 ##
47 cmp_bag( [ keys %$db ], [qw( key1 key2 )], "DB keys correct" );
2120a181 48
0e3e3555 49 # Exists and delete tests
50 ok( exists $db->{key1}, "Key1 exists" );
51 ok( exists $db->{key2}, "Key2 exists" );
ffed8b01 52
0e3e3555 53 is( delete $db->{key1}, 'value1', "Delete returns the right value" );
ffed8b01 54
0e3e3555 55 ok( !exists $db->{key1}, "Key1 no longer exists" );
56 ok( exists $db->{key2}, "Key2 exists" );
ffed8b01 57
0e3e3555 58 ##
59 # Now clear all filters, and make sure all is unfiltered
60 ##
61 ok( $db->filter_store_key( undef ), "Unset store_key filter" );
62 ok( $db->filter_store_value( undef ), "Unset store_value filter" );
63 ok( $db->filter_fetch_key( undef ), "Unset fetch_key filter" );
64 ok( $db->filter_fetch_value( undef ), "Unset fetch_value filter" );
ffed8b01 65
0e3e3555 66 is( $db->{MYFILTERkey2}, "MYFILTERvalue2", "We get the right unfiltered value" );
67}
68
69done_testing;