package Git::Class::Test::Role::Execute::GetOptions; use strict; use warnings; use Test::Classy::Base; use Git::Class::Test::Role::Execute; my $obj; sub initialize { my $class = shift; $obj = eval { Git::Class::Test::Role::Execute->new }; $class->skip_this_class($@) if $@; } sub basic : Tests(4) { my $class = shift; my ($opts, @args) = $obj->_get_options( 'arg1', { first => 'value1' }, 'arg2', { second => 'value2' }, ); ok $opts->{first} eq 'value1', $class->message('got first option'); ok $opts->{second} eq 'value2', $class->message('got second option'); ok $args[0] eq 'arg1', $class->message('got first arg'); ok $args[1] eq 'arg2', $class->message('got second arg'); } sub options_with_same_key : Test { my $class = shift; my ($opts, @args) = $obj->_get_options( { key => 'value1' }, { key => 'value2' }, ); ok $opts->{key} eq 'value2', $class->message('first option is overwritten'); } sub no_options : Tests(2) { my $class = shift; my ($opts, @args) = $obj->_get_options('foo'); ok ref $opts eq 'HASH' && !%{ $opts }, $class->message('got a blank hash reference'); ok $args[0] eq 'foo', $class->message('args are not affected'); } 1;