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