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 a118f9ca4..14d950f10 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 @@ -333,7 +333,8 @@ else if (isPathContext(c)) { // we've encountered a COMMA do the same case CLOSE_PARENTHESIS: groupParen--; - if (0 != groupParen) { + //CS304 Issue link: https://github.com/json-path/JsonPath/issues/620 + if (0 > groupParen ) { parameter.append(c); } case COMMA: diff --git a/json-path/src/test/java/com/jayway/jsonpath/old/IssuesTest.java b/json-path/src/test/java/com/jayway/jsonpath/old/IssuesTest.java index 3bf7f1d38..cf7583f18 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/old/IssuesTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/old/IssuesTest.java @@ -1021,7 +1021,7 @@ public void issue_309(){ assertThat((String)doc.read("$.jsonArr[0].name")).isEqualTo("nOne"); assertThat((String)doc.read("$.jsonArr[1].name")).isEqualTo("Jayway"); } - + @Test public void issue_378(){ @@ -1039,7 +1039,7 @@ public void issue_378(){ .jsonProvider(new JacksonJsonNodeJsonProvider()) .mappingProvider(new JacksonMappingProvider()) .build(); - + DocumentContext ctx = JsonPath.using(configuration).parse(json); String path = "$.nodes[*][?(!([\"1.2.3.4\"] subsetof @.ntpServers))].ntpServers"; @@ -1047,4 +1047,73 @@ public void issue_378(){ ctx.read(jsonPath); } + + //CS304 (manually written) Issue link: https://github.com/json-path/JsonPath/issues/620 + @Test + public void issue_620_1(){ + String json = "{\n" + + " \"complexText\": {\n" + + " \"nestedFields\": [\n" + + " {\n" + + " \"index\": \"0\",\n" + + " \"name\": \"A\"\n" + + " },\n" + + " {\n" + + " \"index\": \"1\",\n" + + " \"name\": \"B\"\n" + + " },\n" + + " {\n" + + " \"index\": \"2\",\n" + + " \"name\": \"C\"\n" + + " }\n" + + " ]\n" + + " }\n" + + "}"; + + String path1 = "$.concat($.complexText.nestedFields[?(@.index == '2')].name," + + "$.complexText.nestedFields[?(@.index == '1')].name," + + "$.complexText.nestedFields[?(@.index == '0')].name)"; + String path2 = "$.concat($.complexText.nestedFields[2].name," + + "$.complexText.nestedFields[1].name," + + "$.complexText.nestedFields[0].name)"; + + assertThat((String)JsonPath.read(json,path1)).isEqualTo("CBA"); + assertThat((String)JsonPath.read(json,path2)).isEqualTo("CBA"); + } + //CS304 (manually written) Issue link: https://github.com/json-path/JsonPath/issues/620 + @Test + public void issue_620_2(){ + String json = "{\n" + + " \"complexText\": {\n" + + " \"nestedFields\": [\n" + + " {\n" + + " \"index\": \"0\",\n" + + " \"name\": \"A\"\n" + + " },\n" + + " {\n" + + " \"index\": \"1\",\n" + + " \"name\": \"B\"\n" + + " },\n" + + " {\n" + + " \"index\": \"2\",\n" + + " \"name\": \"C\"\n" + + " }\n" + + " ]\n" + + " }\n" + + "}"; + + String path1 = "$.concat($.complexText.nestedFields[?(@.index == '2')].name," + + "$.complexText.nestedFields[?((@.index == '1')].name," + + "$.complexText.nestedFields[?(@.index == '0')].name)"; + + boolean thrown = false; + + try { + Object result = (Object) JsonPath.read(json,path1); + } catch (Exception e) { + thrown = true; + } + + assertTrue(thrown); + } }