176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson/* 276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * Copyright (C) 2010 The Android Open Source Project 376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * 476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * you may not use this file except in compliance with the License. 676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * You may obtain a copy of the License at 776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * 876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * 1076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * Unless required by applicable law or agreed to in writing, software 1176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 1276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * See the License for the specific language governing permissions and 1476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * limitations under the License. 1576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson */ 1676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 1776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilsonpackage android.util; 1876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 1976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilsonimport java.io.IOException; 2076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilsonimport java.io.StringReader; 21eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilsonimport java.util.Arrays; 22eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilsonimport junit.framework.TestCase; 2376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 2476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilsonpublic final class JsonReaderTest extends TestCase { 2576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 269d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson private static final int READER_BUFFER_SIZE = 1024; 279d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 2876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testReadArray() throws IOException { 2976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[true, true]")); 3076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 3176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(true, reader.nextBoolean()); 3276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(true, reader.nextBoolean()); 3376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endArray(); 3476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 3576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 3676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 371ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testReadEmptyArray() throws IOException { 381ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[]")); 391ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 401ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertFalse(reader.hasNext()); 411ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.endArray(); 421ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 431ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 441ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 4576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testReadObject() throws IOException { 4676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader( 4776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson "{\"a\": \"android\", \"b\": \"banana\"}")); 4876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginObject(); 4976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("a", reader.nextName()); 5076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("android", reader.nextString()); 5176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("b", reader.nextName()); 5276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("banana", reader.nextString()); 5376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endObject(); 5476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 5576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 5676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 571ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testReadEmptyObject() throws IOException { 581ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{}")); 591ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 601ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertFalse(reader.hasNext()); 611ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.endObject(); 621ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 631ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 641ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testSkipObject() throws IOException { 6676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader( 6776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson "{\"a\": { \"c\": [], \"d\": [true, true, {}] }, \"b\": \"banana\"}")); 6876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginObject(); 6976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("a", reader.nextName()); 7076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.skipValue(); 7176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("b", reader.nextName()); 7276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.skipValue(); 7376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endObject(); 7476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 7576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 7676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 7776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testHelloWorld() throws IOException { 7876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson String json = "{\n" + 7976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson " \"hello\": true,\n" + 8076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson " \"foo\": [\"world\"]\n" + 8176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson "}"; 8276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 8376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginObject(); 8476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("hello", reader.nextName()); 8576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(true, reader.nextBoolean()); 8676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("foo", reader.nextName()); 8776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 8876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("world", reader.nextString()); 8976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endArray(); 9076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endObject(); 9176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 9276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 9376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 9476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testNulls() { 9576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 9676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson new JsonReader(null); 9776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 9876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (NullPointerException expected) { 9976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 10076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 10176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 10276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testEmptyString() throws IOException { 10376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 10476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson new JsonReader(new StringReader("")).beginArray(); 10576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IOException expected) { 10676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 10776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 10876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson new JsonReader(new StringReader("")).beginObject(); 10976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IOException expected) { 11076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 11176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 11276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 11376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testNoTopLevelObject() throws IOException { 11476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 11576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson new JsonReader(new StringReader("true")).nextBoolean(); 11676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IOException expected) { 11776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 11876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 11976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 12076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testCharacterUnescaping() throws IOException { 12176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson String json = "[\"a\"," 12276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"a\\\"\"," 12376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"\\\"\"," 12476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\":\"," 12576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\",\"," 12676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"\\b\"," 12776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"\\f\"," 12876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"\\n\"," 12976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"\\r\"," 13076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"\\t\"," 13176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\" \"," 13276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"\\\\\"," 13376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"{\"," 13476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"}\"," 13576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"[\"," 13676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"]\"," 13776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"\\u0000\"," 13876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"\\u0019\"," 13976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "\"\\u20AC\"" 14076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "]"; 14176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 14276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 14376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("a", reader.nextString()); 14476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("a\"", reader.nextString()); 14576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("\"", reader.nextString()); 14676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(":", reader.nextString()); 14776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(",", reader.nextString()); 14876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("\b", reader.nextString()); 14976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("\f", reader.nextString()); 15076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("\n", reader.nextString()); 15176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("\r", reader.nextString()); 15276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("\t", reader.nextString()); 15376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(" ", reader.nextString()); 15476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("\\", reader.nextString()); 15576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("{", reader.nextString()); 15676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("}", reader.nextString()); 15776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("[", reader.nextString()); 15876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("]", reader.nextString()); 15976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("\0", reader.nextString()); 16076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("\u0019", reader.nextString()); 16176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("\u20AC", reader.nextString()); 16276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endArray(); 16376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 16476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 16576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 16676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testIntegersWithFractionalPartSpecified() throws IOException { 16776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[1.0,1.0,1.0]")); 16876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 16976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(1.0, reader.nextDouble()); 17076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(1, reader.nextInt()); 17176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(1L, reader.nextLong()); 17276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 17376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 17476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testDoubles() throws IOException { 17576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson String json = "[-0.0," 17676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "1.0," 17776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "1.7976931348623157E308," 17876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "4.9E-324," 17976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "0.0," 18076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "-0.5," 18176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "2.2250738585072014E-308," 18276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "3.141592653589793," 1839d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "2.718281828459045," 1849d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "\"1.0\"," 1859d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "\"011.0\"," 1869d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "\"NaN\"," 1879d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "\"Infinity\"," 1889d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "\"-Infinity\"" 1899d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "]"; 19076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 19176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 19276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(-0.0, reader.nextDouble()); 19376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(1.0, reader.nextDouble()); 19476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(1.7976931348623157E308, reader.nextDouble()); 19576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(4.9E-324, reader.nextDouble()); 19676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(0.0, reader.nextDouble()); 19776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(-0.5, reader.nextDouble()); 19876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(2.2250738585072014E-308, reader.nextDouble()); 19976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(3.141592653589793, reader.nextDouble()); 20076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(2.718281828459045, reader.nextDouble()); 2019d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(1,0, reader.nextDouble()); 2029d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(11.0, reader.nextDouble()); 2039d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertTrue(Double.isNaN(reader.nextDouble())); 2049d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(Double.POSITIVE_INFINITY, reader.nextDouble()); 2059d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(Double.NEGATIVE_INFINITY, reader.nextDouble()); 20676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endArray(); 20776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 20876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 20976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 2109d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson public void testLenientDoubles() throws IOException { 2119d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson String json = "[" 2129d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "011.0," 2139d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "NaN," 2149d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "NAN," 2159d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "Infinity," 2169d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "INFINITY," 2179d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "-Infinity" 2189d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "]"; 21976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 2209d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.setLenient(true); 22176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 2229d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(11.0, reader.nextDouble()); 2239d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertTrue(Double.isNaN(reader.nextDouble())); 2249d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson try { 2259d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.nextDouble(); 2269d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson fail(); 2279d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } catch (NumberFormatException expected) { 2289d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 2299d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals("NAN", reader.nextString()); 2309d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(Double.POSITIVE_INFINITY, reader.nextDouble()); 23176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 23276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextDouble(); 23376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 23476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (NumberFormatException expected) { 23576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 2369d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals("INFINITY", reader.nextString()); 2379d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(Double.NEGATIVE_INFINITY, reader.nextDouble()); 2389d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.endArray(); 2399d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 2409d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 2419d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 2429d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson public void testBufferBoundary() throws IOException { 2439d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson char[] pad = new char[READER_BUFFER_SIZE - 8]; 2449d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson Arrays.fill(pad, '5'); 2459d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson String json = "[\"" + new String(pad) + "\",33333]"; 2469d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 2479d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.beginArray(); 2489d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(JsonToken.STRING, reader.peek()); 2499d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(new String(pad), reader.nextString()); 2509d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(JsonToken.NUMBER, reader.peek()); 2519d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(33333, reader.nextInt()); 2529d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 2539d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 2549d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson public void testTruncatedBufferBoundary() throws IOException { 2559d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson char[] pad = new char[READER_BUFFER_SIZE - 8]; 2569d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson Arrays.fill(pad, '5'); 2579d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson String json = "[\"" + new String(pad) + "\",33333"; 2589d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 2599d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.setLenient(true); 2609d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.beginArray(); 2619d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(JsonToken.STRING, reader.peek()); 2629d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(new String(pad), reader.nextString()); 2639d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(JsonToken.NUMBER, reader.peek()); 2649d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(33333, reader.nextInt()); 2659d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson try { 2669d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.endArray(); 2679d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson fail(); 2689d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } catch (IOException e) { 2699d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 2709d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 2719d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 2729d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson public void testLongestSupportedNumericLiterals() throws IOException { 2739d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson testLongNumericLiterals(READER_BUFFER_SIZE - 1, JsonToken.NUMBER); 2749d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 2759d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 2769d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson public void testLongerNumericLiterals() throws IOException { 2779d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson testLongNumericLiterals(READER_BUFFER_SIZE, JsonToken.STRING); 2789d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 2799d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 2809d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson private void testLongNumericLiterals(int length, JsonToken expectedToken) throws IOException { 2819d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson char[] longNumber = new char[length]; 2829d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson Arrays.fill(longNumber, '9'); 2839d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson longNumber[0] = '1'; 2849d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson longNumber[1] = '.'; 2859d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 2869d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson String json = "[" + new String(longNumber) + "]"; 2879d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 2889d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.setLenient(true); 2899d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.beginArray(); 2909d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(expectedToken, reader.peek()); 2919d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(2.0d, reader.nextDouble()); 2929d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.endArray(); 29376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 29476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 29576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testLongs() throws IOException { 29676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson String json = "[0,0,0," 29776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "1,1,1," 29876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "-1,-1,-1," 29976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson + "-9223372036854775808," 3009d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "9223372036854775807," 3019d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "5.0," 3029d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "1.0e2," 3039d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "\"011\"," 3049d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "\"5.0\"," 3059d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "\"1.0e2\"" 3069d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson + "]"; 30776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 30876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 30976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(0L, reader.nextLong()); 31076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(0, reader.nextInt()); 31176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(0.0, reader.nextDouble()); 31276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(1L, reader.nextLong()); 31376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(1, reader.nextInt()); 31476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(1.0, reader.nextDouble()); 31576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(-1L, reader.nextLong()); 31676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(-1, reader.nextInt()); 31776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(-1.0, reader.nextDouble()); 31876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 31976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextInt(); 32076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 32176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (NumberFormatException expected) { 32276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 32376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(Long.MIN_VALUE, reader.nextLong()); 32476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 32576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextInt(); 32676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 32776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (NumberFormatException expected) { 32876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 32976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(Long.MAX_VALUE, reader.nextLong()); 3309d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(5, reader.nextLong()); 3319d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(100, reader.nextLong()); 3329d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(11, reader.nextLong()); 3339d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(5, reader.nextLong()); 3349d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(100, reader.nextLong()); 33576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endArray(); 33676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 33776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 33876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 33976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson /** 34076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * This test fails because there's no double for 9223372036854775806, and 34176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson * our long parsing uses Double.parseDouble() for fractional values. 34276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson */ 34376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testHighPrecisionLong() throws IOException { 34476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson String json = "[9223372036854775806.000]"; 34576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 34676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 34776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(9223372036854775806L, reader.nextLong()); 34876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endArray(); 34976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 35076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 3519d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson public void testMatchingValidNumbers() throws IOException { 3529d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson String json = "[-1,99,-0,0,0e1,0e+1,0e-1,0E1,0E+1,0E-1,0.0,1.0,-1.0,1.0e0,1.0e+1,1.0e-1]"; 3539d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 3549d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.beginArray(); 3559d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson for (int i = 0; i < 16; i++) { 3569d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(JsonToken.NUMBER, reader.peek()); 3579d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.nextDouble(); 3589d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 3599d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.endArray(); 3609d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 3619d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 3629d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson public void testRecognizingInvalidNumbers() throws IOException { 3639d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson String json = "[-00,00,001,+1,1f,0x,0xf,0x0,0f1,0ee1,1..0,1e0.1,1.-01,1.+1,1.0x,1.0+]"; 3649d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 3659d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.setLenient(true); 3669d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.beginArray(); 3679d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson for (int i = 0; i < 16; i++) { 3689d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson assertEquals(JsonToken.STRING, reader.peek()); 3699d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.nextString(); 3709d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 3719d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.endArray(); 3729d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 3739d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 3749d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson public void testNonFiniteDouble() throws IOException { 3759d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson String json = "[NaN]"; 37676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 37776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 37876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 3799d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.nextDouble(); 38076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 3819d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } catch (IOException expected) { 38276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 3839d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 3849d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 3859d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson public void testNumberWithHexPrefix() throws IOException { 3869d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson String json = "[0x11]"; 3879d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 3889d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.beginArray(); 38976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 39076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextLong(); 39176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 3929d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } catch (IOException expected) { 39376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 3949d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } 3959d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson 3969d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson public void testNumberWithOctalPrefix() throws IOException { 3979d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson String json = "[01]"; 3989d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 3999d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.beginArray(); 40076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 4019d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson reader.nextInt(); 40276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 4039d9b4e70a1e7f9ffb6cedd8a86fdd926f2a28202Jesse Wilson } catch (IOException expected) { 40476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 40576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 40676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 40776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testBooleans() throws IOException { 40876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[true,false]")); 40976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 41076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(true, reader.nextBoolean()); 41176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(false, reader.nextBoolean()); 41276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endArray(); 41376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 41476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 41576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 41676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testMixedCaseLiterals() throws IOException { 41776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[True,TruE,False,FALSE,NULL,nulL]")); 41876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 41976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(true, reader.nextBoolean()); 42076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(true, reader.nextBoolean()); 42176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(false, reader.nextBoolean()); 42276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(false, reader.nextBoolean()); 42376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextNull(); 42476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextNull(); 42576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endArray(); 42676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 42776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 42876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 42976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testMissingValue() throws IOException { 43076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{\"a\":}")); 43176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginObject(); 43276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("a", reader.nextName()); 43376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 43476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextString(); 43576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 43676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IOException expected) { 43776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 43876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 43976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 44076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testPrematureEndOfInput() throws IOException { 44176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{\"a\":true,")); 44276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginObject(); 44376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("a", reader.nextName()); 44476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(true, reader.nextBoolean()); 44576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 44676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextName(); 44776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 44876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IOException expected) { 44976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 45076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 45176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 45276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testPrematurelyClosed() throws IOException { 45376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 45476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{\"a\":[]}")); 45576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginObject(); 45676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.close(); 45776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextName(); 45876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 45976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 46076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 46176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 46276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 46376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{\"a\":[]}")); 46476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.close(); 46576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginObject(); 46676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 46776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 46876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 46976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 47076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 47176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{\"a\":true}")); 47276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginObject(); 47376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextName(); 47476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.peek(); 47576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.close(); 47676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextBoolean(); 47776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 47876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 47976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 48076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 48176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 48276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testNextFailuresDoNotAdvance() throws IOException { 48376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{\"a\":true}")); 48476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginObject(); 48576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 48676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextString(); 48776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 48876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 48976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 49076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals("a", reader.nextName()); 49176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 49276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextName(); 49376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 49476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 49576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 49676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 49776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 49876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 49976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 50076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 50176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 50276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endArray(); 50376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 50476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 50576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 50676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 50776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginObject(); 50876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 50976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 51076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 51176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 51276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endObject(); 51376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 51476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 51576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 51676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(true, reader.nextBoolean()); 51776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 51876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextString(); 51976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 52076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 52176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 52276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 52376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextName(); 52476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 52576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 52676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 52776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 52876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 52976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 53076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 53176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 53276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 53376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endArray(); 53476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 53576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 53676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 53776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.endObject(); 53876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 53976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.close(); 54076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 54176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 54276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testStringNullIsNotNull() throws IOException { 54376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[\"null\"]")); 54476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 54576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 54676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextNull(); 54776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 54876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 54976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 55076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 55176d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson 55276d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson public void testNullLiteralIsNotAString() throws IOException { 55376d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[null]")); 55476d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.beginArray(); 55576d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson try { 55676d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson reader.nextString(); 55776d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson fail(); 55876d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } catch (IllegalStateException expected) { 55976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 56076d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson } 5611ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 5621ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testStrictNameValueSeparator() throws IOException { 5631ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{\"a\"=true}")); 5641ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 5651ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("a", reader.nextName()); 5661ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 5671ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextBoolean(); 5681ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 5691ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 5701ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 5711ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 5721ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("{\"a\"=>true}")); 5731ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 5741ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("a", reader.nextName()); 5751ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 5761ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextBoolean(); 5771ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 5781ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 5791ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 5801ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 5811ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 5821ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testLenientNameValueSeparator() throws IOException { 5831ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{\"a\"=true}")); 5841ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 5851ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 5861ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("a", reader.nextName()); 5871ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 5881ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 5891ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("{\"a\"=>true}")); 5901ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 5911ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 5921ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("a", reader.nextName()); 5931ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 5941ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 5951ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 5961ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testStrictComments() throws IOException { 5971ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[// comment \n true]")); 5981ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 5991ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 6001ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextBoolean(); 6011ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 6021ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 6031ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6041ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6051ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("[# comment \n true]")); 6061ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 6071ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 6081ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextBoolean(); 6091ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 6101ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 6111ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6121ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6131ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("[/* comment */ true]")); 6141ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 6151ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 6161ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextBoolean(); 6171ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 6181ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 6191ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6201ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6211ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6221ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testLenientComments() throws IOException { 6231ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[// comment \n true]")); 6241ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 6251ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 6261ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 6271ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6281ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("[# comment \n true]")); 6291ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 6301ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 6311ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 6321ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6331ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("[/* comment */ true]")); 6341ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 6351ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 6361ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 6371ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6381ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6391ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testStrictUnquotedNames() throws IOException { 6401ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{a:true}")); 6411ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 6421ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 6431ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextName(); 6441ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 6451ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 6461ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6471ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6481ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6491ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testLenientUnquotedNames() throws IOException { 6501ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{a:true}")); 6511ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 6521ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 6531ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("a", reader.nextName()); 6541ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6551ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6561ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testStrictSingleQuotedNames() throws IOException { 6571ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{'a':true}")); 6581ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 6591ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 6601ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextName(); 6611ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 6621ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 6631ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6641ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6651ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6661ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testLenientSingleQuotedNames() throws IOException { 6671ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{'a':true}")); 6681ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 6691ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 6701ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("a", reader.nextName()); 6711ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6721ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6731ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testStrictUnquotedStrings() throws IOException { 6741ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[a]")); 6751ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 6761ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 6771ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextString(); 6781ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 679eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } catch (MalformedJsonException expected) { 6801ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6811ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6821ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6831ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testLenientUnquotedStrings() throws IOException { 6841ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[a]")); 6851ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 6861ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 6871ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("a", reader.nextString()); 6881ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6891ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 6901ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testStrictSingleQuotedStrings() throws IOException { 6911ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("['a']")); 6921ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 6931ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 6941ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextString(); 6951ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 6961ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 6971ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6981ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 6991ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7001ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testLenientSingleQuotedStrings() throws IOException { 7011ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("['a']")); 7021ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 7031ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 7041ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("a", reader.nextString()); 7051ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7061ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7071ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testStrictSemicolonDelimitedArray() throws IOException { 7081ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[true;true]")); 7091ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 7101ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 7111ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextBoolean(); 7121ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextBoolean(); 7131ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 7141ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 7151ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7161ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7171ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7181ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testLenientSemicolonDelimitedArray() throws IOException { 7191ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[true;true]")); 7201ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 7211ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 7221ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 7231ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 7241ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7251ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7261ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testStrictSemicolonDelimitedNameValuePair() throws IOException { 7271ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{\"a\":true;\"b\":true}")); 7281ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 7291ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("a", reader.nextName()); 7301ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 7311ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextBoolean(); 7321ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextName(); 7331ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 7341ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 7351ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7361ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7371ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7381ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testLenientSemicolonDelimitedNameValuePair() throws IOException { 7391ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("{\"a\":true;\"b\":true}")); 7401ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 7411ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginObject(); 7421ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("a", reader.nextName()); 7431ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 7441ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals("b", reader.nextName()); 7451ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7461ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7471ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testStrictUnnecessaryArraySeparators() throws IOException { 7481ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[true,,true]")); 7491ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 7501ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 7511ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 7521ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextNull(); 7531ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 7541ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 7551ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7561ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7571ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("[,true]")); 7581ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 7591ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 7601ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextNull(); 7611ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 7621ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 7631ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7641ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7651ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("[true,]")); 7661ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 7671ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 7681ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 7691ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextNull(); 7701ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 7711ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 7721ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7731ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7741ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("[,]")); 7751ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 7761ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson try { 7771ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextNull(); 7781ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson fail(); 7791ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } catch (IOException expected) { 7801ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7811ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 7821ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7831ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson public void testLenientUnnecessaryArraySeparators() throws IOException { 7841ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[true,,true]")); 7851ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 7861ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 7871ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 7881ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextNull(); 7891ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 7901ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.endArray(); 7911ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7921ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("[,true]")); 7931ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 7941ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 7951ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextNull(); 7961ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 7971ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.endArray(); 7981ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 7991ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("[true,]")); 8001ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 8011ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 8021ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson assertEquals(true, reader.nextBoolean()); 8031ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextNull(); 8041ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.endArray(); 8051ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson 8061ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader = new JsonReader(new StringReader("[,]")); 8071ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.setLenient(true); 8081ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.beginArray(); 8091ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextNull(); 8101ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.nextNull(); 8111ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson reader.endArray(); 8121ba417140554dbd57602a1f4b453fc42363cf394Jesse Wilson } 813eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson 814eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson public void testStrictMultipleTopLevelValues() throws IOException { 815eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[] []")); 816eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.beginArray(); 817eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.endArray(); 818eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson try { 819eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.peek(); 820eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson fail(); 821eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } catch (IOException expected) { 822eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } 823eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } 824eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson 825eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson public void testLenientMultipleTopLevelValues() throws IOException { 826eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[] true {}")); 827eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.setLenient(true); 828eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.beginArray(); 829eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.endArray(); 830eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson assertEquals(true, reader.nextBoolean()); 831eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.beginObject(); 832eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.endObject(); 833eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson assertEquals(JsonToken.END_DOCUMENT, reader.peek()); 834eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } 835eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson 836eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson public void testStrictTopLevelValueType() { 837eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson JsonReader reader = new JsonReader(new StringReader("true")); 838eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson try { 839eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.nextBoolean(); 840eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson fail(); 841eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } catch (IOException expected) { 842eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } 843eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } 844eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson 845eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson public void testLenientTopLevelValueType() throws IOException { 846eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson JsonReader reader = new JsonReader(new StringReader("true")); 847eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.setLenient(true); 848eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson assertEquals(true, reader.nextBoolean()); 849eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } 850eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson 851eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson public void testStrictNonExecutePrefix() { 852eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson JsonReader reader = new JsonReader(new StringReader(")]}'\n []")); 853eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson try { 854eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson reader.beginArray(); 855eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson fail(); 856eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } catch (IOException expected) { 857eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } 858eb97c0ddc063176c26065fc6855188edf0c16e03Jesse Wilson } 859febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson 8607a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson public void testBomIgnoredAsFirstCharacterOfDocument() throws IOException { 8617a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson JsonReader reader = new JsonReader(new StringReader("\ufeff[]")); 8627a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson reader.beginArray(); 8637a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson reader.endArray(); 8647a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson } 8657a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson 8667a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson public void testBomForbiddenAsOtherCharacterInDocument() throws IOException { 8677a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson JsonReader reader = new JsonReader(new StringReader("[\ufeff]")); 8687a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson reader.beginArray(); 8697a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson try { 8707a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson reader.endArray(); 8717a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson fail(); 8727a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson } catch (IOException expected) { 8737a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson } 8747a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson } 8757a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson 876febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson public void testFailWithPosition() throws IOException { 877378c368f20d9746f07c8047172f5931abf69af8eJesse Wilson testFailWithPosition("Expected literal value at line 6 column 3", 878febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson "[\n\n\n\n\n0,}]"); 879febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson } 880febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson 8817a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson public void testFailWithPositionIsOffsetByBom() throws IOException { 8827a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson testFailWithPosition("Expected literal value at line 1 column 4", 8837a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson "\ufeff[0,}]"); 8847a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson } 8857a2c813d304b910b00046115efb0f462e6431a64Jesse Wilson 886febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson public void testFailWithPositionGreaterThanBufferSize() throws IOException { 887febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson String spaces = repeat(' ', 8192); 888febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson testFailWithPosition("Expected literal value at line 6 column 3", 889febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson "[\n\n" + spaces + "\n\n\n0,}]"); 890febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson } 891febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson 892febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson private void testFailWithPosition(String message, String json) throws IOException { 893febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson JsonReader reader = new JsonReader(new StringReader(json)); 894febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson reader.beginArray(); 895febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson reader.nextInt(); 896febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson try { 897febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson reader.peek(); 898febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson fail(); 899febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson } catch (IOException expected) { 900febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson assertEquals(message, expected.getMessage()); 901febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson } 902febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson } 903febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson 904febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson private String repeat(char c, int count) { 905febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson char[] array = new char[count]; 906febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson Arrays.fill(array, c); 907febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson return new String(array); 908febae4ed18953098fec2126c7f883213e14469c9Jesse Wilson } 90976d7e20a75d24afb2f5011a7646dbde8aaa52087Jesse Wilson} 910