151a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson/*
253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * Copyright (C) 2010 The Android Open Source Project
353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson *
453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * you may not use this file except in compliance with the License.
653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * You may obtain a copy of the License at
753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson *
851a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson *      http://www.apache.org/licenses/LICENSE-2.0
953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson *
1053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * Unless required by applicable law or agreed to in writing, software
1153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
1253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * See the License for the specific language governing permissions and
1453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * limitations under the License.
1553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson */
1653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
1753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilsonpackage org.json;
1853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
1953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilsonimport junit.framework.TestCase;
2053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
2153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson/**
2251a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson * These tests checks self use calls. For the most part we doesn't attempt to
2351a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson * cover self-use, except in those cases where our clean room implementation
2451a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson * does it.
2553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson *
2653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * <p>This black box test was written without inspecting the non-free org.json
2753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson * sourcecode.
2853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson */
2953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilsonpublic class SelfUseTest extends TestCase {
3053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
3153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    private int objectPutCalls = 0;
3253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    private int objectGetCalls = 0;
3353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    private int objectOptCalls = 0;
3453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    private int objectOptTypeCalls = 0;
3553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    private int arrayPutCalls = 0;
3653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    private int arrayGetCalls = 0;
3753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    private int arrayOptCalls = 0;
3853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    private int arrayOptTypeCalls = 0;
3951a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson    private int tokenerNextCalls = 0;
4051a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson    private int tokenerNextValueCalls = 0;
4153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
4253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    private final JSONObject object = new JSONObject() {
4353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public JSONObject put(String name, Object value) throws JSONException {
4453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            objectPutCalls++;
4553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.put(name, value);
4653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
4753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public Object get(String name) throws JSONException {
4853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            objectGetCalls++;
4953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.get(name);
5053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
5153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public Object opt(String name) {
5253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            objectOptCalls++;
5353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.opt(name);
5453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
5553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public boolean optBoolean(String key, boolean defaultValue) {
5653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            objectOptTypeCalls++;
5753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.optBoolean(key, defaultValue);
5853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
5953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public double optDouble(String key, double defaultValue) {
6053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            objectOptTypeCalls++;
6153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.optDouble(key, defaultValue);
6253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
6353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public int optInt(String key, int defaultValue) {
6453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            objectOptTypeCalls++;
6553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.optInt(key, defaultValue);
6653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
6753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public long optLong(String key, long defaultValue) {
6853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            objectOptTypeCalls++;
6953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.optLong(key, defaultValue);
7053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
7153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public String optString(String key, String defaultValue) {
7253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            objectOptTypeCalls++;
7353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.optString(key, defaultValue);
7453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
7553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    };
7653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
7753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    private final JSONArray array = new JSONArray() {
7853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public JSONArray put(int index, Object value) throws JSONException {
7953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            arrayPutCalls++;
8053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.put(index, value);
8153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
8253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public Object get(int index) throws JSONException {
8353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            arrayGetCalls++;
8453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.get(index);
8553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
8653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public Object opt(int index) {
8753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            arrayOptCalls++;
8853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.opt(index);
8953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
9053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public boolean optBoolean(int index, boolean fallback) {
9153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            arrayOptTypeCalls++;
9253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.optBoolean(index, fallback);
9353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
9453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public double optDouble(int index, double fallback) {
9553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            arrayOptTypeCalls++;
9653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.optDouble(index, fallback);
9753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
9853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public long optLong(int index, long fallback) {
9953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            arrayOptTypeCalls++;
10053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.optLong(index, fallback);
10153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
10253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public String optString(int index, String fallback) {
10353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            arrayOptTypeCalls++;
10453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.optString(index, fallback);
10553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
10653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        @Override public int optInt(int index, int fallback) {
10753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            arrayOptTypeCalls++;
10853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson            return super.optInt(index, fallback);
10953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        }
11053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    };
11153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
11251a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson    private final JSONTokener tokener = new JSONTokener("{\"foo\": [true]}") {
11351a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson        @Override public char next() {
11451a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson            tokenerNextCalls++;
11551a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson            return super.next();
11651a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson        }
11751a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson        @Override public Object nextValue() throws JSONException {
11851a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson            tokenerNextValueCalls++;
11951a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson            return super.nextValue();
12051a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson        }
12151a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson    };
12251a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson
12351a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson
12453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    public void testObjectPut() throws JSONException {
12553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.putOpt("foo", "bar");
12653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(1, objectPutCalls);
12753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    }
12853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
12953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    public void testObjectAccumulate() throws JSONException {
13053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.accumulate("foo", "bar");
13153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(1, objectPutCalls);
13253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    }
13353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
13453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    public void testObjectGetBoolean() throws JSONException {
13553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.put("foo", "true");
13653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.getBoolean("foo");
13753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(1, objectGetCalls);
13853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    }
13953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
14053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    public void testObjectOptType() throws JSONException {
14153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.optBoolean("foo");
14253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(1, objectOptCalls);
14353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(1, objectOptTypeCalls);
14453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.optDouble("foo");
14553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(2, objectOptCalls);
14653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(2, objectOptTypeCalls);
14753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.optInt("foo");
14853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(3, objectOptCalls);
14953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(3, objectOptTypeCalls);
15053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.optLong("foo");
15153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(4, objectOptCalls);
15253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(4, objectOptTypeCalls);
15353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.optString("foo");
15453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(5, objectOptCalls);
15553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(5, objectOptTypeCalls);
15653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    }
15753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
15853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    public void testToJSONArray() throws JSONException {
15953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.put("foo", 5);
16053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.put("bar", 10);
16153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.put("foo");
16253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.put("baz");
16353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.put("bar");
16453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        object.toJSONArray(array);
16553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(3, arrayOptCalls);
16653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(0, arrayOptTypeCalls);
16753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(3, objectOptCalls);
16853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(0, objectOptTypeCalls);
16953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    }
17053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
17153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    public void testPutAtIndex() throws JSONException {
17253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.put(10, false);
17353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(1, arrayPutCalls);
17453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    }
17553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
17653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    public void testIsNull() {
17753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.isNull(5);
17853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(1, arrayOptCalls);
17953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    }
18053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
18153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    public void testArrayGetType() throws JSONException {
18253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.put(true);
18353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.getBoolean(0);
18453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(1, arrayGetCalls);
18553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    }
18653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
18753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    public void testArrayOptType() throws JSONException {
18853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.optBoolean(3);
18953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(1, arrayOptCalls);
19053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(1, arrayOptTypeCalls);
19153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.optDouble(3);
19253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(2, arrayOptCalls);
19353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(2, arrayOptTypeCalls);
19453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.optInt(3);
19553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(3, arrayOptCalls);
19653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(3, arrayOptTypeCalls);
19753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.optLong(3);
19853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(4, arrayOptCalls);
19953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(4, arrayOptTypeCalls);
20053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.optString(3);
20153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(5, arrayOptCalls);
20253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(5, arrayOptTypeCalls);
20353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    }
20453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
20553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    public void testToJSONObject() throws JSONException {
20653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.put("foo");
20753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.put("baz");
20853c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        array.put("bar");
20953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        JSONArray values = new JSONArray();
21053c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        values.put(5.5d);
21153c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        values.put(11d);
21253c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        values.put(30);
21353c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        values.toJSONObject(array);
21453c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(3, arrayOptCalls);
21553c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson        assertEquals(0, arrayOptTypeCalls);
21653c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson    }
21753c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson
21851a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson    public void testNextExpecting() throws JSONException {
21951a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson        tokener.next('{');
22051a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson        assertEquals(1, tokenerNextCalls);
22151a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson        tokener.next('\"');
22251a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson        assertEquals(2, tokenerNextCalls);
22351a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson    }
22451a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson
22551a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson    public void testNextValue() throws JSONException {
22651a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson        tokener.nextValue();
22751a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson        assertEquals(4, tokenerNextValueCalls);
22851a095f0bc7aadfcc7e6b3873b97c050c523d102Jesse Wilson    }
22953c13031e4b68645b0ca7c7a335aae41d0b84276Jesse Wilson}
230