blob: dd6fa7235cb61bd03b8253851a0f14f0e0f6d598 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.struts2.json;
import java.beans.IntrospectionException;
import java.io.StringReader;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.apache.struts2.util.TestUtils;
public class JSONPopulatorTest extends TestCase {
public void testNulls() throws IntrospectionException, InvocationTargetException, NoSuchMethodException,
JSONException, InstantiationException, IllegalAccessException {
JSONPopulator populator = new JSONPopulator();
OtherBean bean = new OtherBean();
Map jsonMap = new HashMap();
jsonMap.put("intField", null);
jsonMap.put("booleanField", null);
jsonMap.put("charField", null);
jsonMap.put("longField", null);
jsonMap.put("floatField", null);
jsonMap.put("doubleField", null);
jsonMap.put("byteField", null);
populator.populateObject(bean, jsonMap);
assertNull(bean.getIntField());
assertNull(bean.isBooleanField());
assertNull(bean.getCharField());
assertNull(bean.getLongField());
assertNull(bean.getDoubleField());
assertNull(bean.getByteField());
}
public void testPrimitiveBean() throws Exception {
StringReader stringReader = new StringReader(TestUtils.readContent(JSONInterceptorTest.class
.getResource("json-7.txt")));
Object json = JSONUtil.deserialize(stringReader);
assertNotNull(json);
assertTrue(json instanceof Map);
Map jsonMap = (Map) json;
JSONPopulator populator = new JSONPopulator();
Bean bean = new Bean();
populator.populateObject(bean, jsonMap);
assertTrue(bean.isBooleanField());
assertEquals("test\u000E\u000f", bean.getStringField());
assertEquals(10, bean.getIntField());
assertEquals('s', bean.getCharField());
assertEquals(10.1d, bean.getDoubleField(), 0d);
assertEquals(3, bean.getByteField());
assertEquals(new BigDecimal(111111.5d), bean.getBigDecimal());
assertEquals(new BigInteger("111111"), bean.getBigInteger());
}
public void testObjectBean() throws Exception {
String text = TestUtils.readContent(JSONInterceptorTest.class.getResource("json-7.txt"));
Object json = JSONUtil.deserialize(text);
assertNotNull(json);
assertTrue(json instanceof Map);
Map jsonMap = (Map) json;
JSONPopulator populator = new JSONPopulator();
WrapperClassBean bean = new WrapperClassBean();
populator.populateObject(bean, jsonMap);
assertEquals(Boolean.TRUE, bean.getBooleanField());
assertEquals(true, bean.isPrimitiveBooleanField1());
assertEquals(false, bean.isPrimitiveBooleanField2());
assertEquals(false, bean.isPrimitiveBooleanField3());
assertEquals("test\u000E\u000f", bean.getStringField());
assertEquals(new Integer(10), bean.getIntField());
assertEquals(0, bean.getNullIntField());
assertEquals(new Character('s'), bean.getCharField());
assertEquals(10.1d, bean.getDoubleField());
assertEquals(new Byte((byte) 3), bean.getByteField());
assertEquals(2, bean.getListField().size());
assertEquals("1", bean.getListField().get(0).getValue());
assertEquals("2", bean.getListField().get(1).getValue());
assertEquals(1, bean.getListMapField().size());
assertEquals(2, bean.getListMapField().get(0).size());
assertEquals(new Long(2073501), bean.getListMapField().get(0).get("id1"));
assertEquals(new Long(3), bean.getListMapField().get(0).get("id2"));
assertEquals(2, bean.getMapListField().size());
assertEquals(3, bean.getMapListField().get("id1").size());
assertEquals(new Long(2), bean.getMapListField().get("id1").get(1));
assertEquals(4, bean.getMapListField().get("id2").size());
assertEquals(new Long(3), bean.getMapListField().get("id2").get(1));
assertEquals(1, bean.getArrayMapField().length);
assertEquals(2, bean.getArrayMapField()[0].size());
assertEquals(new Long(2073501), bean.getArrayMapField()[0].get("id1"));
assertEquals(new Long(3), bean.getArrayMapField()[0].get("id2"));
assertEquals(3, bean.getSetField().size());
assertEquals(true, bean.getSetField().contains("A"));
assertEquals(true, bean.getSetField().contains("B"));
assertEquals(true, bean.getSetField().contains("C"));
assertEquals(3, bean.getSortedSetField().size());
assertEquals("A", bean.getSortedSetField().first());
assertEquals(true, bean.getSortedSetField().contains("B"));
assertEquals("C", bean.getSortedSetField().last());
assertEquals(3, bean.getNavigableSetField().size());
assertEquals("A", bean.getNavigableSetField().first());
assertEquals(true, bean.getNavigableSetField().contains("B"));
assertEquals("C", bean.getNavigableSetField().last());
assertEquals(3, bean.getQueueField().size());
assertEquals("A", bean.getQueueField().poll());
assertEquals("B", bean.getQueueField().poll());
assertEquals("C", bean.getQueueField().poll());
assertEquals(3, bean.getDequeField().size());
assertEquals("A", bean.getDequeField().pollFirst());
assertEquals("B", bean.getDequeField().pollFirst());
assertEquals("C", bean.getDequeField().pollFirst());
}
public void testObjectBeanWithStrings() throws Exception {
StringReader stringReader = new StringReader(TestUtils.readContent(JSONInterceptorTest.class
.getResource("json-8.txt")));
Object json = JSONUtil.deserialize(stringReader);
assertNotNull(json);
assertTrue(json instanceof Map);
Map jsonMap = (Map) json;
JSONPopulator populator = new JSONPopulator();
WrapperClassBean bean = new WrapperClassBean();
populator.populateObject(bean, jsonMap);
assertEquals(Boolean.TRUE, bean.getBooleanField());
assertEquals("test", bean.getStringField());
assertEquals(new Integer(10), bean.getIntField());
assertEquals(new Character('s'), bean.getCharField());
assertEquals(10.1d, bean.getDoubleField());
assertEquals(new Byte((byte) 3), bean.getByteField());
assertEquals(null, bean.getListField());
assertEquals(null, bean.getListMapField());
assertEquals(null, bean.getMapListField());
assertEquals(null, bean.getArrayMapField());
}
public void testInfiniteLoop() throws JSONException {
try {
JSONReader reader = new JSONReader();
reader.read("[1,\"a]");
fail("Should have thrown an exception");
} catch (JSONException e) {
// I can't get JUnit to ignore the exception
// @Test(expected = JSONException.class)
}
}
public void testParseBadInput() throws JSONException {
try {
JSONReader reader = new JSONReader();
reader.read("[1,\"a\"1]");
fail("Should have thrown an exception");
} catch (JSONException e) {
// I can't get JUnit to ignore the exception
// @Test(expected = JSONException.class)
}
}
}