/* * Copyright (C) 2014 SCVNGR, Inc. d/b/a LevelUp * * 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 com.scvngr.levelup.core.model.util; import android.test.suitebuilder.annotation.SmallTest; import com.scvngr.levelup.core.test.SupportAndroidTestCase; import org.json.JSONException; import org.json.JSONObject; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * Tests {@link com.scvngr.levelup.core.model.util.JsonUtils}. */ public final class JsonUtilsTest extends SupportAndroidTestCase { /** * Tests {@link com.scvngr.levelup.core.model.util.JsonUtils#optString(org.json.JSONObject, String)}. * * @throws org.json.JSONException if there's a parse error. */ @SmallTest public void testOptString() throws JSONException { final JSONObject object1 = new JSONObject("{ 'test': null }"); // JsonObject returns a non-null value, we shouldn't. assertNotNull(object1.optString("test")); assertNull(JsonUtils.optString(object1, "test")); final JSONObject object2 = new JSONObject("{ 'test': 'null' }"); assertEquals("null", JsonUtils.optString(object2, "test")); } /** * Tests {@link com.scvngr.levelup.core.model.util.JsonUtils#optIntegerSet(org.json.JSONObject, String)}. * * @throws org.json.JSONException if there's a parse error. */ public void testIntegerSet() throws JSONException { final JSONObject object1 = new JSONObject("{ 'test': null }"); Set<Integer> ints = JsonUtils.optIntegerSet(object1, "test"); assertNull(ints); final JSONObject object2 = new JSONObject("{ 'test': [2,3,5,23] }"); ints = JsonUtils.optIntegerSet(object2, "test"); assertNotNull(ints); assertEquals(new HashSet<Integer>(Arrays.asList(2, 3, 5, 23)), ints); assertEquals(new HashSet<Integer>(Arrays.asList(123)), JsonUtils.optIntegerSet(new JSONObject("{ 'test': [123] }"), "test")); assertEquals(new HashSet<Integer>(Arrays.asList(0)), JsonUtils.optIntegerSet(new JSONObject("{ 'test': [0] }"), "test")); assertEquals(new HashSet<Integer>(Arrays.asList(1)), JsonUtils.optIntegerSet(new JSONObject("{ 'test': [1,1,1] }"), "test")); assertEquals(Collections.emptySet(), JsonUtils.optIntegerSet(new JSONObject("{ 'test': [] }"), "test")); } /** * Tests {@link com.scvngr.levelup.core.model.util.JsonUtils#optStringSet(org.json.JSONObject, String)}. * * @throws org.json.JSONException if there's a parse error. */ public void testStringSet() throws JSONException { final JSONObject object1 = new JSONObject("{ 'test': null }"); Set<String> strings = JsonUtils.optStringSet(object1, "test"); assertNull(strings); final JSONObject object2 = new JSONObject("{ 'test': ['foo','bar', 'baz'] }"); strings = JsonUtils.optStringSet(object2, "test"); assertNotNull(strings); assertEquals(new HashSet<String>(Arrays.asList("foo", "bar", "baz")), strings); assertEquals(new HashSet<String>(Arrays.asList("foo")), JsonUtils.optStringSet(new JSONObject("{ 'test': ['foo'] }"), "test")); assertEquals(new HashSet<String>(Arrays.asList("")), JsonUtils.optStringSet(new JSONObject("{ 'test': [''] }"), "test")); assertEquals(new HashSet<String>(Arrays.asList("foo")), JsonUtils.optStringSet(new JSONObject("{ 'test': ['foo','foo','foo'] }"), "test")); assertEquals(Collections.emptySet(), JsonUtils.optStringSet(new JSONObject("{ 'test': [] }"), "test")); } @SmallTest public void testOptMonetaryValue() throws JSONException { final JSONObject json = new JSONObject("{ 'amount' : 7000 }"); JsonUtils.optMonetaryValue(json, "amount"); } }