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
This commit is contained in:
Sam Brannen 2015-08-14 17:20:07 +02:00
parent 8afea1bc78
commit 5a05cdbedb
3 changed files with 30 additions and 14 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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);