diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/CharacterIndex.java b/json-path/src/main/java/com/jayway/jsonpath/internal/CharacterIndex.java index a7bd30be..bd35ba6a 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/CharacterIndex.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/CharacterIndex.java @@ -255,7 +255,7 @@ public class CharacterIndex { } public boolean currentIsTail() { - return isOutOfBounds(position + 1); + return position >= charSequence.length()-1; } public boolean hasMoreCharacters() { diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java b/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java index 52c4a32a..eccd1189 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java @@ -26,7 +26,7 @@ public class PathCompiler { private static final char WILDCARD = '*'; private static final char PERIOD = '.'; private static final char SPACE = ' '; - private static final char QUESTIONMARK = '?'; + private static final char BEGIN_FILTER = '?'; private static final char COMMA = ','; private static final char SPLIT = ':'; private static final char MINUS = '-'; @@ -50,11 +50,11 @@ public class PathCompiler { try { path = path.trim(); - if(!path.startsWith("$") && !path.startsWith("@")){ + if(!(path.charAt(0) == DOC_CONTEXT) && !(path.charAt(0) == EVAL_CONTEXT)){ path = "$." + path; } - if(path.endsWith("..")){ - fail("Path must not end wid a scan operation '..'"); + if(path.endsWith(".")){ + fail("Path must not end with a '.' or '..'"); } LinkedList filterStack = new LinkedList(asList(filters)); Path p = new PathCompiler(path.trim(), filterStack).compile(); @@ -186,7 +186,7 @@ public class PathCompiler { if (!path.currentCharIs(OPEN_SQUARE_BRACKET)) { return false; } - int questionmarkIndex = path.indexOfNextSignificantChar(QUESTIONMARK); + int questionmarkIndex = path.indexOfNextSignificantChar(BEGIN_FILTER); if (questionmarkIndex == -1) { return false; } @@ -230,12 +230,12 @@ public class PathCompiler { // [?(...)] // private boolean readFilterToken(PathTokenAppender appender) { - if (!path.currentCharIs(OPEN_SQUARE_BRACKET) && !path.nextSignificantCharIs(QUESTIONMARK)) { + if (!path.currentCharIs(OPEN_SQUARE_BRACKET) && !path.nextSignificantCharIs(BEGIN_FILTER)) { return false; } int openStatementBracketIndex = path.position(); - int questionMarkIndex = path.indexOfNextSignificantChar(QUESTIONMARK); + int questionMarkIndex = path.indexOfNextSignificantChar(BEGIN_FILTER); if (questionMarkIndex == -1) { return false; } diff --git a/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java b/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java index 01acd726..feef9ebe 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java @@ -36,14 +36,22 @@ public class PathCompilerTest { @Test(expected = InvalidPathException.class) public void a_path_may_not_end_with_period() { - assertThat(compile("$.").toString()); - assertThat(compile("$.prop.").toString()); + compile("$."); + } + + @Test(expected = InvalidPathException.class) + public void a_path_may_not_end_with_period_2() { + compile("$.prop."); } @Test(expected = InvalidPathException.class) public void a_path_may_not_end_with_scan() { - assertThat(compile("$..").toString()); - assertThat(compile("$.prop..").toString()); + compile("$.."); + } + + @Test(expected = InvalidPathException.class) + public void a_path_may_not_end_with_scan_2() { + compile("$.prop.."); } @Test diff --git a/json-path/src/test/java/com/jayway/jsonpath/functions/BaseFunctionTest.java b/json-path/src/test/java/com/jayway/jsonpath/internal/function/BaseFunctionTest.java similarity index 96% rename from json-path/src/test/java/com/jayway/jsonpath/functions/BaseFunctionTest.java rename to json-path/src/test/java/com/jayway/jsonpath/internal/function/BaseFunctionTest.java index fb2eaed8..a3c9fba4 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/functions/BaseFunctionTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/internal/function/BaseFunctionTest.java @@ -1,4 +1,4 @@ -package com.jayway.jsonpath.functions; +package com.jayway.jsonpath.internal.function; import com.jayway.jsonpath.Configuration; diff --git a/json-path/src/test/java/com/jayway/jsonpath/functions/JSONEntityPathFunctionTest.java b/json-path/src/test/java/com/jayway/jsonpath/internal/function/JSONEntityPathFunctionTest.java similarity index 98% rename from json-path/src/test/java/com/jayway/jsonpath/functions/JSONEntityPathFunctionTest.java rename to json-path/src/test/java/com/jayway/jsonpath/internal/function/JSONEntityPathFunctionTest.java index 6f4046b0..e1721668 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/functions/JSONEntityPathFunctionTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/internal/function/JSONEntityPathFunctionTest.java @@ -1,4 +1,4 @@ -package com.jayway.jsonpath.functions; +package com.jayway.jsonpath.internal.function; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.Configurations; diff --git a/json-path/src/test/java/com/jayway/jsonpath/functions/NumericPathFunctionTest.java b/json-path/src/test/java/com/jayway/jsonpath/internal/function/NumericPathFunctionTest.java similarity index 97% rename from json-path/src/test/java/com/jayway/jsonpath/functions/NumericPathFunctionTest.java rename to json-path/src/test/java/com/jayway/jsonpath/internal/function/NumericPathFunctionTest.java index d4f7973d..f3903aa0 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/functions/NumericPathFunctionTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/internal/function/NumericPathFunctionTest.java @@ -1,4 +1,4 @@ -package com.jayway.jsonpath.functions; +package com.jayway.jsonpath.internal.function; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.Configurations;