File: alias.t

package info (click to toggle)
libtype-tiny-perl 2.002001-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,948 kB
  • sloc: perl: 14,610; makefile: 2; sh: 1
file content (66 lines) | stat: -rw-r--r-- 1,520 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
=pod

=encoding utf-8

=head1 PURPOSE

Test C<compile_named> supports parameter aliases.

=head1 AUTHOR

Toby Inkster E<lt>tobyink@cpan.orgE<gt>.

=head1 COPYRIGHT AND LICENCE

This software is copyright (c) 2022-2023 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut

use Test::More;
use Test::Fatal;
use Types::Standard -types;
use Type::Params qw( compile_named_oo );

{
	my $check;
	sub adder {
		$check ||= compile_named_oo(
			first_number   => Int, { alias => [ 'x' ] },
			second_number  => Int, { alias =>   'y'   },
		);
		my ( $arg ) = &$check;
		my $sum = $arg->first_number + $arg->second_number;
		wantarray ? ( $sum, $arg ) : $sum;
	}
}

is( adder( first_number => 40, second_number => 2 ), 42, 'real args' );

is( adder( x => 40, y => 3 ), 43, 'aliases for args' );

is( adder( first_number => 40, y => 4 ), 44, 'mixed 1' );

is( adder( x => 40, second_number => 5 ), 45, 'mixed 2' );

is( adder( { x => 60, y => 3 } ), 63, 'hashref' );

my $e1 = exception{
	adder( { first_number => 40, x => 41, y => 2 } );
};

like $e1, qr/Superfluous alias "x" for argument "first_number"/, 'error';

my ( $sum, $arg ) = adder( x => 1, y => 2 );
is_deeply(
	[ grep !/caller/, sort keys %$arg ],
	[ 'first_number', 'second_number' ],
	'correct hash keys in $arg',
);
can_ok( $arg, 'first_number', 'second_number' );
ok !$arg->can( 'x' ), 'no method "x"';
ok !$arg->can( 'y' ), 'no method "y"';

done_testing;