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