blob: 28a6889139f528d394ffef549d250d241e3ec44a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010-2015 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.commons;
import static org.junit.Assert.*;
import org.junit.Test;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
@SuppressWarnings("nls")
public class JSONUtilsTest {
private static final String TEST_JSON =
"{\"a\":{\"x\":123,\"b\":{\"c\":\"foo\",\"d\":4711,\"e\":[\"item\"],\"f\":\"42\"}},\"y\":\"bar\"}";
private static final JsonObject TEST_OBJECT = JSONUtils.jsonObjectFromString(TEST_JSON);
@Test
public void testGetValue() throws Exception {
JsonElement elem = JSONUtils.getValue(TEST_OBJECT, "a.b.c");
assertStringValue(elem, "foo");
elem = JSONUtils.getValue(TEST_OBJECT, "a.b.d");
assertIntegerValue(elem, 4711);
elem = JSONUtils.getValue(TEST_OBJECT, "a.b.e");
assertTrue(elem.isJsonArray());
assertEquals("item", elem.getAsJsonArray().get(0).getAsString());
elem = JSONUtils.getValue(TEST_OBJECT, "a.b.f");
assertStringValue(elem, "42");
elem = JSONUtils.getValue(TEST_OBJECT, "a.x");
assertIntegerValue(elem, 123);
elem = JSONUtils.getValue(TEST_OBJECT, "a.b");
assertTrue(elem.isJsonObject());
elem = JSONUtils.getValue(TEST_OBJECT, "y");
assertStringValue(elem, "bar");
elem = JSONUtils.getValue(TEST_OBJECT, "a");
assertTrue(elem.isJsonObject());
elem = JSONUtils.getValue(TEST_OBJECT, "a.");
assertTrue(elem.isJsonObject());
assertEquals(TEST_OBJECT, JSONUtils.getValue(TEST_OBJECT, ""));
assertEquals(TEST_OBJECT, JSONUtils.getValue(TEST_OBJECT, null));
assertNull(JSONUtils.getValue(TEST_OBJECT, "a.b.x"));
assertNull(JSONUtils.getValue(TEST_OBJECT, "z"));
assertNull(JSONUtils.getValue(TEST_OBJECT, ".a"));
}
@Test
public void testGetPrimitive() throws Exception {
JsonPrimitive elem = JSONUtils.getPrimitive(TEST_OBJECT, "a.b.c");
assertStringValue(elem, "foo");
elem = JSONUtils.getPrimitive(TEST_OBJECT, "a.b.d");
assertIntegerValue(elem, 4711);
assertNull(JSONUtils.getPrimitive(TEST_OBJECT, "a.b.e"));
elem = JSONUtils.getPrimitive(TEST_OBJECT, "a.b.f");
assertStringValue(elem, "42");
elem = JSONUtils.getPrimitive(TEST_OBJECT, "a.x");
assertIntegerValue(elem, 123);
assertNull(JSONUtils.getPrimitive(TEST_OBJECT, "a.b"));
elem = JSONUtils.getPrimitive(TEST_OBJECT, "y");
assertStringValue(elem, "bar");
assertNull(JSONUtils.getPrimitive(TEST_OBJECT, "a"));
assertNull(JSONUtils.getPrimitive(TEST_OBJECT, "a."));
assertNull(JSONUtils.getPrimitive(TEST_OBJECT, ""));
assertNull(JSONUtils.getPrimitive(TEST_OBJECT, null));
assertNull(JSONUtils.getPrimitive(TEST_OBJECT, "a.b.x"));
assertNull(JSONUtils.getPrimitive(TEST_OBJECT, "z"));
assertNull(JSONUtils.getPrimitive(TEST_OBJECT, ".a"));
}
@Test
public void testGetString() throws Exception {
String s = JSONUtils.getString(TEST_JSON, "a.b.c");
assertEquals("foo", s);
s = JSONUtils.getString(TEST_JSON, "a.b.d");
assertEquals("4711", s);
assertNull(JSONUtils.getString(TEST_JSON, "a.b.e"));
s = JSONUtils.getString(TEST_JSON, "a.b.f");
assertEquals("42", s);
s = JSONUtils.getString(TEST_JSON, "a.x");
assertEquals("123", s);
assertNull(JSONUtils.getString(TEST_JSON, "a.b"));
s = JSONUtils.getString(TEST_JSON, "y");
assertEquals("bar", s);
assertNull(JSONUtils.getString(TEST_JSON, "a"));
assertNull(JSONUtils.getString(TEST_JSON, "a."));
assertNull(JSONUtils.getString(TEST_JSON, ""));
assertNull(JSONUtils.getString(TEST_JSON, null));
assertNull(JSONUtils.getString(TEST_JSON, "a.b.x"));
assertNull(JSONUtils.getString(TEST_JSON, "z"));
assertNull(JSONUtils.getString(TEST_JSON, ".a"));
}
@Test
public void testGetInteger() throws Exception {
Integer i = JSONUtils.getInteger(TEST_JSON, "a.b.c");
assertNull(i);
i = JSONUtils.getInteger(TEST_JSON, "a.b.d");
assertEquals(4711, i.intValue());
assertNull(JSONUtils.getInteger(TEST_JSON, "a.b.e"));
i = JSONUtils.getInteger(TEST_JSON, "a.b.f");
assertEquals(42, i.intValue());
i = JSONUtils.getInteger(TEST_JSON, "a.x");
assertEquals(123, i.intValue());
assertNull(JSONUtils.getInteger(TEST_JSON, "a.b"));
assertNull(JSONUtils.getInteger(TEST_JSON, "y"));
assertNull(JSONUtils.getInteger(TEST_JSON, "a"));
assertNull(JSONUtils.getInteger(TEST_JSON, "a."));
assertNull(JSONUtils.getInteger(TEST_JSON, ""));
assertNull(JSONUtils.getInteger(TEST_JSON, null));
assertNull(JSONUtils.getInteger(TEST_JSON, "a.b.x"));
assertNull(JSONUtils.getInteger(TEST_JSON, "z"));
assertNull(JSONUtils.getInteger(TEST_JSON, ".a"));
}
private void assertPrimitiveValue(JsonElement elem) {
assertNotNull(elem);
assertTrue(elem.isJsonPrimitive());
}
private void assertStringValue(JsonElement elem, String value) {
assertPrimitiveValue(elem);
assertTrue(((JsonPrimitive)elem).isString());
assertEquals(value, ((JsonPrimitive)elem).getAsString());
}
private void assertIntegerValue(JsonElement elem, int value) {
assertPrimitiveValue(elem);
assertTrue(((JsonPrimitive)elem).isNumber());
assertEquals(value, ((JsonPrimitive)elem).getAsInt());
}
}