001    /*
002     * Copyright 2012 The Kuali Foundation
003     *
004     * Licensed under the the Educational Community License, Version 1.0
005     * (the "License"); you may not use this file except in compliance
006     * with the License.  You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl1.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.student.contract.model.impl;
017    
018    import java.io.File;
019    import java.util.LinkedHashMap;
020    import java.util.Map;
021    
022    import javax.xml.bind.annotation.XmlEnum;
023    
024    import org.junit.Assert;
025    import org.junit.BeforeClass;
026    import org.junit.Test;
027    import org.junit.runner.RunWith;
028    import org.junit.runners.BlockJUnit4ClassRunner;
029    import org.kuali.student.contract.model.util.JavaClassAnnotationUtils;
030    import org.kuali.student.model.annotation.EnumWithAnnotationValue;
031    import org.kuali.student.model.annotation.EnumWithoutAnnotationValue;
032    import org.slf4j.Logger;
033    
034    import com.thoughtworks.qdox.JavaDocBuilder;
035    import com.thoughtworks.qdox.model.DefaultDocletTagFactory;
036    import com.thoughtworks.qdox.model.JavaClass;
037    
038    /**
039     * 
040     * tests how to resolve both types of @XmlEnum annotations.  Those with and without the value defined.
041     * 
042     * @author Kuali Student Team
043     */
044    @RunWith(BlockJUnit4ClassRunner.class)
045    public class TestAnnotationValueResolution {
046    
047            private static final Logger log = org.slf4j.LoggerFactory.getLogger(TestAnnotationValueResolution.class);
048            
049            private static Map<String, JavaClass> parsedJavaClassesMap;
050            
051            /**
052             * 
053             */
054            public TestAnnotationValueResolution() {
055                    
056            }
057    
058            @BeforeClass
059            public static void setup () {
060                    
061            DefaultDocletTagFactory dtf = new DefaultDocletTagFactory();
062            JavaDocBuilder builder = new JavaDocBuilder(dtf);
063            
064            builder.addSourceTree(new File("src/test/java/org/kuali/student/model/annotation"));
065            
066           parsedJavaClassesMap = new LinkedHashMap<String, JavaClass>();
067            
068            for (JavaClass javaClass : builder.getClasses()) {
069                
070                    parsedJavaClassesMap.put(javaClass.getName(), javaClass);
071                
072            }
073            
074            }
075            
076            
077            
078            @Test
079            public void checkExistence() {
080                    
081                    JavaClass withValue = parsedJavaClassesMap.get(EnumWithAnnotationValue.class.getSimpleName());
082                    
083                    Assert.assertNotNull(withValue);
084                    
085                    JavaClass withOutValue = parsedJavaClassesMap.get(EnumWithAnnotationValue.class.getSimpleName());
086                    
087                    Assert.assertNotNull(withOutValue);
088                    
089            }
090            
091            @Test
092            public void extractAnnotationValue() {
093                    
094                    JavaClass withValue = parsedJavaClassesMap.get(EnumWithAnnotationValue.class.getSimpleName());
095                    
096                    Assert.assertTrue(JavaClassAnnotationUtils.doesAnnotationExist(XmlEnum.class.getSimpleName(), withValue));
097                    
098                    Class<?>withValueClass = JavaClassAnnotationUtils.extractXmlEnumValue(withValue);
099                    
100                    Assert.assertEquals(Integer.class, withValueClass);
101                    
102                    JavaClass withoutValue = parsedJavaClassesMap.get(EnumWithoutAnnotationValue.class.getSimpleName());
103                    
104                    Assert.assertTrue(JavaClassAnnotationUtils.doesAnnotationExist(XmlEnum.class.getSimpleName(), withValue));
105                    
106                    Class<?>withoutValueClass = JavaClassAnnotationUtils.extractXmlEnumValue(withoutValue);
107                    
108                    Assert.assertEquals(String.class, withoutValueClass);
109                            
110            
111                    
112            }
113    }