From f013e86fb839193aecf0081d17855f43a57d63e4 Mon Sep 17 00:00:00 2001 From: Alexey Makeyev Date: Tue, 13 Oct 2015 16:15:28 +0300 Subject: [PATCH] fix for object property handling in case of Option.SUPPRESS_EXCEPTIONS and indefinite upstream path --- .../jayway/jsonpath/internal/token/PathToken.java | 4 ++-- .../test/java/com/jayway/jsonpath/OptionsTest.java | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/token/PathToken.java b/json-path/src/main/java/com/jayway/jsonpath/internal/token/PathToken.java index f40c8e7b..9ef8b7a6 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/token/PathToken.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/token/PathToken.java @@ -57,8 +57,8 @@ public abstract class PathToken { } } else { if(!isUpstreamDefinite() && - !ctx.options().contains(Option.REQUIRE_PROPERTIES) && - !ctx.options().contains(Option.SUPPRESS_EXCEPTIONS)){ + !ctx.options().contains(Option.REQUIRE_PROPERTIES) || + ctx.options().contains(Option.SUPPRESS_EXCEPTIONS)){ return; } else { throw new PathNotFoundException("Missing property in path " + evalPath); diff --git a/json-path/src/test/java/com/jayway/jsonpath/OptionsTest.java b/json-path/src/test/java/com/jayway/jsonpath/OptionsTest.java index 37b54898..4553c36e 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/OptionsTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/OptionsTest.java @@ -137,4 +137,17 @@ public class OptionsTest extends BaseTest { } catch (PathNotFoundException pnf){} } + + @Test + public void issue_suppress_exceptions_does_not_break_indefinite_evaluation() { + Configuration conf = Configuration.builder().options(SUPPRESS_EXCEPTIONS).build(); + + assertThat(using(conf).parse("{\"foo2\": [5]}").read("$..foo2[0]")).asList().containsOnly(5); + assertThat(using(conf).parse("{\"foo\" : {\"foo2\": [5]}}").read("$..foo2[0]")).asList().containsOnly(5); + assertThat(using(conf).parse("[null, [{\"foo\" : {\"foo2\": [5]}}]]").read("$..foo2[0]")).asList().containsOnly(5); + + assertThat(using(conf).parse("[null, [{\"foo\" : {\"foo2\": [5]}}]]").read("$..foo.foo2[0]")).asList().containsOnly(5); + + assertThat(using(conf).parse("{\"aoo\" : {}, \"foo\" : {\"foo2\": [5]}, \"zoo\" : {}}").read("$[*].foo2[0]")).asList().containsOnly(5); + } }