The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

use strict;

use Test::More tests => 10;
use Test::Warn;

use macro::filter foo => sub{ 'foo' . $_[0] };

warning_like{
	eval q{ use macro foo => undef };
} qr/Illigal declaration/, 'Illigal declaration';

warning_like{
	eval q{ use macro undef() => sub{ 'foo' } };
} qr/Illigal declaration/, 'Illigal declaration';

warning_like{
	eval q{ use macro foo => sub{ 'FOO' }, foo => sub{ 'BAR' }; };
} qr/redefined/, 'Macro redefined';

warning_like{
	eval q{ use macro bar => sub($){ 'bar' } };
} qr/Subroutine prototype .+ ignored/, 'No prototypes';

warning_like{
	eval q{ use macro bar => sub :lvalue{ my $foo } };
} qr/Subroutine attribute .+ ignored/, 'No attributes';

my $result;
warnings_like{
	$result = foo();
} qr/Use of uninitialized value/, 'Not enough arguments';
is $result, 'foo', 'undef used';


ok !eval q{ use macro foo => \&no_such_subroutine; 1 }, 'undefined subroutine';
ok !eval q{ use macro foo => \&UNIVERSAL::isa; 1 },     'XSUB';

is foo('bar'), 'foobar', 'finished';