The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::Spec;
require Test::NoWarnings;
use Test::Warn;

use FindBin qw/ $Bin /;
use lib "$Bin/lib";
use test_tools qw/ compile_ok /;

describe "catch block" => sub {
    it "warns if class-name looks-like perl keyword" => sub {
        warning_like {
            compile_ok q[
                use syntax 'try';
                try {  }
                catch (my $e)
                    { }
            ];
        } qr/^catch: lower case class-name 'my' may lead to confusion with perl keywords at \(eval \d+\) line 4./;

        warning_like {
            compile_ok q[
                use syntax 'try';
                try {  }
                catch (return $e)
                    { }
            ];
        } qr/^catch: lower case class-name 'return' may lead to confusion with perl keywords at \(eval \d+\) line 4./;
    };

    it "does not warn on lower-case class name with own namespace" => sub {
        warning_is {
            compile_ok q[
                use syntax 'try';

                try { }
                catch (my::test $e) { }
            ];
        } "";
    };

    it "does not warn on class-name contains at least one upper character" => sub {
        warning_is {
            compile_ok q[
                use syntax 'try';

                try { }
                catch (Mytest $e) { }
                catch (My $e) { }
                catch (testA $e) { }
            ];
        } "";
    };
};

it "has no warnings" => sub {
    Test::NoWarnings::had_no_warnings();
};

runtests;