1use 5.010;
2use warnings;
3
4use Test::More 'no_plan';
5
6use Regexp::Grammars;
7
8my $delimited         = qr{ <delim=(['"`])> <content=(.*?)> <\_delim> }xms;
9my $delimited_cap     = qr{ <delim=(['"`])> <content=(.*?)> <rdel=\_delim> }xms;
10my $delimited_listcap = qr{ <delim=(['"`])> <content=(.*?)> <[rdel=\_delim]> }xms;
11
12no Regexp::Grammars;
13
14while (my $input = <DATA>) {
15    chomp $input;
16    my $input_copy = $input;
17    my ($input, $expected_outcome) = split /\s*:\s*/, $input;
18
19    if ($expected_outcome eq 'succeed') {
20        ok +($input =~ $delimited) => "Match of $input ${expected_outcome}ed";
21        is $/{delim},   substr($input,0,1)  => "Captured delimiter";
22        is $/{content}, substr($input,1,-1) => "Captured content";
23
24        ok +($input =~ $delimited_cap) => "Match and capture of $input ${expected_outcome}ed";
25        is $/{delim},   substr($input,0,1)  => "Captured delimiter";
26        is $/{content}, substr($input,1,-1) => "Captured content";
27        is $/{rdel},    substr($input,0,1)  => "Captured backreference";
28
29        ok +($input =~ $delimited_listcap) => "Match and list capture of $input ${expected_outcome}ed";
30        is $/{delim},        substr($input,0,1)  => "Captured delimiter";
31        is $/{content},      substr($input,1,-1) => "Captured content";
32        is_deeply $/{rdel}, [substr($input,0,1)] => "Captured backreference";
33    }
34    else {
35        ok +($input !~ $delimited)         => "Match of $input ${expected_outcome}ed";
36        ok +($input !~ $delimited_cap)     => "Match and capture of $input ${expected_outcome}ed";
37        ok +($input !~ $delimited_listcap) => "Match and list of $input ${expected_outcome}ed";
38    }
39}
40
41
42__DATA__
43'a'     :succeed
44"abc"   :succeed
45``      :succeed
46'abc"   :fail
47`abc'   :fail
48