## name basic passes
## failures 0
## cut

sub forward;

sub foo {
   my ($self, $bar) = @_;
}

sub fu {
   my $self = shift;
   my $bar = shift;
}

sub foo($$) {
   print $_[0];
   return;
}

#-----------------------------------------------------------------------------

## name simple failures
## failures 3
## cut

sub foo {
   my ($self, $bar1, $bar2, $bar3, $bar4, $bar5) = @_;
}

sub fu {
   my $self = shift;
   my $bar1 = shift;
   my $bar2 = shift;
   my $bar3 = shift;
   my $bar4 = shift;
   my $bar5 = shift;
}

sub foo($$$$$$) {
   print $_[0];
   return;
}

#-----------------------------------------------------------------------------

## name configured failures
## failures 3
## parms {max_arguments => 3}
## cut

sub foo {
   my ($self, $bar1, $bar2, $bar3) = @_;
}

sub fu {
   my $self = shift;
   my $bar1 = shift;
   my $bar2 = shift;
   my $bar3 = shift;
}

sub foo($$$$) {
   print $_[0];
   return;
}

#-----------------------------------------------------------------------------

## name configured successes
## failures 0
## parms {max_arguments => 3}
## cut

sub foo_ok {
   my ($self, $bar1, $bar2) = @_;
}

sub fu_ok {
   my $self = shift;
   my $bar1 = shift;
   my $bar2 = shift;
}

sub foo_ok($$$) {
   print $_[0];
   return;
}

#-----------------------------------------------------------------------------

## name RT56627: prototype interpretation
## failures 0
## parms {max_arguments => 3}
## cut

sub foo ($;$) { return 1 }
sub bar ( $ ; $ ) { return 1 }

#-----------------------------------------------------------------------------

## name prototype grouping
## failures 0
## parms {max_arguments => 3}
## cut

sub foo (\[$@%]@) { return 1 }
sub bar ( \[$@%] $ \[$@%] ) { return 1 }

#-----------------------------------------------------------------------------

## name single term prototype (Perl 5.14)
## failures 0
## parms {max_arguments => 2}
## cut

sub foo ($+) { return 1 }

#-----------------------------------------------------------------------------

## name single term prototype (Perl 5.14)
## failures 1
## parms {max_arguments => 2}
## cut

sub foo ($$+) { return 1 }

#-----------------------------------------------------------------------------

## name ignore $self and $class
## failures 0
## parms {skip_object => 1}
## cut

sub self_foo {
   my ($self, $bar1, $bar2, $bar3, $bar4, $bar5) = @_;
}

sub self_fu {
   my $self = shift;
   my $bar1 = shift;
   my $bar2 = shift;
   my $bar3 = shift;
   my $bar4 = shift;
   my $bar5 = shift;
}

sub self_bar {
    my $self = shift;
    my ($bar1, $bar2, $bar3, $bar4, $bar5) = @_;
}

sub class_foo {
   my ($class, $bar1, $bar2, $bar3, $bar4, $bar5) = @_;
}

sub class_fu {
   my $class = shift;
   my $bar1 = shift;
   my $bar2 = shift;
   my $bar3 = shift;
   my $bar4 = shift;
   my $bar5 = shift;
}

sub class_bar {
    my $class = shift;
    my ($bar1, $bar2, $bar3, $bar4, $bar5) = @_;
}

#-----------------------------------------------------------------------------

## name ignore $self and $class with configured max_arguments
## failures 0
## parms {skip_object => 1, max_arguments => 2}
## cut

sub self_foo {
   my ($self, $bar1, $bar2) = @_;
}

sub class_foo {
   my ($class, $bar1, $bar2) = @_;
}

#-----------------------------------------------------------------------------

## name too many arguments despite ignoring $self and $class
## failures 5
## parms {skip_object => 1, max_arguments => 2}
## cut

sub self_foo {
   my ($self, $bar1, $bar2, $bar3) = @_;
}

sub self_fu {
   my $self = shift;
   my ($bar1, $bar2, $bar3) = @_;
}

sub class_foo {
   my ($class, $bar1, $bar2, $bar3) = @_;
}

sub class_fu {
   my $class = shift;
   my ($bar1, $bar2, $bar3) = @_;
}

sub classy_self {
    my ($self, $class, $class, $self) = @_;
}

#-----------------------------------------------------------------------------

# Ideally these signature tests would be protected by a test for whether the
# perl being used supports signatures, and would ensure signatures is turned
# on.

## name signature without $self or $class - success
## failures 0
## parms {max_arguments => 2}
## cut

sub foo {
}

sub bar ($bar1) {
}

sub baz ($baz1, $baz2) {
}

sub qux ($qux_1, $qux_2) {
}

#-----------------------------------------------------------------------------

## name signature without $self or $class -- failure
## failures 1
## parms {max_arguments => 2}
## cut

sub foo ($foo1, $foo2, $foo3) {
}

#-----------------------------------------------------------------------------

## name signature with $self or $class -- success
## failures 0
## parms {skip_object => 1, max_arguments => 2}
## cut

sub foo ($class) {
}

sub bar ($self, $bar1) {
}

sub baz ($class, $baz1, $baz2) {
}

sub qux ($self, $qux_1, $qux_2) {
}

sub quux (   $self , $quux_1, $quux_2) {
}

#-----------------------------------------------------------------------------

## name signature with $self or $class -- failure
## failures 2
## parms {skip_object => 1, max_arguments => 2}
## cut

sub foo ($self, $foo1, $foo3, $foo3) {
}

sub bar ($class, $bar_1, $bar_2, $bar_3) {
}

#-----------------------------------------------------------------------------
# Local Variables:
#   mode: cperl
#   cperl-indent-level: 4
#   fill-column: 78
#   indent-tabs-mode: nil
#   c-indentation-style: bsd
# End:
# ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :