From 5a05cdbedba2385ba6285ba0fe232ec12f4ecea1 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Fri, 14 Aug 2015 17:20:07 +0200 Subject: [PATCH] Consider empty arrays as existent in JsonPath assertions Prior to this commit, a JsonPath assertion that a path expression evaluated to an array in JsonPathExpectationsHelper (and therefore indirectly in JsonPathResultMatchers in Spring MVC Test) would incorrectly fail if the array was present in the JSON content but empty. This commit fixes this issue by removing the "not empty" check for arrays and lists. Issue: SPR-13320 --- .../test/util/JsonPathExpectationsHelper.java | 3 -- .../util/JsonPathExpectationsHelperTests.java | 10 ++++++ .../result/JsonPathResultMatchersTests.java | 31 ++++++++++++------- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/test/util/JsonPathExpectationsHelper.java b/spring-test/src/main/java/org/springframework/test/util/JsonPathExpectationsHelper.java index 7f0cc47d0fc..bc79ec6cfae 100644 --- a/spring-test/src/main/java/org/springframework/test/util/JsonPathExpectationsHelper.java +++ b/spring-test/src/main/java/org/springframework/test/util/JsonPathExpectationsHelper.java @@ -238,9 +238,6 @@ public class JsonPathExpectationsHelper { Object value = evaluateJsonPath(content); String reason = "No value for JSON path \"" + this.expression + "\""; assertTrue(reason, value != null); - if (List.class.isInstance(value)) { - assertTrue(reason, !((List) value).isEmpty()); - } return value; } diff --git a/spring-test/src/test/java/org/springframework/test/util/JsonPathExpectationsHelperTests.java b/spring-test/src/test/java/org/springframework/test/util/JsonPathExpectationsHelperTests.java index f58c82ab8ca..eb1310a8e66 100644 --- a/spring-test/src/test/java/org/springframework/test/util/JsonPathExpectationsHelperTests.java +++ b/spring-test/src/test/java/org/springframework/test/util/JsonPathExpectationsHelperTests.java @@ -106,6 +106,11 @@ public class JsonPathExpectationsHelperTests { new JsonPathExpectationsHelper("$.arr").assertValueIsArray(CONTENT); } + @Test + public void assertValueIsArrayForAnEmptyArray() throws Exception { + new JsonPathExpectationsHelper("$.emptyArray").assertValueIsArray(CONTENT); + } + @Test public void assertValueIsArrayForNonArray() throws Exception { exception.expect(AssertionError.class); @@ -117,6 +122,11 @@ public class JsonPathExpectationsHelperTests { new JsonPathExpectationsHelper("$.colorMap").assertValueIsMap(CONTENT); } + @Test + public void assertValueIsMapForAnEmptyMap() throws Exception { + new JsonPathExpectationsHelper("$.emptyMap").assertValueIsMap(CONTENT); + } + @Test public void assertValueIsMapForNonMap() throws Exception { exception.expect(AssertionError.class); diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/result/JsonPathResultMatchersTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/result/JsonPathResultMatchersTests.java index 3c00b5a23d8..984b74c2f80 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/result/JsonPathResultMatchersTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/result/JsonPathResultMatchersTests.java @@ -32,7 +32,7 @@ import org.springframework.test.web.servlet.StubMvcResult; */ public class JsonPathResultMatchersTests { - private static final String RESPONSE_CONTENT = "{\"foo\": \"bar\", \"qux\": [\"baz\"], \"emptyArray\": [], \"icanhaz\": true, \"howmanies\": 5, \"cheeseburger\": {\"pickles\": true} }"; + private static final String RESPONSE_CONTENT = "{\"foo\": \"bar\", \"qux\": [\"baz\"], \"emptyArray\": [], \"icanhaz\": true, \"howmanies\": 5, \"cheeseburger\": {\"pickles\": true}, \"emptyMap\": {} }"; private static final StubMvcResult stubMvcResult; @@ -93,6 +93,10 @@ public class JsonPathResultMatchersTests { public void isArray() throws Exception { new JsonPathResultMatchers("$.qux").isArray().match(stubMvcResult); } + + @Test + public void isArrayForAnEmptyArray() throws Exception { + new JsonPathResultMatchers("$.emptyArray").isArray().match(stubMvcResult); } @Test(expected = AssertionError.class) @@ -100,6 +104,21 @@ public class JsonPathResultMatchersTests { new JsonPathResultMatchers("$.bar").isArray().match(stubMvcResult); } + @Test + public void isMap() throws Exception { + new JsonPathResultMatchers("$.cheeseburger").isMap().match(stubMvcResult); + } + + @Test + public void isMapForAnEmptyMap() throws Exception { + new JsonPathResultMatchers("$.emptyMap").isMap().match(stubMvcResult); + } + + @Test(expected = AssertionError.class) + public void isMapNoMatch() throws Exception { + new JsonPathResultMatchers("$.foo").isMap().match(stubMvcResult); + } + @Test public void isBoolean() throws Exception { new JsonPathResultMatchers("$.icanhaz").isBoolean().match(stubMvcResult); @@ -120,16 +139,6 @@ public class JsonPathResultMatchersTests { new JsonPathResultMatchers("$.foo").isNumber().match(stubMvcResult); } - @Test - public void isMap() throws Exception { - new JsonPathResultMatchers("$.cheeseburger").isMap().match(stubMvcResult); - } - - @Test(expected = AssertionError.class) - public void isMapNoMatch() throws Exception { - new JsonPathResultMatchers("$.foo").isMap().match(stubMvcResult); - } - @Test public void isString() throws Exception { new JsonPathResultMatchers("$.foo").isString().match(stubMvcResult);