File: toomany.t

package info (click to toggle)
libref-util-perl 0.204-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 252 kB
  • sloc: perl: 610; makefile: 2
file content (36 lines) | stat: -rw-r--r-- 1,213 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use strict;
use warnings;
use Test::More tests => 6;
use Ref::Util qw<is_arrayref is_hashref>;

my $array_func = \&is_arrayref;
my $hash_func = \&is_hashref;

is(prototype($array_func), '$', 'is_arrayref has "$" prototype');
is(prototype($hash_func), '$', 'is_hashref has "$" prototype');

# We have to use string eval for this, because when the custom op is being
# used, we expect the direct calls to fail at compile time
my @cases = (
    [is_arrayref => 'is_arrayref([], 17)',
     'direct array call with too many arguments'],
    [is_arrayref => '$array_func->([], 17)',
     'array call through coderef with too many arguments'],
    [is_hashref => 'is_hashref([], 17)',
     'direct hash call with too many arguments'],
    [is_hashref => '$hash_func->([], 17)',
     'hash call through coderef with too many arguments'],
);

for my $case (@cases) {
    my ($name, $code, $desc) = @$case;
    scalar eval $code;
    my $exn = $@;
    my @all_names =
        ($name, map "$_\::$name", qw<Ref::Util Ref::Util::PP Ref::Util::XS>);
    my $rx = join '|', (
        (map "Too many arguments for $_\\b", @all_names),
        (map "Usage: $_\\(ref\\)", @all_names),
    );
    like($exn, qr/^(?:$rx)/, $desc);
}