Commit | Line | Data |
ffed8b01 |
1 | use strict; |
0e3e3555 |
2 | use warnings FATAL => 'all'; |
3 | |
4 | use Test::More; |
2120a181 |
5 | use Test::Deep; |
0e3e3555 |
6 | |
7 | use t::common qw( new_dbm ); |
ffed8b01 |
8 | |
9 | use_ok( 'DBM::Deep' ); |
10 | |
0e3e3555 |
11 | sub my_filter_store_key { return 'MYFILTER' . $_[0]; } |
12 | sub my_filter_store_value { return 'MYFILTER' . $_[0]; } |
ffed8b01 |
13 | |
0e3e3555 |
14 | sub my_filter_fetch_key { $_[0] =~ s/^MYFILTER//; return $_[0]; } |
15 | sub my_filter_fetch_value { $_[0] =~ s/^MYFILTER//; return $_[0]; } |
ffed8b01 |
16 | |
0e3e3555 |
17 | my $dbm_factory = new_dbm(); |
18 | while ( 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 | |
69 | done_testing; |