package com.jayway.jsonpath.matchers; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.matchers.helpers.StrictParsingConfiguration; import com.jayway.jsonpath.matchers.helpers.TestingMatchers; import org.hamcrest.Description; import org.hamcrest.Matcher; import org.hamcrest.StringDescription; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import java.io.File; import static com.jayway.jsonpath.matchers.JsonPathMatchers.isJson; import static com.jayway.jsonpath.matchers.helpers.ResourceHelpers.resource; import static com.jayway.jsonpath.matchers.helpers.ResourceHelpers.resourceAsFile; import static com.jayway.jsonpath.matchers.helpers.TestingMatchers.withPathEvaluatedTo; import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; public class IsJsonTest { private static final String VALID_JSON = resource("example.json"); private static final String INVALID_JSON = "{ invalid-json }"; private static final String BOOKS_JSON_STRING = resource("books.json"); private static final File BOOKS_JSON_FILE = resourceAsFile("books.json"); private static final Object BOOKS_JSON_PARSED = parseJson(BOOKS_JSON_STRING); @BeforeClass public static void setupStrictJsonParsing() { Configuration.setDefaults(new StrictParsingConfiguration()); } @AfterClass public static void setupDefaultJsonParsing() { Configuration.setDefaults(null); } @Test public void shouldMatchOnEmptyJsonObject() { assertThat("{}", isJson()); } @Test public void shouldMatchOnJsonObject() { assertThat("{ \"hi\" : \"there\" }", isJson()); } @Test public void shouldMatchOnEmptyJsonArray() { assertThat("[]", isJson()); } @Test public void shouldMatchOnJsonArray() { assertThat("[\"hi\", \"there\"]", isJson()); } @Test public void shouldMatchValidJson() { assertThat(VALID_JSON, isJson()); assertThat(BOOKS_JSON_STRING, isJson()); } @Test public void shouldNotMatchInvalidJson() { assertThat(INVALID_JSON, not(isJson())); assertThat(new Object(), not(isJson())); assertThat(new Object[]{}, not(isJson())); assertThat("hi there", not(isJson())); assertThat(new Integer(42), not(isJson())); assertThat(Boolean.TRUE, not(isJson())); assertThat(false, not(isJson())); assertThat(null, not(isJson())); } @Test public void shouldMatchJsonObjectEvaluatedToTrue() { assertThat(BOOKS_JSON_PARSED, isJson(withPathEvaluatedTo(true))); } @Test public void shouldNotMatchJsonObjectEvaluatedToFalse() { assertThat(BOOKS_JSON_PARSED, not(isJson(withPathEvaluatedTo(false)))); } @Test public void shouldMatchJsonStringEvaluatedToTrue() { assertThat(BOOKS_JSON_STRING, isJson(withPathEvaluatedTo(true))); } @Test public void shouldNotMatchJsonStringEvaluatedToFalse() { assertThat(BOOKS_JSON_STRING, not(isJson(withPathEvaluatedTo(false)))); } @Test public void shouldMatchJsonFileEvaluatedToTrue() { assertThat(BOOKS_JSON_FILE, isJson(withPathEvaluatedTo(true))); } @Test public void shouldNotMatchJsonFileEvaluatedToFalse() { assertThat(BOOKS_JSON_FILE, not(isJson(withPathEvaluatedTo(false)))); } @Test public void shouldNotMatchNonExistingJsonFile() { File nonExistingFile = new File("missing-file"); assertThat(nonExistingFile, not(isJson())); } @Test public void shouldBeDescriptive() { Matcher matcher = isJson(withPathEvaluatedTo(true)); Description description = new StringDescription(); matcher.describeTo(description); assertThat(description.toString(), startsWith("is json")); assertThat(description.toString(), containsString(TestingMatchers.MATCH_TRUE_TEXT)); } @Test public void shouldDescribeMismatchOfValidJson() { Matcher matcher = isJson(withPathEvaluatedTo(true)); Description description = new StringDescription(); matcher.describeMismatch(BOOKS_JSON_STRING, description); assertThat(description.toString(), containsString(TestingMatchers.MISMATCHED_TEXT)); } @Test public void shouldDescribeMismatchOfInvalidJson() { Matcher matcher = isJson(withPathEvaluatedTo(true)); Description description = new StringDescription(); matcher.describeMismatch("invalid-json", description); assertThat(description.toString(), containsString("\"invalid-json\"")); } private static Object parseJson(String json) { return Configuration.defaultConfiguration().jsonProvider().parse(json); } }