# 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, {});