The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
use Data::DynamicValidator qw/validator/;
subtest 'escaped-in-to_string' => sub {
my $ps = '/`a/b`/`c/d`/0';
my $p1 = Path->new($ps);
is "$p1", $ps;
};
subtest 'escape-in-path-object' => sub {
my $p1 = Path->new('/v1:`a/b`/v2:`c/d`/v3:0');
is_deeply $p1->components, ['','a/b', 'c/d', 0];
my $p2 = Path->new('/v1:`a///b/`/v2:`c/d`/v3:0');
is_deeply $p2->components, ['','a///b/', 'c/d', 0];
};
subtest 'simple-escaping' => sub {
my $data = {
'a/b' => { 'c/d' => [5] }
};
my $p1 = validator($data)->_expand_routes('/v1:*/v2:*/v3:0')->[0];
is $p1->value($data), 5, 'got 5';
my $p2 = validator($data)->_expand_routes('/v1:`a/b`/v2:`c/d`/v3:0')->[0];
is $p2->value($data), 5, 'got 5';
is "$p1", "$p2";
};
subtest 'escape-in-expression' => sub {
my $paths = validator([10,20,30])->_expand_routes('/`*[index == 2]`');
is @$paths, 1;
is $paths->[0], "/2";
};
done_testing;