/** * $Id: ConstructorUtilsTest.java 41 2008-11-12 17:36:24Z azeckoski $ * $URL: http://reflectutils.googlecode.com/svn/trunk/src/test/java/org/azeckoski/reflectutils/ConstructorUtilsTest.java $ * ConstructorUtilsTest.java - genericdao - Aug 31, 2008 12:06:11 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.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; import java.util.Vector; import junit.framework.TestCase; import org.azeckoski.reflectutils.classes.TestBean; import org.azeckoski.reflectutils.classes.TestExtendBean; import org.azeckoski.reflectutils.classes.TestNesting; import org.azeckoski.reflectutils.classes.TestNoPubConstructor; import org.azeckoski.reflectutils.classes.TestPea; import org.azeckoski.reflectutils.classes.TestUltraNested; import org.azeckoski.reflectutils.map.ArrayOrderedMap; /** * Testing the constructor utils * * @author Aaron Zeckoski (azeckoski @ gmail.com) */ public class ConstructorUtilsTest extends TestCase { /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#isClassArray(java.lang.Class)}. */ public void testIsClassArray() { assertFalse(ConstructorUtils.isClassArray(String.class)); assertFalse(ConstructorUtils.isClassArray(int.class)); assertFalse(ConstructorUtils.isClassArray(List.class)); assertFalse(ConstructorUtils.isClassArray(Set.class)); assertFalse(ConstructorUtils.isClassArray(Map.class)); assertFalse(ConstructorUtils.isClassArray(Object.class)); assertTrue(ConstructorUtils.isClassArray(String[].class)); assertTrue(ConstructorUtils.isClassArray(int[].class)); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#isClassPrimitive(java.lang.Class)}. */ public void testIsClassPrimitive() { assertFalse(ConstructorUtils.isClassPrimitive(String.class)); assertTrue(ConstructorUtils.isClassPrimitive(int.class)); assertFalse(ConstructorUtils.isClassPrimitive(List.class)); assertFalse(ConstructorUtils.isClassPrimitive(Set.class)); assertFalse(ConstructorUtils.isClassPrimitive(Map.class)); assertFalse(ConstructorUtils.isClassPrimitive(Object.class)); assertFalse(ConstructorUtils.isClassPrimitive(String[].class)); assertFalse(ConstructorUtils.isClassPrimitive(int[].class)); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#isClassList(java.lang.Class)}. */ public void testIsClassList() { assertFalse(ConstructorUtils.isClassList(String.class)); assertFalse(ConstructorUtils.isClassList(int.class)); assertTrue(ConstructorUtils.isClassList(List.class)); assertFalse(ConstructorUtils.isClassList(Set.class)); assertFalse(ConstructorUtils.isClassList(Map.class)); assertFalse(ConstructorUtils.isClassList(Object.class)); assertFalse(ConstructorUtils.isClassList(String[].class)); assertFalse(ConstructorUtils.isClassList(int[].class)); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#isClassCollection(java.lang.Class)}. */ public void testIsClassCollection() { assertFalse(ConstructorUtils.isClassCollection(String.class)); assertFalse(ConstructorUtils.isClassCollection(int.class)); assertTrue(ConstructorUtils.isClassCollection(List.class)); assertTrue(ConstructorUtils.isClassCollection(Set.class)); assertFalse(ConstructorUtils.isClassCollection(Map.class)); assertFalse(ConstructorUtils.isClassCollection(Object.class)); assertFalse(ConstructorUtils.isClassCollection(String[].class)); assertFalse(ConstructorUtils.isClassCollection(int[].class)); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#isClassMap(java.lang.Class)}. */ public void testIsClassMap() { assertFalse(ConstructorUtils.isClassMap(String.class)); assertFalse(ConstructorUtils.isClassMap(int.class)); assertFalse(ConstructorUtils.isClassMap(List.class)); assertFalse(ConstructorUtils.isClassMap(Set.class)); assertTrue(ConstructorUtils.isClassMap(Map.class)); assertFalse(ConstructorUtils.isClassMap(Object.class)); assertFalse(ConstructorUtils.isClassMap(String[].class)); assertFalse(ConstructorUtils.isClassMap(int[].class)); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#isClassObjectHolder(java.lang.Class)}. */ public void testIsClassObjectHolder() { assertFalse(ConstructorUtils.isClassObjectHolder(String.class)); assertFalse(ConstructorUtils.isClassObjectHolder(int.class)); assertTrue(ConstructorUtils.isClassObjectHolder(List.class)); assertTrue(ConstructorUtils.isClassObjectHolder(Set.class)); assertTrue(ConstructorUtils.isClassObjectHolder(Map.class)); assertFalse(ConstructorUtils.isClassObjectHolder(Object.class)); assertTrue(ConstructorUtils.isClassObjectHolder(String[].class)); assertTrue(ConstructorUtils.isClassObjectHolder(int[].class)); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#getTypeFromArray(java.lang.Class)}. */ public void testGetTypeFromArray() { assertEquals(String.class, ConstructorUtils.getTypeFromArray(String[].class)); assertEquals(int.class, ConstructorUtils.getTypeFromArray(int[].class)); assertEquals(String.class, ConstructorUtils.getTypeFromArray(String.class)); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#getClassFromInterface(java.lang.Class)}. */ @SuppressWarnings("unchecked") public void testGetClassFromInterface() { assertEquals(Vector.class, ConstructorUtils.getClassFromInterface(List.class)); assertEquals(HashSet.class, ConstructorUtils.getClassFromInterface(Set.class)); assertEquals(ArrayOrderedMap.class, ConstructorUtils.getClassFromInterface(Map.class)); assertEquals(Vector.class, ConstructorUtils.getClassFromInterface(Collection.class)); assertEquals(Long.class, ConstructorUtils.getClassFromInterface(Long.class)); assertEquals(Integer.class, ConstructorUtils.getClassFromInterface(Integer.class)); assertEquals(String.class, ConstructorUtils.getClassFromInterface(String.class)); assertEquals(String[].class, ConstructorUtils.getClassFromInterface(String[].class)); assertEquals(int.class, ConstructorUtils.getClassFromInterface(int.class)); // test special cases assertEquals(Vector.class, ConstructorUtils.getClassFromInterface(Arrays.asList(new ArrayList<String>()).getClass())); assertEquals(Vector.class, ConstructorUtils.getClassFromInterface(Collections.synchronizedCollection(new ArrayList<String>()).getClass())); assertEquals(Vector.class, ConstructorUtils.getClassFromInterface(Collections.synchronizedList(new ArrayList<String>()).getClass())); assertEquals(HashSet.class, ConstructorUtils.getClassFromInterface(Collections.synchronizedSet(new HashSet<String>()).getClass())); assertEquals(ArrayOrderedMap.class, ConstructorUtils.getClassFromInterface(Collections.synchronizedMap(new HashMap<String,String>()).getClass())); assertEquals(TreeSet.class, ConstructorUtils.getClassFromInterface(Collections.synchronizedSortedSet(new TreeSet<String>()).getClass())); assertEquals(TreeMap.class, ConstructorUtils.getClassFromInterface(Collections.synchronizedSortedMap(new TreeMap<String,String>()).getClass())); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#getImmutableTypes()}. */ public void testGetImmutableTypes() { Set<Class<?>> s = ConstructorUtils.getImmutableTypes(); assertNotNull(s); assertTrue(s.size() > 0); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#getPrimitiveToWrapper()}. */ public void testGetPrimitiveToWrapper() { Map<Class<?>, Class<?>> m = ConstructorUtils.getPrimitiveToWrapper(); assertNotNull(m); assertTrue(m.size() > 0); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#getPrimitiveDefaults()}. */ public void testGetPrimitiveDefaults() { Map<Class<?>, Object> m = ConstructorUtils.getPrimitiveDefaults(); assertNotNull(m); assertTrue(m.size() > 0); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#isClassSimple(java.lang.Class)}. */ public void testIsClassSimple() { assertTrue( ConstructorUtils.isClassSimple(int.class) ); assertTrue( ConstructorUtils.isClassSimple(String.class) ); assertTrue( ConstructorUtils.isClassSimple(Date.class) ); assertTrue( ConstructorUtils.isClassSimple(Boolean.class) ); assertFalse( ConstructorUtils.isClassSimple(TestBean.class) ); assertFalse( ConstructorUtils.isClassSimple(TestPea.class) ); assertFalse( ConstructorUtils.isClassSimple(TestUltraNested.class) ); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#getWrapperToPrimitive()}. */ public void testGetWrapperToPrimitive() { Map<Class<?>, Class<?>> m = ConstructorUtils.getWrapperToPrimitive(); assertNotNull(m); assertTrue(m.size() > 0); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#getWrapper(java.lang.Class)}. */ public void testGetWrapper() { assertEquals(Integer.class, ConstructorUtils.getWrapper(int.class)); assertEquals(Integer.class, ConstructorUtils.getWrapper(Integer.class)); assertEquals(String.class, ConstructorUtils.getWrapper(String.class)); assertEquals(Boolean.class, ConstructorUtils.getWrapper(boolean.class)); assertEquals(Boolean.class, ConstructorUtils.getWrapper(Boolean.class)); assertEquals(Integer[].class, ConstructorUtils.getWrapper(int[].class)); assertEquals(Integer[].class, ConstructorUtils.getWrapper(Integer[].class)); assertEquals(null, ConstructorUtils.getWrapper(null)); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#classEquals(java.lang.Class, java.lang.Class)}. */ public void testClassEquals() { assertTrue( ConstructorUtils.classEquals(int.class, int.class) ); assertTrue( ConstructorUtils.classEquals(Integer.class, Integer.class) ); assertTrue( ConstructorUtils.classEquals(int.class, Integer.class) ); assertTrue( ConstructorUtils.classEquals(int[].class, int[].class) ); assertTrue( ConstructorUtils.classEquals(Integer[].class, Integer[].class) ); assertTrue( ConstructorUtils.classEquals(int[].class, Integer[].class) ); assertTrue( ConstructorUtils.classEquals(TestBean.class, TestBean.class) ); assertTrue( ConstructorUtils.classEquals(TestExtendBean.class, TestExtendBean.class) ); assertFalse( ConstructorUtils.classEquals(Object.class, Integer.class) ); assertFalse( ConstructorUtils.classEquals(Object[].class, Integer.class) ); assertFalse( ConstructorUtils.classEquals(int.class, boolean.class) ); assertFalse( ConstructorUtils.classEquals(Integer.class, Boolean.class) ); assertFalse( ConstructorUtils.classEquals(int[].class, boolean[].class) ); assertFalse( ConstructorUtils.classEquals(Integer[].class, Boolean[].class) ); assertFalse( ConstructorUtils.classEquals(int.class, null) ); assertFalse( ConstructorUtils.classEquals(null, boolean.class) ); assertFalse( ConstructorUtils.classEquals(TestBean.class, TestExtendBean.class) ); assertFalse( ConstructorUtils.classEquals(TestExtendBean.class, TestBean.class) ); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#classAssignable(java.lang.Class, java.lang.Class)}. */ public void testClassAssignable() { assertTrue( ConstructorUtils.classAssignable(int.class, int.class) ); assertTrue( ConstructorUtils.classAssignable(Integer.class, Integer.class) ); assertTrue( ConstructorUtils.classAssignable(Integer.class, int.class) ); assertTrue( ConstructorUtils.classAssignable(int[].class, int[].class) ); assertTrue( ConstructorUtils.classAssignable(Integer[].class, Integer[].class) ); assertTrue( ConstructorUtils.classAssignable(Integer[].class, int[].class) ); assertTrue( ConstructorUtils.classAssignable(TestBean.class, TestBean.class) ); assertTrue( ConstructorUtils.classAssignable(TestExtendBean.class, TestExtendBean.class) ); assertTrue( ConstructorUtils.classAssignable(TestExtendBean.class, TestBean.class) ); assertTrue( ConstructorUtils.classAssignable(Integer.class, Object.class) ); assertTrue( ConstructorUtils.classAssignable(Integer[].class, Object.class) ); assertTrue( ConstructorUtils.classAssignable(Integer[].class, Object[].class) ); assertTrue( ConstructorUtils.classAssignable(Integer.class, Object.class) ); assertFalse( ConstructorUtils.classAssignable(TestBean.class, TestExtendBean.class) ); assertFalse( ConstructorUtils.classAssignable(Integer.class, Object[].class) ); assertFalse( ConstructorUtils.classAssignable(Object[].class, Integer[].class) ); assertFalse( ConstructorUtils.classAssignable(Object.class, Integer[].class) ); assertFalse( ConstructorUtils.classAssignable(Object.class, Integer.class) ); assertFalse( ConstructorUtils.classAssignable(Object[].class, Integer[].class) ); assertFalse( ConstructorUtils.classAssignable(boolean.class, int.class) ); assertFalse( ConstructorUtils.classAssignable(Boolean.class, Integer.class) ); assertFalse( ConstructorUtils.classAssignable(boolean[].class, int[].class) ); assertFalse( ConstructorUtils.classAssignable(Boolean[].class, Integer[].class) ); assertFalse( ConstructorUtils.classAssignable(null, int.class) ); assertFalse( ConstructorUtils.classAssignable(boolean.class, null) ); } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#constructClass(java.lang.Class)}. */ @SuppressWarnings("unchecked") public void testConstructClassClassOfT() { ConstructorUtils constructUtils = new ConstructorUtils(); TestBean testBean = constructUtils.constructClass(TestBean.class); assertNotNull(testBean); TestNesting testNesting = constructUtils.constructClass(TestNesting.class); assertNotNull(testNesting); TestUltraNested ultraNested = constructUtils.constructClass(TestUltraNested.class); assertNotNull(ultraNested); // test constructing the various collections ArrayList arrayList = constructUtils.constructClass(ArrayList.class); assertNotNull(arrayList); HashSet hashSet = constructUtils.constructClass(HashSet.class); assertNotNull(hashSet); HashMap hashMap = constructUtils.constructClass(HashMap.class); assertNotNull(hashMap); // test constructing the various collections by interface List list = constructUtils.constructClass(List.class); assertNotNull(list); Set set = constructUtils.constructClass(Set.class); assertNotNull(set); Map map = constructUtils.constructClass(Map.class); assertNotNull(map); // now test constructing some simple objects String string = constructUtils.constructClass(String.class); assertNotNull(string); Boolean bool = constructUtils.constructClass(Boolean.class); assertNotNull(bool); // now for the really simple ones int i = constructUtils.constructClass(int.class); assertEquals(0, i); boolean b = constructUtils.constructClass(boolean.class); assertEquals(false, b); // arrays Integer[] integers = constructUtils.constructClass(Integer[].class); assertNotNull(integers); TestBean[] testBeans = constructUtils.constructClass(TestBean[].class); assertNotNull(testBeans); boolean[] bools = constructUtils.constructClass(boolean[].class); assertNotNull(bools); try { constructUtils.constructClass(null); fail("Should have thrown exception"); } catch (IllegalArgumentException e) { assertNotNull(e.getMessage()); } } /** * Test method for {@link org.azeckoski.reflectutils.ConstructorUtils#constructClass(java.lang.Class, java.lang.Object[])}. */ public void testConstructClassClassOfTObjectArray() { ConstructorUtils constructUtils = new ConstructorUtils(); TestBean testBean = constructUtils.constructClass(TestBean.class, null); assertNotNull(testBean); assertEquals(0, testBean.getMyInt()); assertEquals("woot", testBean.getMyString()); testBean = constructUtils.constructClass(TestBean.class, new Object[] {5}); assertNotNull(testBean); assertEquals(5, testBean.getMyInt()); assertEquals("woot", testBean.getMyString()); testBean = constructUtils.constructClass(TestBean.class, new Object[] {5, "AZ"}); assertNotNull(testBean); assertEquals(5, testBean.getMyInt()); assertEquals("AZ", testBean.getMyString()); try { testBean = constructUtils.constructClass(TestBean.class, new Object[] {"ASD", "QWE"}); fail("Should have thrown exception"); } catch (IllegalArgumentException e) { assertNotNull(e.getMessage()); } } public void testConstructNoPublic() { ConstructorUtils constructUtils = new ConstructorUtils(); TestNoPubConstructor t1 = constructUtils.constructClass(TestNoPubConstructor.class); assertNotNull(t1); assertEquals("prot", t1.getConstructed()); } public void testSpecialCheck() { assertTrue( ConstructorUtils.isClassSpecial(Class.class) ); assertTrue( ConstructorUtils.isClassSpecial(ClassLoader.class) ); assertTrue( ConstructorUtils.isClassSpecial(InputStream.class) ); assertFalse( ConstructorUtils.isClassSpecial(String.class) ); assertFalse( ConstructorUtils.isClassSpecial(int.class) ); assertFalse( ConstructorUtils.isClassSpecial(TestBean.class) ); } }