From e3c1673f199ee1132ea02c9bd44883cdcb3e4f77 Mon Sep 17 00:00:00 2001 From: Kalle Stenflo Date: Wed, 1 Oct 2014 13:58:09 +0200 Subject: [PATCH] Invalid path detection improved.. --- .../com/jayway/jsonassert/JsonAssertTest.java | 25 +++++++++---------- .../jsonpath/internal/PathCompiler.java | 5 ++++ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/json-path-assert/src/test/java/com/jayway/jsonassert/JsonAssertTest.java b/json-path-assert/src/test/java/com/jayway/jsonassert/JsonAssertTest.java index 516f9a22..05fb6dd8 100644 --- a/json-path-assert/src/test/java/com/jayway/jsonassert/JsonAssertTest.java +++ b/json-path-assert/src/test/java/com/jayway/jsonassert/JsonAssertTest.java @@ -1,5 +1,9 @@ package com.jayway.jsonassert; +import com.jayway.jsonpath.InvalidPathException; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.internal.Path; +import com.jayway.jsonpath.internal.PathCompiler; import org.junit.Test; import java.io.InputStream; @@ -146,15 +150,6 @@ public class JsonAssertTest { .assertThat("$['store'].book[0].title", equalTo("Sayings of the Century")); } - /* - @Test - public void no_hit_returns_null() throws Exception { - with(JSON).assertThat("$.store.book[1000].title", Matchers.nullValue()); - } - */ - - - @Test public void path_including_wildcard_path_followed_by_another_path_concatenates_results_to_list() throws Exception { with(getResourceAsStream("lotto.json")).assertThat("lotto.winners[*].winnerId", hasItems(23, 54)); @@ -163,13 +158,17 @@ public class JsonAssertTest { @Test public void testNotDefined() throws Exception { JsonAsserter asserter = JsonAssert.with("{\"foo\":\"bar\"}"); - asserter.assertEquals("$.foo", "bar"); // pass - asserter.assertEquals("$foo", "bar"); // pass - asserter.assertNotDefined("$.xxx"); // fail but should be pass - asserter.assertNotDefined("$xxx"); // fail but should be pass + asserter.assertNotDefined("$.xxx"); } + @Test(expected = InvalidPathException.class) + public void assert_that_invalid_path_is_thrown() { + + JsonAsserter asserter = JsonAssert.with("{\"foo\":\"bar\"}"); + asserter.assertEquals("$foo", "bar"); + } + private InputStream getResourceAsStream(String resourceName) { return getClass().getClassLoader().getResourceAsStream(resourceName); diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/PathCompiler.java b/json-path/src/main/java/com/jayway/jsonpath/internal/PathCompiler.java index da88c8a3..68a856a4 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/PathCompiler.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/PathCompiler.java @@ -70,6 +70,11 @@ public class PathCompiler { path = "$" + path.substring(1); } + if(path.length() > 1 && + path.charAt(1) != '.' && + path.charAt(1) != '['){ + throw new InvalidPathException("Invalid path " + path); + } String cacheKey = path + isRootPath + filterList.toString(); Path p = cache.get(cacheKey);