use strict;
local $^W = 1;
use Test::More;

# keep stdout and stderr in order on Win32

BEGIN {
    $|=1; 
    my $oldfh = select(STDERR); $| = 1; select($oldfh);
}

#--------------------------------------------------------------------------#
# option() argument cases
#--------------------------------------------------------------------------#

my @cases = (
    {
        label   => q{invalid options argument: array is not a hash},
        args    => q{ [ qw( foo bar ) ] },
        error   => q{invalid options argument},
    },
    {
        label   => q{invalid options argument: scalar is not a hash},
        args    => q{ 'foo' => 'bar' },
        error   => q{invalid options argument},
    },
    {
        label   => q{invalid options argument: unknown option},
        args    => q{ { privacy => 'public', not_an_option => 1} },
        error   => q{invalid option 'not_an_option'},
    },
    {
        label   => q{invalid options argument: bad 'privacy' option},
        args    => q{ { privacy => 'yes'} },
        error   => q{invalid option 'privacy'.+?yes},
    },
    {
        label   => q{invalid options argument: bad 'set_hook' option},
        args    => q{ { set_hook => 'foo' } },
        error   => q{invalid option 'set_hook'.+code},
    },
    {
        label   => q{invalid options argument: bad 'get_hook' option},
        args    => q{ { get_hook => 'foo' } },
        error   => q{invalid option 'get_hook'.+code},
    },
);

#--------------------------------------------------------------------------#
# Begin tests
#--------------------------------------------------------------------------#

plan tests => 1 + @cases;

require_ok( "Class::InsideOut" );

for my $case ( @cases ) {
    eval( "Class::InsideOut::options( " . $case->{args} . ")" );
    like( $@, "/$case->{error}/i", "$case->{label}");
}

