The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
#
# This file is part of MooseX-Types-Tied
#
# This software is Copyright (c) 2011 by Chris Weyl.
#
# This is free software, licensed under:
#
#   The GNU Lesser General Public License, Version 2.1, February 1999
#

use strict;
use warnings;

use Test::More;
use Test::Exception;

{
    package TestClass;

    use Moose;
    use MooseX::Types::Tied::Hash::IxHash ':all';

    has ixhash => (
        traits => ['Hash'],
        is => 'rw', isa => IxHash, coerce => 1,
        handles => {
            h_keys   => 'keys',
            h_values => 'values',
            h_del    => 'delete',
            h_set    => 'set',
        },
    );
}

my $foo = TestClass->new();

# note arrayref
$foo->ixhash( [ one => 'first', two => 'second', three => 'third' ] );

is_deeply(
    [ $foo->h_keys        ],
    [ qw{ one two three } ],
    'keys are sorted correctly',
);

is_deeply(
    [ $foo->h_values           ],
    [ qw{ first second third } ],
    'values returned as expected',
);

TODO: {
    local $TODO = 'Moose Hash native trait known to harmful to tied structs';

    lives_ok { $foo->h_del('two')            } 'h_del(2) lives';
    lives_ok { $foo->h_set(four => 'fourth') } 'h_set(...) lives';

    is_deeply(
        [ $foo->h_keys         ],
        [ qw{ one three four } ],
        'keys are sorted correctly',
    );

    is_deeply(
        [ $foo->h_values           ],
        [ qw{ first third fourth } ],
        'values returned as expected',
    );
}

done_testing;