Browse Source

Merge 770cd29c72 into 0ed52b46a2

pull/941/merge
wildMythicWest 1 year ago committed by GitHub
parent
commit
ae12db9d85
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 27
      json-path/src/main/java/com/jayway/jsonpath/Option.java
  2. 4
      json-path/src/main/java/com/jayway/jsonpath/internal/filter/RelationalExpressionNode.java
  3. 4
      json-path/src/test/java/com/jayway/jsonpath/BaseTest.java
  4. 3
      json-path/src/test/java/com/jayway/jsonpath/old/FilterTest.java

27
json-path/src/main/java/com/jayway/jsonpath/Option.java

@ -83,6 +83,31 @@ public enum Option {
* If REQUIRE_PROPERTIES option is present PathNotFoundException is thrown.
* If REQUIRE_PROPERTIES option is not present ["b-val"] is returned.
*/
REQUIRE_PROPERTIES
REQUIRE_PROPERTIES,
/**
* Configures JsonPath to require all properties defined in filters.
*
*
* Given:
*
* <pre>
* [
* {
* "a" : "a-val",
* "b" : "b-val"
* },
* {
* "a" : "a-val",
* }
* ]
* </pre>
*
* evaluating the filter "[?(@['does_not_exist'] NIN ['1', '2'])]"
*
* If STRICT_MODE option is present, filter will evaluate to false.
* If STRICT_MODE option is not present, filter will evaluate to true.
*/
STRICT_MODE
}

4
json-path/src/main/java/com/jayway/jsonpath/internal/filter/RelationalExpressionNode.java

@ -1,5 +1,6 @@
package com.jayway.jsonpath.internal.filter;
import com.jayway.jsonpath.Option;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -39,6 +40,9 @@ public class RelationalExpressionNode extends ExpressionNode {
if(right.isPathNode()){
r = right.asPathNode().evaluate(ctx);
}
if (ctx.configuration().containsOption(Option.STRICT_MODE) && (l.isUndefinedNode() || r.isUndefinedNode())) {
return false;
}
Evaluator evaluator = EvaluatorFactory.createEvaluator(relationalOperator);
if(evaluator != null){
return evaluator.evaluate(l, r, ctx);

4
json-path/src/test/java/com/jayway/jsonpath/BaseTest.java

@ -153,8 +153,8 @@ public class BaseTest {
" \"expensive\": 10\n" +
"}";
public Predicate.PredicateContext createPredicateContext(final Object check) {
public Predicate.PredicateContext createPredicateContext(final Object check, Option... options) {
return new PredicateContextImpl(check, check, Configuration.defaultConfiguration(), new HashMap<Path, Object>());
return new PredicateContextImpl(check, check, Configuration.defaultConfiguration().setOptions(options), new HashMap<Path, Object>());
}
}

3
json-path/src/test/java/com/jayway/jsonpath/old/FilterTest.java

@ -4,6 +4,7 @@ import com.jayway.jsonpath.BaseTest;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.Filter;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Option;
import com.jayway.jsonpath.Predicate;
import com.jayway.jsonpath.spi.json.JsonProvider;
import org.assertj.core.api.Assertions;
@ -168,6 +169,8 @@ public class FilterTest extends BaseTest {
assertFalse(filter(where("item").nin(3)).apply(createPredicateContext(check)));
assertFalse(filter(where("item").nin(asList(3))).apply(createPredicateContext(check)));
assertFalse(filter(where("not_existent_item").nin(3)).apply(createPredicateContext(check, Option.STRICT_MODE)));
assertFalse(filter(where("not_existent_item").nin(asList(3))).apply(createPredicateContext(check, Option.STRICT_MODE)));
}
@Test

Loading…
Cancel
Save