/**
* $Id: ConversionUtilsTest.java 65 2010-04-05 14:53:55Z azeckoski $
* $URL: http://reflectutils.googlecode.com/svn/trunk/src/test/java/org/azeckoski/reflectutils/ConversionUtilsTest.java $
* ConversionUtilsTest.java - genericdao - Sep 8, 2008 6:24:24 PM - azeckoski
**************************************************************************
* Copyright (c) 2008 Aaron Zeckoski
* Licensed under the Apache License, Version 2.0
*
* A copy of the Apache License has been included in this
* distribution and is available at: http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Aaron Zeckoski (azeckoski @ gmail.com) (aaronz @ vt.edu) (aaron @ caret.cam.ac.uk)
*/
package org.azeckoski.reflectutils;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.azeckoski.reflectutils.classes.TestBean;
import org.azeckoski.reflectutils.classes.TestPea;
import org.azeckoski.reflectutils.map.ArrayOrderedMap;
import junit.framework.TestCase;
/**
* Testing the conversion utilities
*
* @author Aaron Zeckoski (azeckoski @ gmail.com)
*/
public class ConversionUtilsTest extends TestCase {
@SuppressWarnings("unchecked")
public void testConvertObject() {
ConversionUtils convertUtils = new ConversionUtils();
String[] abc = new String[] {"A","B","C"};
// equivalent conversion also should be instantaneous since no conversion happens
assertEquals(123, (int) convertUtils.convert(123, int.class) );
assertEquals(123, (int) convertUtils.convert(new Integer(123), int.class) );
assertEquals("123", convertUtils.convert("123", String.class) );
assertEquals(abc, convertUtils.convert(abc, String[].class) );
// object conversion should be instant
assertEquals(new Integer(123), (Integer) convertUtils.convert(123, Object.class) );
assertEquals("123", convertUtils.convert("123", Object.class) );
// now do actual conversions
assertEquals(123, (int) convertUtils.convert("123", int.class) );
assertEquals("123", convertUtils.convert("123", String.class) );
assertEquals(new Integer(123), convertUtils.convert("123", Integer.class) );
// array to scalar
assertEquals(123, (int) convertUtils.convert(new int[] {123,456}, int.class) );
assertEquals(123, (int) convertUtils.convert(new String[] {"123","456"}, int.class) );
// scalar to array
int[] nums = new int[] {123};
nums = convertUtils.convert(123, int[].class);
assertEquals(123, nums[0]);
nums = convertUtils.convert("123", int[].class);
assertEquals(123, nums[0]);
// array to string
assertEquals("A,B,C", convertUtils.convert(abc, String.class) );
// array to list and vice versa
List<String> l = convertUtils.convert(new String[] {"A","B","C"}, List.class);
assertEquals(l.get(0), abc[0]);
assertEquals(l.get(1), abc[1]);
assertEquals(l.get(2), abc[2]);
LinkedList<String> ll = convertUtils.convert(new String[] {"A","B","C"}, LinkedList.class);
assertEquals(ll.get(0), abc[0]);
assertEquals(ll.get(1), abc[1]);
assertEquals(ll.get(2), abc[2]);
String[] sarray = convertUtils.convert(l, String[].class);
assertEquals(sarray[0], l.get(0));
assertEquals(sarray[1], l.get(1));
assertEquals(sarray[2], l.get(2));
// array to collection and map
Set<String> s = convertUtils.convert(new String[] {"A","B","C"}, Set.class);
assertNotNull(s);
assertEquals(3, s.size());
assertTrue(s.contains("A"));
assertTrue(s.contains("B"));
assertTrue(s.contains("C"));
Map<String, Object> map = convertUtils.convert(new String[] {"A","B","C"}, Map.class);
assertNotNull(map);
assertEquals(3, map.size());
}
public void testStringToArray() {
ConversionUtils convertUtils = new ConversionUtils();
String[] sa = convertUtils.convert("A, B, C", String[].class);
assertNotNull(sa);
assertEquals(3, sa.length);
assertEquals("A", sa[0]);
assertEquals("B", sa[1]);
assertEquals("C", sa[2]);
int[] ia = convertUtils.convert("1,2,3", int[].class);
assertNotNull(ia);
assertEquals(3, ia.length);
assertEquals(1, ia[0]);
assertEquals(2, ia[1]);
assertEquals(3, ia[2]);
int[] empty = convertUtils.convert("", int[].class);
assertNotNull(empty);
assertEquals(0, empty.length);
}
public void testConvertDates() {
ConversionUtils convertUtils = new ConversionUtils();
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(1975, 9, 29);
Date d = calendar.getTime();
long l = d.getTime();
Timestamp t = new Timestamp(l);
assertEquals(d, convertUtils.convert(l, Date.class));
assertEquals(d, convertUtils.convert("19751029", Date.class));
assertEquals(d, convertUtils.convert(t, Date.class));
assertEquals(calendar, convertUtils.convert(l, Calendar.class));
assertEquals(calendar, convertUtils.convert("19751029", Calendar.class));
}
public void testConvertToString() {
ConversionUtils convertUtils = new ConversionUtils();
assertEquals("3", convertUtils.convertToString("3"));
assertEquals("3", convertUtils.convertToString(3));
assertEquals("3", convertUtils.convertToString(new int[] {3,2,1}));
}
public void testConvertString() {
ConversionUtils convertUtils = new ConversionUtils();
assertEquals(3, convertUtils.convertString("3", int.class));
assertEquals(new Integer(3), convertUtils.convertString("3", Integer.class));
int[] intArray = (int[]) convertUtils.convertString("3", int[].class);
assertEquals(3, intArray[0]);
assertEquals("XXX", convertUtils.convertString("XXX", Integer.class));
}
private enum TestEnum {ONE, TWO, THREE};
public void testConvertEnums() {
ConversionUtils convertUtils = new ConversionUtils();
assertEquals("ONE", convertUtils.convert(TestEnum.ONE, String.class));
assertEquals("TWO", convertUtils.convert(TestEnum.TWO, String.class));
String[] sa = convertUtils.convert(TestEnum.values(), String[].class);
assertEquals(3, sa.length);
assertEquals("ONE", sa[0]);
assertEquals("TWO", sa[1]);
assertEquals("THREE", sa[2]);
assertEquals(TestEnum.ONE, convertUtils.convert("ONE", TestEnum.class));
assertEquals(TestEnum.TWO, convertUtils.convert("TWO", TestEnum.class));
}
@SuppressWarnings("unchecked")
public void testObjectToMap() { // simple conversion
ConversionUtils convertUtils = new ConversionUtils();
TestPea tp = new TestPea();
Map<String,Object> m = convertUtils.convert(tp, Map.class);
assertNotNull(m);
assertEquals(2, m.size());
assertEquals("id", m.get("id"));
assertEquals("EID", m.get("entityId"));
TestBean tb = new TestBean();
Map<String,Object> m1 = convertUtils.convert(tb, Map.class);
assertNotNull(m1);
assertEquals(2, m1.size());
assertEquals(0, m1.get("myInt"));
assertEquals("woot", m1.get("myString"));
}
public void testMapToObject() { // simple conversion
ConversionUtils convertUtils = new ConversionUtils();
Map<String, Object> m = new HashMap<String, Object>();
m.put("id", "AZ");
m.put("entityId", "aaronz");
m.put("stuff", "blah");
TestPea tp = convertUtils.convert(m, TestPea.class);
assertNotNull(tp);
assertEquals("AZ", tp.id);
assertEquals("aaronz", tp.entityId);
m.clear();
m.put("myInt", "123");
TestBean tb = convertUtils.convert(m, TestBean.class);
assertNotNull(tb);
assertEquals(123, tb.getMyInt());
assertEquals("woot", tb.getMyString());
String s = convertUtils.convert(m, String.class);
assertNotNull(s);
assertEquals("123", s);
}
@SuppressWarnings("unchecked")
public void testConvertMaps() {
ConversionUtils convertUtils = new ConversionUtils();
Map<String, String> sm = new HashMap<String, String>();
sm.put("A", "AZ");
sm.put("B", "BZ");
sm.put("C", "CZ");
Map<String, String> aom = convertUtils.convert(sm, ArrayOrderedMap.class);
assertNotNull(aom);
}
}