diff --git a/lib/Data/DPath/Path.pm b/lib/Data/DPath/Path.pm index 10abac6..066e457 100644 --- a/lib/Data/DPath/Path.pm +++ b/lib/Data/DPath/Path.pm @@ -95,7 +95,7 @@ sub _build__steps { # - 2) use the part before "[" # - 3) unshift the rest to remaining # - 4) extract_codeblock() explicitely - if ($extracted =~ /(.*)((? 28; +use Data::DPath 'dpath'; + +my @fields = ( + 'simpleFild', 'fieldWithBackSlash\\', + '\'fieldWithQoute\'', ']fieldWithSquareBrackets[', + '[fieldWithSquareBrackets]', '"fieldWithDoubleQoute"', + 'fieldWithSlash/', +); + +my $value = 'aaa[bbb/ccc]ddd"eee\'fff'; + +my $data = {map {$_ => $value} @fields}; + +my $FIXTURES = [ + q!/simpleFild[value eq 'aaa[bbb/ccc]ddd"eee\'fff']!, + q!/simpleFild[value eq "aaa[bbb/ccc]ddd\"eee'fff"]!, + q!/fieldWithBackSlash\\[value eq 'aaa[bbb/ccc]ddd"eee\'fff']!, + q!/fieldWithBackSlash\\[value eq "aaa[bbb/ccc]ddd\"eee'fff"]!, + q!/'fieldWithQoute'[value eq 'aaa[bbb/ccc]ddd"eee\'fff']!, + q!/'fieldWithQoute'[value eq "aaa[bbb/ccc]ddd\"eee'fff"]!, + # + # If the key contains square brackets, slash or double quotes, it must be enclosed in double quotes. + # + q!/"]fieldWithSquareBrackets["[value eq 'aaa[bbb/ccc]ddd"eee\'fff']!, + q!/"]fieldWithSquareBrackets["[value eq "aaa[bbb/ccc]ddd\"eee'fff"]!, + q!/"[fieldWithSquareBrackets]"[value eq 'aaa[bbb/ccc]ddd"eee\'fff']!, + q!/"[fieldWithSquareBrackets]"[value eq "aaa[bbb/ccc]ddd\"eee'fff"]!, + q!/"\"fieldWithDoubleQoute\""[value eq 'aaa[bbb/ccc]ddd"eee\'fff']!, + q!/"\"fieldWithDoubleQoute\""[value eq "aaa[bbb/ccc]ddd\"eee'fff"]!, + q!/"fieldWithSlash/"[value eq 'aaa[bbb/ccc]ddd"eee\'fff']!, + q!/"fieldWithSlash/"[value eq "aaa[bbb/ccc]ddd\"eee'fff"]!, +]; + +foreach my $path (@$FIXTURES) { + my @result = dpath($path)->match($data); + + ok(@result == 1); + is($result[0], $value, $path); +}