001    package org.springframework.richclient.util;
002    
003    import java.lang.reflect.Method;
004    import java.util.HashMap;
005    import java.util.Map;
006    
007    import junit.framework.TestCase;
008    
009    /**
010     * Test case for {@link ClassUtils}
011     */
012    public class ClassUtilsTests extends TestCase {
013    
014        interface A {
015    
016            public void setSomething(String newSomething);
017        }
018    
019        interface B {
020    
021            public String getSomething();
022        }
023    
024        interface C extends A {
025        }
026    
027        static class D implements B, C {
028    
029            public static final String VALUE1 = "value1";
030    
031            public static final Integer VALUE2 = new Integer(5);
032    
033            private String something;
034    
035            public String getSomething() {
036                return something;
037            }
038    
039            public void setSomething(String something) {
040                this.something = something;
041            }
042    
043            public static void staticMethod() {
044            }
045        }
046    
047        static class E extends D {
048    
049            private D deProperty;
050    
051            public D getDeProperty() {
052                return deProperty;
053            }
054    
055            public void setDeProperty(D deProperty) {
056                this.deProperty = deProperty;
057            }
058        }
059    
060        public void testGetFieldValue() {
061            assertNull(ClassUtils.getFieldValue("no.such.class.Exists.someField"));
062    
063            assertEquals("value1", ClassUtils.getFieldValue("org.springframework.richclient.util.ClassUtilsTests$D.VALUE1"));
064        }
065    
066        static class F {
067    
068            private E eeProperty;
069    
070            public E getEeProperty() {
071                return eeProperty;
072            }
073    
074            public void setEeProperty(E eeProperty) {
075                this.eeProperty = eeProperty;
076            }
077        }
078    
079        public void testGetPropertyClass() throws Exception {
080            assertEquals(String.class, ClassUtils.getPropertyClass(B.class, "something"));
081    
082            assertEquals(D.class, ClassUtils.getPropertyClass(F.class, "eeProperty.deProperty"));
083        }
084    
085        public void testGetValueFromMapForClass() throws Exception {
086            Object val;
087            Map map = new HashMap();
088    
089            map.put(Number.class, "Number");
090    
091            val = ClassUtils.getValueFromMapForClass(Long.class, map);
092            assertNotNull(val);
093            assertEquals("Number", val);
094    
095            map.put(A.class, "A");
096            val = ClassUtils.getValueFromMapForClass(B.class, map);
097            assertNull(val);
098    
099            val = ClassUtils.getValueFromMapForClass(E.class, map);
100            assertNotNull(val);
101            assertEquals("A", val);
102    
103            val = ClassUtils.getValueFromMapForClass(C.class, map);
104            assertNotNull(val);
105            assertEquals("A", val);
106        }
107    
108        public void testIsAProperty() throws Exception {
109            assertTrue(ClassUtils.isAProperty(B.class, "something"));
110            assertTrue(ClassUtils.isAProperty(E.class, "something"));
111            assertTrue(ClassUtils.isAProperty(A.class, "something"));
112            assertTrue(ClassUtils.isAProperty(F.class, "eeProperty.deProperty"));
113        }
114    
115        public void testQualifier() {
116            assertEquals("org.springframework.richclient.util.ClassUtilsTests", ClassUtils
117                    .qualifier("org.springframework.richclient.util.ClassUtilsTests.property"));
118            assertEquals("java.lang", ClassUtils.qualifier("java.lang.String"));
119            assertEquals("", ClassUtils.qualifier(""));
120            assertEquals("", ClassUtils.qualifier("test"));
121        }
122    
123        public void testFindMethod() {
124            Method method = ClassUtils.findMethod("getSomething", B.class, null);
125            assertNotNull(method);
126    
127            assertNull(ClassUtils.findMethod("noSuchMethod", B.class, null));
128        }
129    
130        public void testGetStaticMethod() {
131            assertNull(ClassUtils.getStaticMethod("getSomething", D.class, null));
132    
133            assertNotNull(ClassUtils.getStaticMethod("staticMethod", D.class, null));
134            assertEquals("staticMethod", ClassUtils.getStaticMethod("staticMethod", D.class, null).getName());
135        }
136    
137        public void testGetClassFieldNameWithValue() {
138            assertEquals("org.springframework.richclient.util.ClassUtilsTests$D.VALUE1", ClassUtils
139                    .getClassFieldNameWithValue(D.class, "value1"));
140            assertEquals("org.springframework.richclient.util.ClassUtilsTests$D.VALUE2", ClassUtils
141                    .getClassFieldNameWithValue(D.class, new Integer(5)));
142    
143            assertNull(ClassUtils.getClassFieldNameWithValue(D.class, "noSuchFieldWithValue"));
144        }
145    
146        public void testUnqualify() {
147            assertEquals("ClassUtilsTests", ClassUtils.unqualify("org.springframework.richclient.util.ClassUtilsTests"));
148            assertEquals("ClassUtilsTests", ClassUtils.unqualify(ClassUtilsTests.class));
149            assertEquals("ClassUtilsTests", ClassUtils
150                    .unqualify("org/springframework/richclient/util/ClassUtilsTests", '/'));
151        }
152    
153    }