File: 14_filter.t

package info (click to toggle)
libdbm-deep-perl 2.0016-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 888 kB
  • sloc: perl: 7,402; sql: 36
file content (70 lines) | stat: -rw-r--r-- 2,320 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
use strict;
use warnings FATAL => 'all';

use Test::More;
use Test::Deep;

use lib 't';
use common qw( new_dbm );

use_ok( 'DBM::Deep' );

sub my_filter_store_key { return 'MYFILTER' . $_[0]; }
sub my_filter_store_value { return 'MYFILTER' . $_[0]; }

sub my_filter_fetch_key { $_[0] =~ s/^MYFILTER//; return $_[0]; }
sub my_filter_fetch_value { $_[0] =~ s/^MYFILTER//; return $_[0]; }

my $dbm_factory = new_dbm();
while ( my $dbm_maker = $dbm_factory->() ) {
    my $db = $dbm_maker->();

    ok( !$db->set_filter( 'floober', sub {} ), "floober isn't a value filter key" );

    ##
    # First try store filters only (values will be unfiltered)
    ##
    ok( $db->set_filter( 'store_key', \&my_filter_store_key ), "set the store_key filter" );
    ok( $db->set_filter( 'store_value', \&my_filter_store_value ), "set the store_value filter" );

    $db->{key1} = "value1";
    $db->{key2} = "value2";

    is($db->{key1}, "MYFILTERvalue1", "The value for key1 was filtered correctly" );
    is($db->{key2}, "MYFILTERvalue2", "The value for key2 was filtered correctly" );

    ##
    # Now try fetch filters as well
    ##
    ok( $db->set_filter( 'fetch_key', \&my_filter_fetch_key ), "Set the fetch_key filter" );
    ok( $db->set_filter( 'fetch_value', \&my_filter_fetch_value), "Set the fetch_value filter" );

    is($db->{key1}, "value1", "Fetchfilters worked right");
    is($db->{key2}, "value2", "Fetchfilters worked right");

    ##
    # Try fetching keys as well as values
    ##
    cmp_bag( [ keys %$db ], [qw( key1 key2 )], "DB keys correct" );

    # Exists and delete tests
    ok( exists $db->{key1}, "Key1 exists" );
    ok( exists $db->{key2}, "Key2 exists" );

    is( delete $db->{key1}, 'value1', "Delete returns the right value" );

    ok( !exists $db->{key1}, "Key1 no longer exists" );
    ok( exists $db->{key2}, "Key2 exists" );

    ##
    # Now clear all filters, and make sure all is unfiltered
    ##
    ok( $db->filter_store_key( undef ), "Unset store_key filter" );
    ok( $db->filter_store_value( undef ), "Unset store_value filter" );
    ok( $db->filter_fetch_key( undef ), "Unset fetch_key filter" );
    ok( $db->filter_fetch_value( undef ), "Unset fetch_value filter" );

    is( $db->{MYFILTERkey2}, "MYFILTERvalue2", "We get the right unfiltered value" );
}

done_testing;