use strict; use warnings; use Test::More; use Test::Warnings; use Data::DynamicValidator qw/validator/; use aliased qw/Data::DynamicValidator::Path/; 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;