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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
use 5.010;
use warnings;
use Test::More 'no_plan';
use Regexp::Grammars;
my $delimited = qr{ <delim=([(/][*]|if|[][(){}<>?'"`]+)> <content=(.*?)> </delim> }xms;
my $delimited_cap = qr{ <delim=([(/][*]|if|[][(){}<>?'"`]+)> <content=(.*?)> <rdel=/delim> }xms;
my $delimited_listcap = qr{ <delim=([(/][*]|if|[][(){}<>?'"`]+)> <content=(.*?)> <[rdel=/delim]> }xms;
no Regexp::Grammars;
while (my $spec = <DATA>) {
next if $spec !~ /\S/;
chomp $spec;
my $spec_copy = $spec;
my ($input, $expected_outcome) = split /\s*:\s*/, $spec;
my ($ldelim, $content, $rdelim) = split /(xxx)/, $input;
if ($expected_outcome eq 'succeed') {
ok +($input =~ $delimited) => "Match of $input ${expected_outcome}ed";
is $/{delim}, $ldelim => "Captured delimiter";
is $/{content}, $content => "Captured content";
ok +($input =~ $delimited_cap) => "Match and capture of $input ${expected_outcome}ed";
is $/{delim}, $ldelim => "Captured delimiter";
is $/{content}, $content => "Captured content";
is $/{rdel}, $rdelim => "Captured closer";
ok +($input =~ $delimited_listcap) => "Match and list capture of $input ${expected_outcome}ed";
is $/{delim}, $ldelim => "Captured delimiter";
is $/{content}, $content => "Captured content";
is_deeply $/{rdel}, [$rdelim] => "Captured closer";
}
else {
ok +($input !~ $delimited) => "Match of $input ${expected_outcome}ed";
ok +($input !~ $delimited_cap) => "Match and capture of $input ${expected_outcome}ed";
ok +($input !~ $delimited_listcap) => "Match and list of $input ${expected_outcome}ed";
}
}
__DATA__
"xxx" :succeed
`xxx' :succeed
``xxx'' :succeed
'xxx" :fail
{xxx} :succeed
[xxx] :succeed
<xxx> :succeed
(xxx) :succeed
?xxx? :succeed
[[xxx]] :succeed
{{{xxx}}} :succeed
((((xxx)))) :succeed
<<xxx>> :succeed
??xxx?? :succeed
}xxx{ :succeed
]xxx[ :succeed
)xxx( :succeed
>xxx< :succeed
?xxx? :succeed
}}}xxx{{{ :succeed
]]xxx[[ :succeed
))))xxx(((( :succeed
>>xxx<< :succeed
??xxx?? :succeed
({xxx}) :succeed
(*xxx*) :succeed
/*xxx*/ :succeed
ifxxxfi :succeed
`` :fail
'abc" :fail
{xxx{ :fail
[xxx[ :fail
<xxx< :fail
(xxx( :fail
[[xxx[[ :fail
{{{xxx{{{ :fail
((((xxx(((( :fail
<<xxx<< :fail
|