The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/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   => (is =>'rw', isa => IxHash);
    has coercing => (is =>'rw', isa => IxHash, coerce => 1);

}

{
    package Test::Tie::Hash;
    use base 'Tie::Hash';

    sub TIEHASH { bless \(my $x), $_[0] }
}

my $foo = TestClass->new();

tie my %hash,   'Test::Tie::Hash';
tie my %ixhash, 'Tie::IxHash';

dies_ok  { $foo->ixhash(\%hash)   } 'IxHash NOK';
dies_ok  { $foo->ixhash({})       } 'IxHash NOK';
lives_ok { $foo->ixhash(\%ixhash) } 'IxHash OK';

# coercions
dies_ok  { $foo->coercing( { one => 1 } ) } 'Does NOT coerce from hashref';
lives_ok { $foo->coercing( [ one => 1 ] ) } 'Coerces from arrayref';

ok(defined tied %{ $foo->coercing }, 'coerced value is tied');

done_testing;