The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# vim: set ft=perl :

use strict;

use Test::More tests => 16;
BEGIN { use_ok("Tie::Filter") };

my %hash;

tie my %wrap, 'Tie::Filter', \%hash,
	FETCHKEY   => sub { $_ = lc },
	STOREKEY   => sub { $_ = uc },
	FETCHVALUE => sub { $_ = uc },
	STOREVALUE => sub { $_ = lc };

isa_ok(tied(%wrap), 'Tie::Filter::Hash');

$wrap{aBc} = 'zyX';
$wrap{def} = 'WVu';
$wrap{GHi} = 'TSR';

is($wrap{abc}, 'ZYX');
is($wrap{dEF}, 'WVU');
is($wrap{gHI}, 'TSR');

is($hash{ABC}, 'zyx');
is($hash{DEF}, 'wvu');
is($hash{GHI}, 'tsr');

ok(exists $wrap{DeF});

ok(defined delete $wrap{gHi});
ok(!exists $hash{GHI});

my @keys   = sort keys %wrap;
my @values = sort values %wrap;
is_deeply(\@keys, [ qw(abc def) ]);
is_deeply(\@values, [ qw(WVU ZYX) ]);

@keys   = sort keys %hash;
@values = sort values %hash;
is_deeply(\@keys, [ qw(ABC DEF) ]);
is_deeply(\@values, [ qw(wvu zyx) ]);

%wrap = ();
is_deeply(\%hash, {});