diff --git a/README b/README index 55302b12..6d13e082 100644 --- a/README +++ b/README @@ -1 +1 @@ -Java DSL for easy testing and reading of JSON data \ No newline at end of file +Java DSL for testing and reading JSON documents \ No newline at end of file diff --git a/json-assert/pom.xml b/json-assert/pom.xml index 0f55e93c..00791520 100644 --- a/json-assert/pom.xml +++ b/json-assert/pom.xml @@ -34,31 +34,24 @@ com.googlecode.json-simple json-simple - 1.1 org.hamcrest hamcrest-all - 1.1 - - - - commons-beanutils - commons-beanutils - 1.8.3 commons-lang commons-lang - 2.5 + + + junit junit - 4.8.2 test diff --git a/json-assert/src/main/java/com/jayway/jsonassert/JSONAssert.java b/json-assert/src/main/java/com/jayway/jsonassert/JSONAssert.java index fa09fbdd..e8bd8c48 100644 --- a/json-assert/src/main/java/com/jayway/jsonassert/JSONAssert.java +++ b/json-assert/src/main/java/com/jayway/jsonassert/JSONAssert.java @@ -34,7 +34,29 @@ public class JSONAssert { * @throws IOException */ public static JSONReader parse(Reader reader) throws ParseException, IOException { - return JSONReaderImpl.parse(reader); + return parse(reader, false); + } + + /** + * Creates a JSONReader + * + * @param reader he json document to read + * @return a new reader + * @throws ParseException document could not pe parsed + * @throws IOException + */ + public static JSONReader parse(Reader reader, boolean closeReader) throws ParseException, IOException { + JSONReader jsonReader = null; + try { + jsonReader = JSONReaderImpl.parse(reader); + } finally { + if(closeReader){ + try { + reader.close(); + } catch (IOException ignore) {} + } + } + return jsonReader; } /** diff --git a/json-assert/src/main/java/com/jayway/jsonassert/JSONReader.java b/json-assert/src/main/java/com/jayway/jsonassert/JSONReader.java index 878f490a..41e14481 100644 --- a/json-assert/src/main/java/com/jayway/jsonassert/JSONReader.java +++ b/json-assert/src/main/java/com/jayway/jsonassert/JSONReader.java @@ -12,49 +12,48 @@ import java.util.Map; public interface JSONReader { /** - * * @param path * @return */ boolean hasJsonPath(String path); /** - * * @param path * @return */ boolean isNull(String path); /** - * * @param path * @return */ Object get(String path); /** - * * @param path * @return */ String getString(String path); /** - * * @param path * @return */ Long getLong(String path); /** - * + * @param path + * @return + */ + Double getDouble(String path); + + /** * @param path * @return */ Boolean getBoolean(String path); /** - * * @param path * @param * @return @@ -62,7 +61,6 @@ public interface JSONReader { List getList(String path); /** - * * @param path * @return */ diff --git a/json-assert/src/main/java/com/jayway/jsonassert/impl/JSONReaderImpl.java b/json-assert/src/main/java/com/jayway/jsonassert/impl/JSONReaderImpl.java index 9b6784d2..e3acd523 100644 --- a/json-assert/src/main/java/com/jayway/jsonassert/impl/JSONReaderImpl.java +++ b/json-assert/src/main/java/com/jayway/jsonassert/impl/JSONReaderImpl.java @@ -93,6 +93,13 @@ public class JSONReaderImpl implements JSONReader { return getByPath(Long.class, path); } + /** + * {@inheritDoc} + */ + public Double getDouble(String path) { + return getByPath(Double.class, path); + } + /** * {@inheritDoc} */ diff --git a/json-assert/src/test/java/com/jayway/jsonassert/JSONAssertTest.java b/json-assert/src/test/java/com/jayway/jsonassert/JSONAssertTest.java index 4ffe7a90..6c01f0fe 100644 --- a/json-assert/src/test/java/com/jayway/jsonassert/JSONAssertTest.java +++ b/json-assert/src/test/java/com/jayway/jsonassert/JSONAssertTest.java @@ -21,7 +21,7 @@ public class JSONAssertTest { } @Test - public void array_content_can_be_asserted_with_matcher() throws Exception { + public void list_content_can_be_asserted_with_matcher() throws Exception { JSONAssert.with(TEST_DOCUMENT).assertThat("stringList", hasItems("ONE", "TWO")); } @@ -32,6 +32,11 @@ public class JSONAssertTest { JSONAssert.with(TEST_DOCUMENT).assertThat("subDocument", hasEntry("subField", "sub-field")); } + @Test + public void a_sub_document_can_asserted_on__by_path() throws Exception { + JSONAssert.with(TEST_DOCUMENT).assertThat("subDocument.subField", is(equalTo("sub-field"))); + } + @Test public void a_path_can_be_asserted_equal_to() throws Exception { @@ -50,16 +55,15 @@ public class JSONAssertTest { JSONAssert.with(TEST_DOCUMENT).assertThat("stringField", equalTo("SOME CRAP")); } - @Test public void multiple_asserts_can_be_chained() throws Exception { JSONAssert.with(TEST_DOCUMENT) .assertThat("stringField", equalTo("string-field")) + .assertThat("numberField", is(notNullValue())) .and() .assertNull("nullField") .and() - .assertThat("numberField", is(notNullValue())) .assertEquals("stringField", "string-field"); } diff --git a/json-assert/src/test/java/com/jayway/jsonassert/JSONReaderTest.java b/json-assert/src/test/java/com/jayway/jsonassert/JSONReaderTest.java index a898f67f..1508a621 100644 --- a/json-assert/src/test/java/com/jayway/jsonassert/JSONReaderTest.java +++ b/json-assert/src/test/java/com/jayway/jsonassert/JSONReaderTest.java @@ -1,8 +1,11 @@ package com.jayway.jsonassert; import com.jayway.jsonassert.impl.JSONReaderImpl; +import org.hamcrest.Matcher; +import org.hamcrest.Matchers; import org.junit.Test; +import java.io.InputStreamReader; import java.text.ParseException; import java.util.List; @@ -16,7 +19,7 @@ import static org.junit.Assert.*; public class JSONReaderTest { - private static String TEST_DOCUMENT = "{ \"nullField\" : null \"stringField\" : \"string-field\" , \"numberField\" : 1234 , \"booleanField\" : true , \"subDocument\" : {\"subField\" : \"sub-field\"} , \"stringList\" : [\"ONE\", \"TWO\"], \"objectList\" : [{\"subField\" : \"sub-field-0\"}, {\"subField\" : \"sub-field-1\"}], \"listList\" : [[\"0.0\", \"0.1\"], [\"1.0\", \"1.1\"]], }"; + private static String TEST_DOCUMENT = "{ \"nullField\" : null \"stringField\" : \"string-field\" , \"numberField\" : 1234 , \"doubleField\" : 12.34 , \"booleanField\" : true , \"subDocument\" : {\"subField\" : \"sub-field\"} , \"stringList\" : [\"ONE\", \"TWO\"], \"objectList\" : [{\"subField\" : \"sub-field-0\"}, {\"subField\" : \"sub-field-1\"}], \"listList\" : [[\"0.0\", \"0.1\"], [\"1.0\", \"1.1\"]], }"; private static String TEST_DOCUMENT_ARRAY = "{ \"listList\" : [[\"0.0\", \"0.1\"], [\"1.0\", \"1.1\"]], }"; private static String TEST_DEEP_PATH_DOCUMENT = "{ \"a\" : { \"b\" : { \"c\" : { \"say\" : \"hello\" } } }}"; private static String TEST_ARRAY = "[{\"name\" : \"name0\"}, {\"name\" : \"name1\"}]"; @@ -27,6 +30,17 @@ public class JSONReaderTest { JSONReaderImpl.parse("not json"); } + @Test + public void reader_can_be_created_with_input_stream() throws Exception { + + JSONReader reader = JSONAssert.parse(getInputStreamReader("json-test-doc.json"), true); + + assertEquals("donut", reader.getString("type")); + + assertThat(reader.getList("toppings"), Matchers.hasItems("Glazed", "Sugar")); + } + + @Test public void a_string_field_can_be_accessed() throws Exception { JSONReader reader = JSONAssert.parse(TEST_DOCUMENT); @@ -56,6 +70,13 @@ public class JSONReaderTest { assertTrue(1234L == reader.getLong("numberField")); } + @Test + public void a_double_field_can_be_accessed() throws Exception { + JSONReader reader = JSONAssert.parse(TEST_DOCUMENT); + + assertEquals(12.34D, reader.getDouble("doubleField"), 0.001); + } + @Test public void a_boolean_field_can_be_accessed() throws Exception { JSONReader reader = JSONAssert.parse(TEST_DOCUMENT); @@ -216,4 +237,14 @@ public class JSONReaderTest { assertEquals("[\"ONE\",\"TWO\"]", reader.getList("stringList").toString()); } + + + //---------------------------------------------------------- + // + // helpers + // + //---------------------------------------------------------- + private InputStreamReader getInputStreamReader(String resource) { + return new InputStreamReader(ClassLoader.getSystemResourceAsStream(resource)); + } } diff --git a/json-assert/src/test/resources/json-test-doc.json b/json-assert/src/test/resources/json-test-doc.json new file mode 100644 index 00000000..24ea2a54 --- /dev/null +++ b/json-assert/src/test/resources/json-test-doc.json @@ -0,0 +1,18 @@ +{ + "id": 100, + "type": "donut", + "name": "Cake", + "available": true, + "ppu": 0.55, + "batters": + { + "batter": + [ + { "id": "1001", "type": "Regular" }, + { "id": "1002", "type": "Chocolate" }, + { "id": "1003", "type": "Blueberry" }, + { "id": "1004", "type": "Devil's Food" } + ] + }, + "toppings": ["Glazed", "Sugar", "Chocolate", "Maple"] +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2ac6badd..a2bea242 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,9 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> + --> + 4.0.0 org.sonatype.oss @@ -70,8 +72,8 @@ json-assert - examples - + examples + @@ -127,12 +129,32 @@ + + + com.googlecode.json-simple + json-simple + 1.1 + + + + org.hamcrest + hamcrest-all + 1.1 + + + + commons-lang + commons-lang + 2.5 + + junit junit 4.8.2 test + \ No newline at end of file