| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.json; |
| |
| import junit.framework.TestCase; |
| |
| /** |
| * These tests checks self use calls. For the most part we doesn't attempt to |
| * cover self-use, except in those cases where our clean room implementation |
| * does it. |
| * |
| * <p>This black box test was written without inspecting the non-free org.json |
| * sourcecode. |
| */ |
| public class SelfUseTest extends TestCase { |
| |
| private int objectPutCalls = 0; |
| private int objectGetCalls = 0; |
| private int objectOptCalls = 0; |
| private int objectOptTypeCalls = 0; |
| private int arrayPutCalls = 0; |
| private int arrayGetCalls = 0; |
| private int arrayOptCalls = 0; |
| private int arrayOptTypeCalls = 0; |
| private int tokenerNextCalls = 0; |
| private int tokenerNextValueCalls = 0; |
| |
| private final JSONObject object = new JSONObject() { |
| @Override public JSONObject put(String name, Object value) throws JSONException { |
| objectPutCalls++; |
| return super.put(name, value); |
| } |
| @Override public Object get(String name) throws JSONException { |
| objectGetCalls++; |
| return super.get(name); |
| } |
| @Override public Object opt(String name) { |
| objectOptCalls++; |
| return super.opt(name); |
| } |
| @Override public boolean optBoolean(String key, boolean defaultValue) { |
| objectOptTypeCalls++; |
| return super.optBoolean(key, defaultValue); |
| } |
| @Override public double optDouble(String key, double defaultValue) { |
| objectOptTypeCalls++; |
| return super.optDouble(key, defaultValue); |
| } |
| @Override public int optInt(String key, int defaultValue) { |
| objectOptTypeCalls++; |
| return super.optInt(key, defaultValue); |
| } |
| @Override public long optLong(String key, long defaultValue) { |
| objectOptTypeCalls++; |
| return super.optLong(key, defaultValue); |
| } |
| @Override public String optString(String key, String defaultValue) { |
| objectOptTypeCalls++; |
| return super.optString(key, defaultValue); |
| } |
| }; |
| |
| private final JSONArray array = new JSONArray() { |
| @Override public JSONArray put(int index, Object value) throws JSONException { |
| arrayPutCalls++; |
| return super.put(index, value); |
| } |
| @Override public Object get(int index) throws JSONException { |
| arrayGetCalls++; |
| return super.get(index); |
| } |
| @Override public Object opt(int index) { |
| arrayOptCalls++; |
| return super.opt(index); |
| } |
| @Override public boolean optBoolean(int index, boolean fallback) { |
| arrayOptTypeCalls++; |
| return super.optBoolean(index, fallback); |
| } |
| @Override public double optDouble(int index, double fallback) { |
| arrayOptTypeCalls++; |
| return super.optDouble(index, fallback); |
| } |
| @Override public long optLong(int index, long fallback) { |
| arrayOptTypeCalls++; |
| return super.optLong(index, fallback); |
| } |
| @Override public String optString(int index, String fallback) { |
| arrayOptTypeCalls++; |
| return super.optString(index, fallback); |
| } |
| @Override public int optInt(int index, int fallback) { |
| arrayOptTypeCalls++; |
| return super.optInt(index, fallback); |
| } |
| }; |
| |
| private final JSONTokener tokener = new JSONTokener("{\"foo\": [true]}") { |
| @Override public char next() { |
| tokenerNextCalls++; |
| return super.next(); |
| } |
| @Override public Object nextValue() throws JSONException { |
| tokenerNextValueCalls++; |
| return super.nextValue(); |
| } |
| }; |
| |
| |
| public void testObjectPut() throws JSONException { |
| object.putOpt("foo", "bar"); |
| assertEquals(1, objectPutCalls); |
| } |
| |
| public void testObjectAccumulate() throws JSONException { |
| object.accumulate("foo", "bar"); |
| assertEquals(1, objectPutCalls); |
| } |
| |
| public void testObjectGetBoolean() throws JSONException { |
| object.put("foo", "true"); |
| object.getBoolean("foo"); |
| assertEquals(1, objectGetCalls); |
| } |
| |
| public void testObjectOptType() throws JSONException { |
| object.optBoolean("foo"); |
| assertEquals(1, objectOptCalls); |
| assertEquals(1, objectOptTypeCalls); |
| object.optDouble("foo"); |
| assertEquals(2, objectOptCalls); |
| assertEquals(2, objectOptTypeCalls); |
| object.optInt("foo"); |
| assertEquals(3, objectOptCalls); |
| assertEquals(3, objectOptTypeCalls); |
| object.optLong("foo"); |
| assertEquals(4, objectOptCalls); |
| assertEquals(4, objectOptTypeCalls); |
| object.optString("foo"); |
| assertEquals(5, objectOptCalls); |
| assertEquals(5, objectOptTypeCalls); |
| } |
| |
| public void testToJSONArray() throws JSONException { |
| object.put("foo", 5); |
| object.put("bar", 10); |
| array.put("foo"); |
| array.put("baz"); |
| array.put("bar"); |
| object.toJSONArray(array); |
| assertEquals(3, arrayOptCalls); |
| assertEquals(0, arrayOptTypeCalls); |
| assertEquals(3, objectOptCalls); |
| assertEquals(0, objectOptTypeCalls); |
| } |
| |
| public void testPutAtIndex() throws JSONException { |
| array.put(10, false); |
| assertEquals(1, arrayPutCalls); |
| } |
| |
| public void testIsNull() { |
| array.isNull(5); |
| assertEquals(1, arrayOptCalls); |
| } |
| |
| public void testArrayGetType() throws JSONException { |
| array.put(true); |
| array.getBoolean(0); |
| assertEquals(1, arrayGetCalls); |
| } |
| |
| public void testArrayOptType() throws JSONException { |
| array.optBoolean(3); |
| assertEquals(1, arrayOptCalls); |
| assertEquals(1, arrayOptTypeCalls); |
| array.optDouble(3); |
| assertEquals(2, arrayOptCalls); |
| assertEquals(2, arrayOptTypeCalls); |
| array.optInt(3); |
| assertEquals(3, arrayOptCalls); |
| assertEquals(3, arrayOptTypeCalls); |
| array.optLong(3); |
| assertEquals(4, arrayOptCalls); |
| assertEquals(4, arrayOptTypeCalls); |
| array.optString(3); |
| assertEquals(5, arrayOptCalls); |
| assertEquals(5, arrayOptTypeCalls); |
| } |
| |
| public void testToJSONObject() throws JSONException { |
| array.put("foo"); |
| array.put("baz"); |
| array.put("bar"); |
| JSONArray values = new JSONArray(); |
| values.put(5.5d); |
| values.put(11d); |
| values.put(30); |
| values.toJSONObject(array); |
| assertEquals(3, arrayOptCalls); |
| assertEquals(0, arrayOptTypeCalls); |
| } |
| |
| public void testNextExpecting() throws JSONException { |
| tokener.next('{'); |
| assertEquals(1, tokenerNextCalls); |
| tokener.next('\"'); |
| assertEquals(2, tokenerNextCalls); |
| } |
| |
| public void testNextValue() throws JSONException { |
| tokener.nextValue(); |
| assertEquals(4, tokenerNextValueCalls); |
| } |
| } |