use strict; use warnings; use Smart::Options::Declare; use Test::More; use Test::Exception; { package Foo; use Smart::Options::Declare; sub new { my $class = shift; return bless {}, $class; } sub bar{ opts my $self, my $x, my $y => 'Int'; # omit to set the type of $x return($x, $y); } } my $foo = Foo->new; TODO: { todo_skip "type check not implement yet", 7; lives_and{ @ARGV = qw(--x --y=20); my($x, $y) = $foo->bar; is $x, 1; is $y, 20; @ARGV = qw(--y=20 --x); ($x, $y) = $foo->bar; is $x, 1; is $y, 20; @ARGV = qw(--y=10); ($x, $y) = $foo->bar; ok !$x; # x is undefined is $y, 10; }; throws_ok{ @ARGV = qw(--x --y=3.14); $foo->bar; } qr/Value "3.14" invalid for option y \(number expected\)/; } done_testing;