You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by sa...@apache.org on 2014/09/01 18:50:31 UTC
[07/20] renamed fleece to johnzon
http://git-wip-us.apache.org/repos/asf/incubator-fleece/blob/6e86a53e/johnzon-core/src/test/java/org/apache/johnzon/core/LocationTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/LocationTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/LocationTest.java
new file mode 100644
index 0000000..8bc2b60
--- /dev/null
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/LocationTest.java
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, 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.
+ */
+package org.apache.johnzon.core;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.StringReader;
+import java.util.HashMap;
+
+import javax.json.Json;
+import javax.json.JsonReader;
+import javax.json.stream.JsonLocation;
+import javax.json.stream.JsonParser;
+import javax.json.stream.JsonParsingException;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class LocationTest {
+ @Test
+ public void failBytesInput() {
+
+ try {
+ JsonReader reader = Json.createReader(new StringReader("{\"z\":nulll}"));
+ reader.read();
+ Assert.fail("Exception expected");
+ } catch (JsonParsingException e) {
+ JsonLocation location = e.getLocation();
+ Assert.assertNotNull(location);
+ Assert.assertEquals(new JsonLocationImpl(1, 11, 10), location);
+
+ }
+
+
+ try {
+ JsonReader reader = Json.createReader(new StringReader("{\"z\":\nnulll}"));
+ reader.read();
+ Assert.fail("Exception expected");
+ } catch (JsonParsingException e) {
+ JsonLocation location = e.getLocation();
+ Assert.assertNotNull(location);
+ Assert.assertEquals(new JsonLocationImpl(2, 6, 11), location);
+
+ }
+
+ try {
+ JsonReader reader = Json.createReader(new StringReader("aaa"));
+ reader.read();
+ Assert.fail("Exception expected");
+ } catch (JsonParsingException e) {
+ JsonLocation location = e.getLocation();
+ Assert.assertNotNull(location);
+ Assert.assertEquals(new JsonLocationImpl(1, 2, 1), location);
+
+ }
+ }
+
+
+ @Test
+ public void simpleLocation() {
+
+
+ JsonParser parser = Json.createParser(new StringReader("{\n \"ö \uffff c\": null ,\n \"test\" :\"testval\",\n \"num\": 45.1e-12 \n}"));
+
+ /*
+
+
+{
+ "z a c": null ,
+ "test" :"testval",
+ "num": 45.1e-12 //2 ws
+}
+
+
+ */
+
+ Assert.assertEquals(new JsonLocationImpl(1, 1, 0), parser.getLocation());
+ parser.next(); //after first {
+ Assert.assertEquals(new JsonLocationImpl(1, 2, 1), parser.getLocation());
+ parser.next(); //after "ö \uffff c"
+ Assert.assertEquals(new JsonLocationImpl(2, 12, 13), parser.getLocation());
+ parser.next(); //after null
+ Assert.assertEquals(new JsonLocationImpl(2, 18, 19), parser.getLocation());
+ parser.next(); //after test
+ Assert.assertEquals(new JsonLocationImpl(3, 11, 32), parser.getLocation());
+ parser.next(); //after testval
+ Assert.assertEquals(new JsonLocationImpl(3, 23, 44), parser.getLocation());
+ parser.next(); //after num
+ Assert.assertEquals(new JsonLocationImpl(4, 10, 55), parser.getLocation());
+ parser.next(); //after 45.1e-12
+ Assert.assertEquals(new JsonLocationImpl(4, 20, 65), parser.getLocation());
+ parser.next(); //after }
+ Assert.assertEquals(new JsonLocationImpl(5, 2, 69), parser.getLocation());
+
+ }
+
+ /*@Test
+ public void simpleLocationBytes() {
+
+ JsonParser parser = Json.createParser(new ByteArrayInputStream("{\n \"ö \uffff c\": null ,\n \"test\" :\"testval\",\n \"num\": 45.1e-12 \n}".getBytes()));
+
+ Assert.assertEquals(new JsonLocationImpl(1, 1, 0), parser.getLocation());
+ parser.next(); //after first {
+ Assert.assertEquals(new JsonLocationImpl(1, 2, 2), parser.getLocation());
+ parser.next(); //after "ö \uffff c"
+ Assert.assertEquals(new JsonLocationImpl(2, 12, 26), parser.getLocation());
+ parser.next(); //after null
+ Assert.assertEquals(new JsonLocationImpl(2, 18, 38), parser.getLocation());
+ parser.next(); //after test
+ Assert.assertEquals(new JsonLocationImpl(3, 11, 64), parser.getLocation());
+ parser.next(); //after testval
+ Assert.assertEquals(new JsonLocationImpl(3, 23, 88), parser.getLocation());
+ parser.next(); //after num
+ Assert.assertEquals(new JsonLocationImpl(4, 10, 110), parser.getLocation());
+ parser.next(); //after 45.1e-12
+ Assert.assertEquals(new JsonLocationImpl(4, 20, 130), parser.getLocation());
+ parser.next(); //after }
+ Assert.assertEquals(new JsonLocationImpl(5, 2, 138), parser.getLocation());
+
+ }*/
+
+ @Test
+ public void simpleLocationCrossingBufferBoundaries() {
+
+
+ for (int i = 1; i <= 100; i++) {
+ final String value = String.valueOf(i);
+ final JsonParser parser = Json.createParserFactory(new HashMap<String, Object>() {
+ {
+ put("org.apache.johnzon.default-char-buffer", value);
+ }
+ }).createParser(new StringReader("{\n \"z a c\": null ,\n \"test\" :\"testval\",\n \"num\": 45.1e-12 \n}"));
+
+
+ /*
+
+
+ {
+ "z a c": null ,
+ "test" :"testval",
+ "num": 45.1e-12 //2 ws
+ }
+
+
+ */
+
+
+
+ Assert.assertEquals(new JsonLocationImpl(1, 1, 0), parser.getLocation());
+ parser.next(); //after first {
+ Assert.assertEquals(new JsonLocationImpl(1, 2, 1), parser.getLocation());
+ parser.next(); //after "z a c"
+ Assert.assertEquals(new JsonLocationImpl(2, 12, 13), parser.getLocation());
+ parser.next(); //after null
+ Assert.assertEquals(new JsonLocationImpl(2, 18, 19), parser.getLocation());
+ parser.next(); //after test
+ Assert.assertEquals(new JsonLocationImpl(3, 11, 32), parser.getLocation());
+ parser.next(); //after testval
+ Assert.assertEquals(new JsonLocationImpl(3, 23, 44), parser.getLocation());
+ parser.next(); //after num
+ Assert.assertEquals(new JsonLocationImpl(4, 10, 55), parser.getLocation());
+ parser.next(); //after 45.1e-12
+ Assert.assertEquals(new JsonLocationImpl(4, 20, 65), parser.getLocation());
+ parser.next(); //after }
+ Assert.assertEquals(new JsonLocationImpl(5, 2, 69), parser.getLocation());
+
+ Assert.assertFalse(parser.hasNext());
+ Assert.assertFalse(parser.hasNext());
+ }
+
+
+
+
+ }
+
+
+
+ @Test
+ public void testLocationOnParsingException() {
+ //line number, column, offset (measured in chars)
+ //line number and column start at 1
+ //offset start at 0
+ assertJsonLocation("a", new JsonLocationImpl(1, 2, 1));
+ assertJsonLocation("aa", new JsonLocationImpl(1, 2, 1));
+ assertJsonLocation("asa", new JsonLocationImpl(1, 2, 1));
+ assertJsonLocation("{]", new JsonLocationImpl(1, 3, 2));
+ assertJsonLocation("[}", new JsonLocationImpl(1, 3, 2));
+ assertJsonLocation("[a", new JsonLocationImpl(1, 3, 2));
+ assertJsonLocation("[nuLl]", new JsonLocationImpl(1, 5, 4));
+ assertJsonLocation("[falsE]", new JsonLocationImpl(1, 7, 6));
+ assertJsonLocation("[][]", new JsonLocationImpl(1, 4, 3));
+ assertJsonLocation("[1234L]", new JsonLocationImpl(1, 7, 6));
+ assertJsonLocation("[null\n}", new JsonLocationImpl(2, 2, 7));
+ assertJsonLocation("[null\r\n}", new JsonLocationImpl(2, 2, 8));
+ assertJsonLocation("[null\n, null\n}", new JsonLocationImpl(3, 2, 14));
+ assertJsonLocation("[null\r\n, null\r\n}", new JsonLocationImpl(3, 2, 16));
+ }
+
+
+ private void assertJsonLocation(String jsonString, JsonLocation expectedLocation) {
+ JsonParser parser = Json.createParser(new StringReader(jsonString));
+ try {
+ while(parser.hasNext()) {
+ parser.next();
+ }
+ Assert.fail("Expected to throw JsonParsingException for "+jsonString);
+ } catch(JsonParsingException je) {
+ // Expected
+ if (expectedLocation != null) {
+ JsonLocation loc = je.getLocation();
+ assertEquals(expectedLocation.getLineNumber(), loc.getLineNumber());
+ assertEquals(expectedLocation.getColumnNumber(), loc.getColumnNumber());
+ assertEquals(expectedLocation.getStreamOffset(), loc.getStreamOffset());
+ }
+ } finally {
+ parser.close();
+ }
+ }
+}