1214501Srpaulo#!/usr/bin/perl -Tw
2214501Srpaulo
3214501Srpaulouse strict;
4214501Srpaulouse warnings;
5252726Srpaulouse Test::More tests => 17;
6252726Srpaulo
7214501SrpauloBEGIN {
8214501Srpaulo    use_ok("Locale::Maketext");
9214501Srpaulo}
10214501Srpaulo
11214501Srpaulo{
12214501Srpaulo
13214501Srpaulo    package MyTestLocale;
14214501Srpaulo    no warnings 'once';
15214501Srpaulo
16214501Srpaulo    @MyTestLocale::ISA     = qw(Locale::Maketext);
17214501Srpaulo    %MyTestLocale::Lexicon = ();
18214501Srpaulo}
19214501Srpaulo
20214501Srpaulo{
21214501Srpaulo
22214501Srpaulo    package MyTestLocale::en;
23214501Srpaulo    no warnings 'once';
24214501Srpaulo
25214501Srpaulo    @MyTestLocale::en::ISA = qw(MyTestLocale);
26214501Srpaulo
27214501Srpaulo    %MyTestLocale::en::Lexicon = ( '_AUTO' => 1 );
28214501Srpaulo
29214501Srpaulo    sub custom_handler {
30214501Srpaulo        return "custom_handler_response";
31214501Srpaulo    }
32214501Srpaulo
33214501Srpaulo    sub _internal_method {
34214501Srpaulo        return "_internal_method_response";
35214501Srpaulo    }
36214501Srpaulo
37214501Srpaulo    sub new {
38214501Srpaulo        my ( $class, @args ) = @_;
39214501Srpaulo        my $lh = $class->SUPER::new(@args);
40214501Srpaulo        $lh->{use_external_lex_cache} = 1;
41214501Srpaulo        return $lh;
42214501Srpaulo    }
43214501Srpaulo}
44214501Srpaulo
45214501Srpaulomy $lh = MyTestLocale->get_handle('en');
46214501Srpaulomy $res;
47214501Srpaulo
48214501Srpaulo# get_handle blocked by default
49214501Srpaulo$res = eval { $lh->maketext('[get_handle,en]') };
50214501Srpaulois( $res, undef, 'no return value from blocked expansion' );
51214501Srpaulolike( $@, qr/Can't use .* as a method name/, 'get_handle blocked in bracket notation by default denylist' );
52214501Srpaulo
53214501Srpaulo# _ambient_langprefs blocked by default
54214501Srpaulo$res = eval { $lh->maketext('[_ambient_langprefs]') };
55214501Srpaulois( $res, undef, 'no return value from blocked expansion' );
56214501Srpaulolike( $@, qr/Can't use .* as a method name/, '_ambient_langprefs blocked in bracket notation by default denylist' );
57214501Srpaulo
58214501Srpaulo# _internal_method not blocked by default
59214501Srpaulo$res = eval { $lh->maketext('[_internal_method]') };
60214501Srpaulois( $res, "_internal_method_response", '_internal_method allowed in bracket notation by default denylist' );
61214501Srpaulois( $@, '', 'no exception thrown by use of _internal_method under default denylist' );
62214501Srpaulo
63214501Srpaulo# sprintf not blocked by default
64214501Srpaulo$res = eval { $lh->maketext('[sprintf,%s,hello]') };
65214501Srpaulois( $res, "hello", 'sprintf allowed in bracket notation by default denylist' );
66214501Srpaulois( $@,   '',      'no exception thrown by use of sprintf under default denylist' );
67214501Srpaulo
68214501Srpaulo# denylisting sprintf and numerate
69214501Srpaulo$lh->blacklist( 'sprintf', 'numerate' );
70214501Srpaulo
71214501Srpaulo# sprintf blocked by custom denylist
72214501Srpaulo$res = eval { $lh->maketext('[sprintf,%s,hello]') };
73214501Srpaulois( $res, undef, 'no return value from blocked expansion' );
74214501Srpaulolike( $@, qr/Can't use .* as a method name/, 'sprintf blocked in bracket notation by custom denylist' );
75214501Srpaulo
76214501Srpaulo# denylisting numf and _internal_method
77214501Srpaulo$lh->blacklist('numf');
78214501Srpaulo$lh->blacklist('_internal_method');
79214501Srpaulo
80214501Srpaulo# sprintf blocked by custom denylist
81214501Srpaulo$res = eval { $lh->maketext('[sprintf,%s,hello]') };
82214501Srpaulois( $res, undef, 'no return value from blocked expansion' );
83214501Srpaulolike( $@, qr/Can't use .* as a method name/, 'sprintf blocked in bracket notation by custom denylist after extension of denylist' );
84214501Srpaulo
85214501Srpaulo# _internal_method blocked by custom denylist
86214501Srpaulo$res = eval { $lh->maketext('[_internal_method]') };
87214501Srpaulois( $res, undef, 'no return value from blocked expansion' );
88214501Srpaulolike( $@, qr/Can't use .* as a method name/, 'sprintf blocked in bracket notation by custom denylist after extension of denylist' );
89214501Srpaulo
90214501Srpaulo# custom_handler not in default or custom denylist
91214501Srpaulo$res = eval { $lh->maketext('[custom_handler]') };
92214501Srpaulois( $res, "custom_handler_response", 'custom_handler allowed in bracket notation by default and custom denylist' );
93214501Srpaulois( $@, '', 'no exception thrown by use of custom_handler under default and custom denylist' );
94214501Srpaulo