Browse Source

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
pull/857/head
Sam Brannen 11 years ago
parent
commit
5a05cdbedb
  1. 3
      spring-test/src/main/java/org/springframework/test/util/JsonPathExpectationsHelper.java
  2. 10
      spring-test/src/test/java/org/springframework/test/util/JsonPathExpectationsHelperTests.java
  3. 31
      spring-test/src/test/java/org/springframework/test/web/servlet/result/JsonPathResultMatchersTests.java

3
spring-test/src/main/java/org/springframework/test/util/JsonPathExpectationsHelper.java

@ -238,9 +238,6 @@ public class JsonPathExpectationsHelper { @@ -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;
}

10
spring-test/src/test/java/org/springframework/test/util/JsonPathExpectationsHelperTests.java

@ -106,6 +106,11 @@ public class JsonPathExpectationsHelperTests { @@ -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 { @@ -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);

31
spring-test/src/test/java/org/springframework/test/web/servlet/result/JsonPathResultMatchersTests.java

@ -32,7 +32,7 @@ import org.springframework.test.web.servlet.StubMvcResult; @@ -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 { @@ -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 { @@ -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 { @@ -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);

Loading…
Cancel
Save