From e40161a77811e94a55423f0aca3522d048cc6fc4 Mon Sep 17 00:00:00 2001 From: Kalle Stenflo Date: Thu, 12 Nov 2015 22:32:53 +0100 Subject: [PATCH] Fixed issue with string representation of function path. --- .../com/jayway/jsonpath/internal/filter/FilterCompiler.java | 4 +++- .../jayway/jsonpath/internal/token/FunctionPathToken.java | 4 +++- .../test/java/com/jayway/jsonpath/FilterCompilerTest.java | 5 ++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FilterCompiler.java b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FilterCompiler.java index ff6fdb54..819dbe12 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FilterCompiler.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FilterCompiler.java @@ -298,7 +298,9 @@ public class FilterCompiler { filter.setPosition(closingSquareBracketIndex + 1); } } - boolean closingLogicalBracket = (filter.currentChar() == CLOSE_BRACKET && !currentCharIsClosingFunctionBracket(begin)); + boolean closingFunctionBracket = (filter.currentChar() == CLOSE_BRACKET && currentCharIsClosingFunctionBracket(begin)); + boolean closingLogicalBracket = (filter.currentChar() == CLOSE_BRACKET && !closingFunctionBracket); + if (!filter.inBounds() || isRelationalOperatorChar(filter.currentChar()) || filter.currentChar() == SPACE || closingLogicalBracket) { break; } else { diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/token/FunctionPathToken.java b/json-path/src/main/java/com/jayway/jsonpath/internal/token/FunctionPathToken.java index b2e152ef..2323589a 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/token/FunctionPathToken.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/token/FunctionPathToken.java @@ -51,6 +51,8 @@ public class FunctionPathToken extends PathToken { @Override public String getPathFragment() { - return pathFragment; + return "." + pathFragment; } + + } diff --git a/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java b/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java index d689aebc..b95dea9d 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java @@ -36,6 +36,9 @@ public class FilterCompilerTest { assertThat(compile("[?(@.a IN {'foo':'bar'})]").toString()).isEqualTo("[?(@['a'] IN {'foo':'bar'})]"); assertThat(compile("[?(@.value<'7')]").toString()).isEqualTo("[?(@['value'] < '7')]"); assertThat(compile("[?(@.message == 'it\\\\')]").toString()).isEqualTo("[?(@['message'] == 'it\\\\')]"); + assertThat(compile("[?(@.message.%min() > 10)]").toString()).isEqualTo("[?(@['message'].%min() > 10)]"); + assertThat(compile("[?(@.message.%min()==10)]").toString()).isEqualTo("[?(@['message'].%min() == 10)]"); + assertThat(compile("[?(10 == @.message.%min())]").toString()).isEqualTo("[?(10 == @['message'].%min())]"); + assertThat(compile("[?(((@)))]").toString()).isEqualTo("[?(@)]"); } - }