The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use warnings;
use strict;

use lib 'lib';
use Tie::Nested;
use Hash::Case::Lower;
use Hash::Case::Upper;

use Test::More tests => 13;
use Data::Dumper;

tie my(%a), 'Tie::Nested', nestings =>['Hash::Case::Lower','Hash::Case::Upper'];

like(tied %a, qr/^Tie::Nested\=HASH\(/);

# First level

$a{AaP} = 'b';
is_deeply(\%a, {aap => 'b'}, 'add');

is(delete $a{AAP}, 'b', 'delete');
is_deeply(\%a, {});

# Second level

$a{aap}{Noot} = 42;
is($a{aap}{noot}, 42, 'second level');
$a{GROOT} = 'c';

is_deeply(\%a, {groot => 'c', aap => {NOOT => 42}});

is(delete $a{aAp}{Noot}, 42, 'delete');
is_deeply(\%a, {groot => 'c', aap => {}});

# Third level
$a{AAP}{NOot}{MiEs} = 3;
is_deeply(\%a, {groot => 'c', aap => {NOOT => {MiEs => 3}}});

delete $a{AAP};
delete $a{GROOT};

# Wow

$a{NEW} = {some => {mOrE => 7}};
is($a{nEw}{SoME}{mOrE}, 7, 'multilevel assign');
ok(! exists $a{nEw}{SoME}{MORE}, 'last is case-sensitive');

is_deeply(\%a, {new => {SOME => {mOrE => 7}}});

# now in the tie

tie my(%b), 'Tie::Nested'
  , { NEW => {some => {mOrE => 8}}}
  , nestings =>['Hash::Case::Lower','Hash::Case::Upper'];

is_deeply(\%b, {new => {SOME => {mOrE => 8}}});