From 1de91ba40103f30cc7f96e152cc0f163ea9fe7ef Mon Sep 17 00:00:00 2001 From: salyh Date: Sun, 6 Jul 2014 20:25:56 +0200 Subject: [PATCH 2/2] Adapted test classes for the new files Signed-off-by: salyh --- .../org/apache/fleece/core/JsonParserTest.java | 244 +++++++++++++++++++-- .../org/apache/fleece/core/JsonReaderImplTest.java | 193 +++++++++++++++- 2 files changed, 412 insertions(+), 25 deletions(-) diff --git a/fleece-core/src/test/java/org/apache/fleece/core/JsonParserTest.java b/fleece-core/src/test/java/org/apache/fleece/core/JsonParserTest.java index 31f1b93..34bb7ca 100644 --- a/fleece-core/src/test/java/org/apache/fleece/core/JsonParserTest.java +++ b/fleece-core/src/test/java/org/apache/fleece/core/JsonParserTest.java @@ -18,20 +18,12 @@ */ package org.apache.fleece.core; -import org.apache.fleece.core.JsonArrayImpl; -import org.apache.fleece.core.JsonNumberImpl; -import org.apache.fleece.core.JsonObjectImpl; -import org.apache.fleece.core.JsonParserFactoryImpl; -import org.apache.fleece.core.JsonReaderImpl; -import org.apache.fleece.core.JsonStreamParser; -import org.apache.fleece.core.JsonStringImpl; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonReader; -import javax.json.stream.JsonParser; -import javax.json.stream.JsonParsingException; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -39,11 +31,13 @@ import java.math.BigDecimal; import java.util.Collections; import java.util.HashMap; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import javax.json.Json; +import javax.json.JsonArray; +import javax.json.JsonReader; +import javax.json.stream.JsonParser; +import javax.json.stream.JsonParsingException; + +import org.junit.Test; public class JsonParserTest { private void assertSimple(final JsonParser parser) { @@ -107,7 +101,7 @@ public class JsonParserTest { final JsonParser.Event event = parser.next(); assertNotNull(event); assertEquals(JsonParser.Event.VALUE_NUMBER, event); - assertEquals(2, parser.getInt()); + assertEquals(-2, parser.getInt()); } { assertTrue(parser.hasNext()); @@ -208,7 +202,7 @@ public class JsonParserTest { simple.putInternal("c", new JsonNumberImpl(new BigDecimal(4))); final JsonArrayImpl array = new JsonArrayImpl(); array.addInternal(new JsonNumberImpl(new BigDecimal(1))); - array.addInternal(new JsonNumberImpl(new BigDecimal(2))); + array.addInternal(new JsonNumberImpl(new BigDecimal(-2))); simple.putInternal("d", array); final JsonParser parser = Json.createParserFactory(Collections.emptyMap()).createParser(simple); @@ -340,6 +334,36 @@ public class JsonParserTest { assertTrue(parser.hasNext()); final JsonParser.Event event = parser.next(); assertNotNull(event); + assertEquals(JsonParser.Event.KEY_NAME, event); + assertEquals("b", parser.getString()); + } + { + assertTrue(parser.hasNext()); + final JsonParser.Event event = parser.next(); + assertNotNull(event); + assertEquals(JsonParser.Event.VALUE_NUMBER, event); + assertFalse(parser.isIntegralNumber()); + assertEquals(new BigDecimal("1.23E-3"), parser.getBigDecimal()); + } + { + assertTrue(parser.hasNext()); + final JsonParser.Event event = parser.next(); + assertNotNull(event); + assertEquals(JsonParser.Event.KEY_NAME, event); + assertEquals("c", parser.getString()); + } + { + assertTrue(parser.hasNext()); + final JsonParser.Event event = parser.next(); + assertNotNull(event); + assertEquals(JsonParser.Event.VALUE_NUMBER, event); + assertFalse(parser.isIntegralNumber()); + assertEquals(new BigDecimal("1.23E+3"), parser.getBigDecimal()); + } + { + assertTrue(parser.hasNext()); + final JsonParser.Event event = parser.next(); + assertNotNull(event); assertEquals(JsonParser.Event.END_OBJECT, event); } { @@ -359,7 +383,7 @@ public class JsonParserTest { assertFalse(parser.isIntegralNumber()); } - + @Test public void escaping() { final JsonParser parser = Json.createParser(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/escaping.json")); @@ -367,8 +391,22 @@ public class JsonParserTest { parser.next(); assertEquals("\"", parser.getString()); parser.next(); + assertEquals("\\", parser.getString()); + parser.next(); + assertEquals("/", parser.getString()); + parser.next(); + assertEquals("\b", parser.getString()); + parser.next(); + assertEquals("\f", parser.getString()); + parser.next(); + assertEquals("\n", parser.getString()); + parser.next(); + assertEquals("\r", parser.getString()); + parser.next(); assertEquals("\t", parser.getString()); parser.next(); + assertEquals("D", parser.getString()); + parser.next(); assertFalse(parser.hasNext()); parser.close(); } @@ -391,6 +429,7 @@ public class JsonParserTest { case 1: index++; return '"'; + default: break; } return 'a'; // infinite key } @@ -404,7 +443,8 @@ public class JsonParserTest { } parser.close(); } - + + // spaces { final JsonParser parser = Json.createParserFactory(new HashMap() {{ @@ -418,6 +458,7 @@ public class JsonParserTest { case 0: index++; return '{'; + default: break; } return ' '; // infinite spaces } @@ -437,7 +478,9 @@ public class JsonParserTest { @Test public void hasNext() { - final JsonParser parser = new JsonStreamParser(new ByteArrayInputStream("{}".getBytes()), 1000); + final JsonParser parser = Json.createParserFactory(new HashMap() {{ + put(JsonParserFactoryImpl.MAX_STRING_LENGTH, 10); + }}).createParser(new ByteArrayInputStream("{}".getBytes())); assertTrue(parser.hasNext()); assertTrue(parser.hasNext()); assertTrue(parser.hasNext()); @@ -449,6 +492,159 @@ public class JsonParserTest { @Test(expected = JsonParsingException.class) public void commaChecks() { // using a reader as wrapper of parser - new JsonReaderImpl(new ByteArrayInputStream("{\"z\":\"b\"\"j\":\"d\"}".getBytes())).read(); + + Json.createReader(new ByteArrayInputStream("{\"z\":\"b\"\"j\":\"d\"}".getBytes())).read(); } + + + @Test(expected = JsonParsingException.class) + public void fail1() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail1.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail2() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail2.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail3() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail3.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail4() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail4.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail5() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail5.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail6() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail6.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail7() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail7.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail8() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail8.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail9() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail9.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail10() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail10.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail11() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail11.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail12() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail12.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail13() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail13.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail14() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail14.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail15() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail15.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail16() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail16.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail17() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail17.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail18() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail18.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail19() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail19.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail20() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail20.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail21() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail21.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail22() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail22.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail23() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail23.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail24() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail24.json")).read(); + } + + @Test(expected = JsonParsingException.class) + public void fail25() { + + Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/fails/fail25.json")).read(); + } + } diff --git a/fleece-core/src/test/java/org/apache/fleece/core/JsonReaderImplTest.java b/fleece-core/src/test/java/org/apache/fleece/core/JsonReaderImplTest.java index 6520095..cdd82de 100644 --- a/fleece-core/src/test/java/org/apache/fleece/core/JsonReaderImplTest.java +++ b/fleece-core/src/test/java/org/apache/fleece/core/JsonReaderImplTest.java @@ -18,19 +18,28 @@ */ package org.apache.fleece.core; +import org.junit.Before; import org.junit.Test; import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonObject; import javax.json.JsonReader; +import javax.json.JsonStructure; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; public class JsonReaderImplTest { + + @Before + public void setup(){ + System.setProperty("org.apache.fleece.default-char-buffer", "8192"); + } + @Test public void simple() { final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/simple.json")); @@ -45,7 +54,189 @@ public class JsonReaderImplTest { assertNotNull(array); assertEquals(2, array.size()); assertEquals(1, array.getInt(0)); - assertEquals(2, array.getInt(1)); + assertEquals(-2, array.getInt(1)); + reader.close(); + } + + + @Test + public void unicode() { + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/unicode.json")); + assertNotNull(reader); + final JsonObject object = reader.readObject(); + assertNotNull(object); + assertEquals(String.valueOf('\u6565'), object.getString("a")); + assertEquals("", object.getString("z")); + assertEquals(String.valueOf('\u0000'), object.getString("c")); + assertThat(object.get("d"), instanceOf(JsonArray.class)); + final JsonArray array = object.getJsonArray("d"); + assertNotNull(array); + assertEquals(3, array.size()); + assertEquals(-2, array.getInt(0)); + assertEquals(" ", array.getString(1)); + assertEquals("", array.getString(2)); + assertEquals(5, object.size()); + reader.close(); + } + + @Test + public void special() { + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/special.json")); + assertNotNull(reader); + final JsonObject object = reader.readObject(); + assertNotNull(object); + assertEquals(9, object.size()); + + assertEquals("b,,", object.getString("a{")); + assertEquals(":4::,[{", object.getString("c::::")); + assertTrue(object.getJsonNumber("w").doubleValue() > 4 && object.getJsonNumber("w").doubleValue() < 5); + assertEquals(110, object.getInt("1.4312")); + assertEquals("\"", object.getString("\"")); + assertEquals("ন:4::,[{", object.getString("থii:üäöÖ.,;.-<>!§$%&()=?ß´'`*+#")); + reader.close(); + } + + + @Test + public void parseHuge1MbJsonFile() { + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("bench/huge_1mb.json")); + assertNotNull(reader); + final JsonStructure object = reader.read(); + assertNotNull(object); + reader.close(); + } + + @Test + public void parseBig600KbJsonFile() { + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("bench/big_600kb.json")); + assertNotNull(reader); + final JsonStructure object = reader.read(); + assertNotNull(object); + reader.close(); + } + + @Test + public void parseLarge130KbJsonFile() { + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("bench/large_130kb.json")); + assertNotNull(reader); + final JsonStructure object = reader.read(); + assertNotNull(object); + reader.close(); + } + + @Test + public void parseMedium11KbJsonFile() { + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("bench/medium_11kb.json")); + assertNotNull(reader); + final JsonStructure object = reader.read(); + assertNotNull(object); + reader.close(); + } + + @Test + public void parseSmall3KbJsonFile() { + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("bench/small_3kb.json")); + assertNotNull(reader); + final JsonStructure object = reader.read(); + assertNotNull(object); + reader.close(); + } + + @Test + public void parseTiny50BJsonFile() { + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("bench/tiny_50b.json")); + assertNotNull(reader); + final JsonStructure object = reader.read(); + assertNotNull(object); + reader.close(); + } + + + @Test + public void simpleBadBufferSize8() { + System.setProperty("org.apache.fleece.default-char-buffer", "8"); + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/simple.json")); + assertNotNull(reader); + final JsonObject object = reader.readObject(); + assertNotNull(object); + assertEquals(3, object.size()); + assertEquals("b", object.getString("a")); + assertEquals(4, object.getInt("c")); + assertThat(object.get("d"), instanceOf(JsonArray.class)); + final JsonArray array = object.getJsonArray("d"); + assertNotNull(array); + assertEquals(2, array.size()); + assertEquals(1, array.getInt(0)); + assertEquals(-2, array.getInt(1)); reader.close(); } + @Test + public void simpleBadBufferSize9() { + System.setProperty("org.apache.fleece.default-char-buffer", "9"); + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/simple.json")); + assertNotNull(reader); + final JsonObject object = reader.readObject(); + assertNotNull(object); + assertEquals(3, object.size()); + assertEquals("b", object.getString("a")); + assertEquals(4, object.getInt("c")); + assertThat(object.get("d"), instanceOf(JsonArray.class)); + final JsonArray array = object.getJsonArray("d"); + assertNotNull(array); + assertEquals(2, array.size()); + assertEquals(1, array.getInt(0)); + assertEquals(-2, array.getInt(1)); + reader.close(); + } + + @Test(expected=IllegalArgumentException.class) + public void emptyZeroCharBuffersize() { + System.setProperty("org.apache.fleece.default-char-buffer", "0"); + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/empty.json")); + assertNotNull(reader); + reader.readObject(); + reader.close(); + } + + @Test + public void emptyOneCharBufferSize() { + System.setProperty("org.apache.fleece.default-char-buffer", "1"); + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/empty.json")); + assertNotNull(reader); + final JsonObject object = reader.readObject(); + assertNotNull(object); + assertEquals(0, object.size()); + reader.close(); + } + + @Test + public void emptyArrayOneCharBufferSize() { + System.setProperty("org.apache.fleece.default-char-buffer", "1"); + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/emptyarray.json")); + assertNotNull(reader); + final JsonArray array = reader.readArray(); + assertNotNull(array); + assertEquals(0, array.size()); + reader.close(); + } + + + @Test + public void stringescapeVariousBufferSizes() { + + int[] buffersizes = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 32, 64, 128, 1024, 8192 }; + + for (int i = 0; i < buffersizes.length; i++) { + System.setProperty("org.apache.fleece.default-char-buffer", String.valueOf(buffersizes[i])); + final JsonReader reader = Json.createReader(Thread.currentThread().getContextClassLoader() + .getResourceAsStream("json/stringescape.json")); + assertNotNull(reader); + final JsonObject object = reader.readObject(); + assertNotNull(object); + assertEquals(1, object.size()); + assertEquals("s\"mit\"", object.getString("name")); + reader.close(); + } + } } -- 1.8.5.2 (Apple Git-48)