/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.ld.util;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.kuali.kfs.module.ld.businessobject.LedgerBalance;
import org.kuali.kfs.sys.ObjectUtil;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.core.api.util.type.KualiInteger;
public class ObjectUtilTest extends TestCase {
public void testBuildObject() throws Exception {
SimpleAddress targetAddress = null;
SimpleAddress sourceAddress = new SimpleAddress("1000 Main Street", "Source City", "Kuali", 10000);
List<String> propertyList = new ArrayList<String>();
targetAddress = new SimpleAddress(null, null, null, 9999);
ObjectUtil.buildObject(targetAddress, sourceAddress);
assertTrue(targetAddress.equals(sourceAddress));
targetAddress = new SimpleAddress(null, null, null, 9999);
propertyList.clear();
propertyList.add("street");
ObjectUtil.buildObject(targetAddress, sourceAddress, propertyList);
assertEquals(sourceAddress.getStreet(), targetAddress.getStreet());
assertFalse(targetAddress.equals(sourceAddress));
targetAddress = new SimpleAddress(null, null, null, 9999);
String[] sourceAddressArray = { "1000 Main Street", "Source City", "Kuali", "10000" };
propertyList.clear();
propertyList.add("street");
propertyList.add("city");
propertyList.add("state");
ObjectUtil.buildObject(targetAddress, sourceAddressArray, propertyList);
assertFalse(targetAddress.equals(sourceAddress));
propertyList.add("zip");
ObjectUtil.buildObject(targetAddress, sourceAddressArray, propertyList);
assertTrue(targetAddress.equals(sourceAddress));
}
public void testCompareObject() throws Exception {
SimpleAddress targetAddress = null;
SimpleAddress sourceAddress = new SimpleAddress("1000 Main Street", "Source City", "Kuali", 10000);
List<String> propertyList = new ArrayList<String>();
propertyList.add("street");
propertyList.add("city");
propertyList.add("state");
propertyList.add("zip");
targetAddress = new SimpleAddress(null, null, null, 9999);
assertFalse(ObjectUtil.equals(targetAddress, sourceAddress, propertyList));
targetAddress = new SimpleAddress("1000 Main Street", "Source City", "Kuali", 10000);
assertTrue(ObjectUtil.equals(targetAddress, sourceAddress, propertyList));
targetAddress = sourceAddress;
assertTrue(ObjectUtil.equals(targetAddress, sourceAddress, propertyList));
targetAddress = new SimpleAddress(null, null, null, 9999);
ObjectUtil.buildObject(targetAddress, sourceAddress);
assertTrue(ObjectUtil.equals(targetAddress, sourceAddress, propertyList));
sourceAddress.setZip(2000);
assertFalse(ObjectUtil.equals(targetAddress, sourceAddress, propertyList));
propertyList.remove("zip");
assertTrue(ObjectUtil.equals(targetAddress, sourceAddress, propertyList));
}
public void testBuildPropertyMap() throws Exception {
SimpleAddress address = new SimpleAddress("1000 Main Street", "Source City", "Kuali", 10000);
List<String> propertyList = new ArrayList<String>();
propertyList.add("street");
propertyList.add("city");
propertyList.add("state");
Map propertyMap = ObjectUtil.buildPropertyMap(address, propertyList);
assertEquals(address.getStreet(), propertyMap.get("street"));
assertEquals(address.getCity(), propertyMap.get("city"));
assertEquals(address.getState(), propertyMap.get("state"));
assertFalse(address.getZip().equals(propertyMap.get("zip")));
propertyList.add("zip");
propertyMap = ObjectUtil.buildPropertyMap(address, propertyList);
assertEquals(address.getZip(), propertyMap.get("zip"));
}
public void testBuildPropertyMapWithBlankValues() throws Exception {
SimpleAddress address = new SimpleAddress("", "", null, 1000);
List<String> propertyList = new ArrayList<String>();
propertyList.add("street");
propertyList.add("city");
propertyList.add("state");
propertyList.add("zip");
Map propertyMap = ObjectUtil.buildPropertyMap(address, propertyList);
assertEquals(null, propertyMap.get("street"));
assertEquals(null, propertyMap.get("city"));
assertEquals(null, propertyMap.get("state"));
assertEquals(address.getZip(), propertyMap.get("zip"));
assertEquals(1, propertyMap.size());
}
public void testConvertLineToBusinessObjectBasedOnDeliminatorAndKeyList() throws Exception {
String delim = ";";
String line = "1000 Main Street" + delim + "Source City" + delim + "Kuali" + delim + "10000";
List<String> propertyList = new ArrayList<String>();
propertyList.add("street");
propertyList.add("city");
propertyList.add("state");
propertyList.add("zip");
SimpleAddress address = new SimpleAddress();
ObjectUtil.convertLineToBusinessObject(address, line, delim, propertyList);
assertEquals(address.getStreet(), "1000 Main Street");
assertEquals(address.getCity(), "Source City");
assertEquals(address.getState(), "Kuali");
assertEquals(address.getZip(), new Integer(10000));
}
public void testConvertLineToBusinessObjectBasedOnDeliminatorAndKeyString() throws Exception {
String delim = ";";
String line = "1000 Main Street" + delim + "Source City" + delim + "Kuali" + delim + "10000" + delim;
String fieldNames = "street" + delim + "city" + delim + "state" + delim + "zip" + delim;
SimpleAddress address = new SimpleAddress();
ObjectUtil.convertLineToBusinessObject(address, line, delim, fieldNames);
assertEquals("1000 Main Street", address.getStreet());
assertEquals("Source City", address.getCity());
assertEquals("Kuali", address.getState());
assertEquals(new Integer(10000), address.getZip());
}
public void testConvertLineToBusinessObjectAtCompressedFormat() throws Exception {
String delim = ";";
String line = "" + delim + "" + delim + "" + delim + "" + delim;
String fieldNames = "street" + delim + "city" + delim + "state" + delim + "zip" + delim;
SimpleAddress address = new SimpleAddress("", "", "", null);
ObjectUtil.convertLineToBusinessObject(address, line, delim, fieldNames);
assertEquals(null, address.getStreet());
assertEquals(null, address.getCity());
assertEquals(null, address.getState());
assertEquals(null, address.getZip());
}
public void testConvertLineToBusinessObjectBasedOnFieldLength() throws Exception {
int[] fieldLength = { 6, 4, 5, 5 };
String line = "StreetCityState10000";
List<String> propertyList = new ArrayList<String>();
propertyList.add("street");
propertyList.add("city");
propertyList.add("state");
propertyList.add("zip");
SimpleAddress address = new SimpleAddress();
ObjectUtil.convertLineToBusinessObject(address, line, fieldLength, propertyList);
assertEquals("Street", address.getStreet());
assertEquals("City", address.getCity());
assertEquals("State", address.getState());
assertEquals(new Integer(10000), address.getZip());
}
public void testConvertLineToBusinessObjectBasedOnFieldLength_WithWhiteSpace() throws Exception {
int[] fieldLength = { 8, 6, 7, 7 };
String line = "Street City State 10000 ";
List<String> propertyList = new ArrayList<String>();
propertyList.add("street");
propertyList.add("city");
propertyList.add("state");
propertyList.add("zip");
SimpleAddress address = new SimpleAddress();
ObjectUtil.convertLineToBusinessObject(address, line, fieldLength, propertyList);
assertEquals("Street", address.getStreet());
assertEquals("City", address.getCity());
assertEquals("State", address.getState());
assertEquals(new Integer(10000), address.getZip());
}
public void testSplit() throws Exception {
String delim = ";";
String line = "" + delim + "" + delim + "" + delim + "" + delim;
List<String> tokens = ObjectUtil.split(line, delim);
assertEquals(4, tokens.size());
line = delim + line;
tokens = ObjectUtil.split(line, delim);
assertEquals(5, tokens.size());
}
public void testValueOfInteger() throws Exception {
String integerType = "Integer";
String[] value = { "-100", "0", "100", "", "12.9", "bad value" };
String[] expected = { "-100", "0", "100", null, null, null };
for (int i = 0; i < value.length; i++) {
String tempvalue = expected[i];
Integer expectedValue = tempvalue != null ? Integer.valueOf(expected[i]) : null;
assertEquals(expectedValue, ObjectUtil.valueOf(integerType, value[i]));
}
}
public void testValueOfKualiDecimal() throws Exception {
String type = "KualiDecimal";
String[] value = { "-100.00", "0", "100", "100.00", "", "bad value" };
String[] expected = { "-100", "0", "100", "100", null, null };
for (int i = 0; i < value.length; i++) {
String tempvalue = expected[i];
KualiDecimal expectedValue = tempvalue != null ? new KualiDecimal(expected[i]) : null;
assertEquals(expectedValue, ObjectUtil.valueOf(type, value[i]));
}
}
public void testValueOfKualiInteger() throws Exception {
String type = "KualiInteger";
String[] value = { "-100", "0", "100", "100.00", "", "bad value" };
String[] expected = { "-100", "0", "100", null, null, null };
for (int i = 0; i < value.length; i++) {
String tempvalue = expected[i];
KualiInteger expectedValue = tempvalue != null ? new KualiInteger(expected[i]) : null;
assertEquals(expectedValue, ObjectUtil.valueOf(type, value[i]));
}
}
public void testValueOfDate() throws Exception {
String type = "Date";
String[] value = { "2000-01-31", "2000/1/1", "1/1/2000", "", "bad value" };
String[] expected = { "2000-01-31", null, null, null, null };
for (int i = 0; i < value.length; i++) {
String tempvalue = expected[i];
Date expectedValue = tempvalue != null ? Date.valueOf(expected[i]) : null;
assertEquals(expectedValue, ObjectUtil.valueOf(type, value[i]));
}
}
public void testValueOfTimestamp() throws Exception {
String type = "Timestamp";
String[] value = { "2000-01-31 00:12:00.55", "2000-01-31", "2000/1/1", "1/1/2000", "", "bad value" };
String[] expected = { "2000-01-31 00:12:00.55", "2000-01-31 00:00:00.0", null, null, null, null };
for (int i = 0; i < value.length; i++) {
String tempvalue = expected[i];
Timestamp expectedValue = tempvalue != null ? Timestamp.valueOf(expected[i]) : null;
assertEquals(expectedValue, ObjectUtil.valueOf(type, value[i]));
}
}
public void testHasNullValueField() throws Exception {
SimpleAddress sourceAddress = new SimpleAddress(null, null, null, 9999);
assertTrue(ObjectUtil.hasNullValueField(sourceAddress));
sourceAddress = new SimpleAddress("1000 Main Street", "Source City", "Kuali", 10000, new KualiDecimal(200000), new Date(1000000));
assertTrue(!ObjectUtil.hasNullValueField(sourceAddress));
}
public void testParseNestedAttribute() throws Exception {
LedgerBalance balance = new LedgerBalance();
String attributes = "laborObject.chartOfAccounts.chartOfAccountsCode";
System.out.println(ObjectUtil.getNestedAttributeTypes(LedgerBalance.class, attributes));
}
}