14558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson/*
28d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * Copyright (C) 2010 The Android Open Source Project
38d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson *
48d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
58d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * you may not use this file except in compliance with the License.
68d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * You may obtain a copy of the License at
78d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson *
84558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson *      http://www.apache.org/licenses/LICENSE-2.0
98d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson *
108d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * Unless required by applicable law or agreed to in writing, software
118d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
128d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * See the License for the specific language governing permissions and
148d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * limitations under the License.
158d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson */
168d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
178d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilsonpackage org.json;
188d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
198d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilsonimport junit.framework.TestCase;
208d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
218d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson/**
224558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson * These tests checks self use calls. For the most part we doesn't attempt to
234558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson * cover self-use, except in those cases where our clean room implementation
244558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson * does it.
258d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson *
268d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * <p>This black box test was written without inspecting the non-free org.json
278d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson * sourcecode.
288d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson */
298d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilsonpublic class SelfUseTest extends TestCase {
308d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
318d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    private int objectPutCalls = 0;
328d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    private int objectGetCalls = 0;
338d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    private int objectOptCalls = 0;
348d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    private int objectOptTypeCalls = 0;
358d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    private int arrayPutCalls = 0;
368d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    private int arrayGetCalls = 0;
378d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    private int arrayOptCalls = 0;
388d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    private int arrayOptTypeCalls = 0;
394558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson    private int tokenerNextCalls = 0;
404558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson    private int tokenerNextValueCalls = 0;
418d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
428d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    private final JSONObject object = new JSONObject() {
438d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public JSONObject put(String name, Object value) throws JSONException {
448d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            objectPutCalls++;
458d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.put(name, value);
468d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
478d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public Object get(String name) throws JSONException {
488d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            objectGetCalls++;
498d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.get(name);
508d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
518d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public Object opt(String name) {
528d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            objectOptCalls++;
538d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.opt(name);
548d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
558d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public boolean optBoolean(String key, boolean defaultValue) {
568d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            objectOptTypeCalls++;
578d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.optBoolean(key, defaultValue);
588d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
598d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public double optDouble(String key, double defaultValue) {
608d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            objectOptTypeCalls++;
618d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.optDouble(key, defaultValue);
628d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
638d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public int optInt(String key, int defaultValue) {
648d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            objectOptTypeCalls++;
658d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.optInt(key, defaultValue);
668d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
678d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public long optLong(String key, long defaultValue) {
688d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            objectOptTypeCalls++;
698d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.optLong(key, defaultValue);
708d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
718d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public String optString(String key, String defaultValue) {
728d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            objectOptTypeCalls++;
738d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.optString(key, defaultValue);
748d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
758d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    };
768d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
778d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    private final JSONArray array = new JSONArray() {
788d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public JSONArray put(int index, Object value) throws JSONException {
798d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            arrayPutCalls++;
808d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.put(index, value);
818d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
828d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public Object get(int index) throws JSONException {
838d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            arrayGetCalls++;
848d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.get(index);
858d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
868d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public Object opt(int index) {
878d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            arrayOptCalls++;
888d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.opt(index);
898d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
908d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public boolean optBoolean(int index, boolean fallback) {
918d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            arrayOptTypeCalls++;
928d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.optBoolean(index, fallback);
938d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
948d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public double optDouble(int index, double fallback) {
958d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            arrayOptTypeCalls++;
968d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.optDouble(index, fallback);
978d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
988d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public long optLong(int index, long fallback) {
998d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            arrayOptTypeCalls++;
1008d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.optLong(index, fallback);
1018d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
1028d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public String optString(int index, String fallback) {
1038d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            arrayOptTypeCalls++;
1048d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.optString(index, fallback);
1058d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
1068d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        @Override public int optInt(int index, int fallback) {
1078d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            arrayOptTypeCalls++;
1088d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson            return super.optInt(index, fallback);
1098d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        }
1108d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    };
1118d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
1124558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson    private final JSONTokener tokener = new JSONTokener("{\"foo\": [true]}") {
1134558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson        @Override public char next() {
1144558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson            tokenerNextCalls++;
1154558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson            return super.next();
1164558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson        }
1174558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson        @Override public Object nextValue() throws JSONException {
1184558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson            tokenerNextValueCalls++;
1194558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson            return super.nextValue();
1204558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson        }
1214558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson    };
1224558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson
1234558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson
1248d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    public void testObjectPut() throws JSONException {
1258d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.putOpt("foo", "bar");
1268d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(1, objectPutCalls);
1278d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    }
1288d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
1298d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    public void testObjectAccumulate() throws JSONException {
1308d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.accumulate("foo", "bar");
1318d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(1, objectPutCalls);
1328d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    }
1338d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
1348d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    public void testObjectGetBoolean() throws JSONException {
1358d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.put("foo", "true");
1368d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.getBoolean("foo");
1378d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(1, objectGetCalls);
1388d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    }
1398d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
1408d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    public void testObjectOptType() throws JSONException {
1418d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.optBoolean("foo");
1428d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(1, objectOptCalls);
1438d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(1, objectOptTypeCalls);
1448d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.optDouble("foo");
1458d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(2, objectOptCalls);
1468d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(2, objectOptTypeCalls);
1478d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.optInt("foo");
1488d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(3, objectOptCalls);
1498d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(3, objectOptTypeCalls);
1508d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.optLong("foo");
1518d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(4, objectOptCalls);
1528d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(4, objectOptTypeCalls);
1538d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.optString("foo");
1548d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(5, objectOptCalls);
1558d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(5, objectOptTypeCalls);
1568d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    }
1578d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
1588d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    public void testToJSONArray() throws JSONException {
1598d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.put("foo", 5);
1608d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.put("bar", 10);
1618d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.put("foo");
1628d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.put("baz");
1638d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.put("bar");
1648d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        object.toJSONArray(array);
1658d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(3, arrayOptCalls);
1668d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(0, arrayOptTypeCalls);
1678d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(3, objectOptCalls);
1688d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(0, objectOptTypeCalls);
1698d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    }
1708d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
1718d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    public void testPutAtIndex() throws JSONException {
1728d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.put(10, false);
1738d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(1, arrayPutCalls);
1748d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    }
1758d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
1768d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    public void testIsNull() {
1778d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.isNull(5);
1788d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(1, arrayOptCalls);
1798d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    }
1808d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
1818d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    public void testArrayGetType() throws JSONException {
1828d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.put(true);
1838d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.getBoolean(0);
1848d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(1, arrayGetCalls);
1858d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    }
1868d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
1878d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    public void testArrayOptType() throws JSONException {
1888d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.optBoolean(3);
1898d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(1, arrayOptCalls);
1908d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(1, arrayOptTypeCalls);
1918d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.optDouble(3);
1928d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(2, arrayOptCalls);
1938d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(2, arrayOptTypeCalls);
1948d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.optInt(3);
1958d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(3, arrayOptCalls);
1968d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(3, arrayOptTypeCalls);
1978d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.optLong(3);
1988d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(4, arrayOptCalls);
1998d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(4, arrayOptTypeCalls);
2008d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.optString(3);
2018d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(5, arrayOptCalls);
2028d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(5, arrayOptTypeCalls);
2038d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    }
2048d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
2058d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    public void testToJSONObject() throws JSONException {
2068d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.put("foo");
2078d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.put("baz");
2088d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        array.put("bar");
2098d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        JSONArray values = new JSONArray();
2108d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        values.put(5.5d);
2118d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        values.put(11d);
2128d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        values.put(30);
2138d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        values.toJSONObject(array);
2148d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(3, arrayOptCalls);
2158d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson        assertEquals(0, arrayOptTypeCalls);
2168d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson    }
2178d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson
2184558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson    public void testNextExpecting() throws JSONException {
2194558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson        tokener.next('{');
2204558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson        assertEquals(1, tokenerNextCalls);
2214558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson        tokener.next('\"');
2224558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson        assertEquals(2, tokenerNextCalls);
2234558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson    }
2244558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson
2254558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson    public void testNextValue() throws JSONException {
2264558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson        tokener.nextValue();
2274558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson        assertEquals(4, tokenerNextValueCalls);
2284558195b4a7ee014517f1aa3c59bc6c561baa2efJesse Wilson    }
2298d7ee1eb0c3fe903d3546def87b6812754b1ba07Jesse Wilson}
230