File: gh14.t

package info (click to toggle)
libtype-tiny-perl 1.004004-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,128 kB
  • sloc: perl: 8,761; makefile: 7
file content (75 lines) | stat: -rw-r--r-- 1,462 bytes parent folder | download
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
67
68
69
70
71
72
73
74
75
=pod

=encoding utf-8

=head1 PURPOSE

Test for non-inlined coercions in Moo.

The issue that prompted this test was actually invalid, caused by a typo
in the bug reporter's code. But I wrote the test case, so I might as well
include it.

=head1 SEE ALSO

L<https://github.com/tobyink/p5-type-tiny/issues/14>.

=head1 AUTHOR

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

=head1 COPYRIGHT AND LICENCE

This software is copyright (c) 2017-2019 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 strict;
use warnings;
use Test::More;
use Test::Fatal;
use Test::Requires { Moo => '1.006' };

{
	package FinancialTypes;
	use Type::Library -base;
	use Type::Utils -all;
	BEGIN { extends "Types::Standard" };
	
	declare 'BankAccountNo',
		as Str,
		where {
			/^\d{26}$/
			or /^[A-Z]{2}\d{18,26}$/
			or /^\d{8}-\d+(-\d+)+$/
		},
		message { "Bad account: $_"};
		
		coerce 'BankAccountNo',
			from Str, via {
				$_ =~ s{\s+}{}g;
				$_;
			};
}

{
	package BankAccount;
	use Moo;
	has account_number => (
		is        => 'ro',
		required  => !!1,
		isa       => FinancialTypes::BankAccountNo(),
		coerce    => FinancialTypes::BankAccountNo()->coercion,
	);
}

my $x;
my $e = exception {
	$x = BankAccount::->new( account_number => "10 2030 4050 1111 2222 3333 4444" );
};
is($e, undef);
is($x->account_number, "10203040501111222233334444");
done_testing();