/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.services.datamodeller.driver; import java.io.Serializable; import java.util.List; import java.util.Map; import org.jboss.forge.roaster.Roaster; import org.jboss.forge.roaster.model.source.AnnotationSource; import org.jboss.forge.roaster.model.source.JavaClassSource; import org.junit.Before; import org.junit.Test; import org.kie.workbench.common.services.datamodeller.annotations.AnnotationValuesAnnotation; import org.kie.workbench.common.services.datamodeller.annotations.ClassAnnotation; import org.kie.workbench.common.services.datamodeller.annotations.ENUM3; import org.kie.workbench.common.services.datamodeller.annotations.EnumsAnnotation; import org.kie.workbench.common.services.datamodeller.annotations.PrimitivesAnnotation; import org.kie.workbench.common.services.datamodeller.annotations.TestEnums; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static org.junit.Assert.*; public class RoasterApiTest { private static final Logger logger = LoggerFactory.getLogger(RoasterApiTest.class); private JavaClassSource javaClass; @Before public void createBaseClass() { javaClass = createClass( "org.kie.workbench.common.services.datamodeller.driver", "TestAnnotations" ); } public JavaClassSource createClass( String pkg, String name ) { JavaClassSource javaClass = Roaster.create( JavaClassSource.class ); javaClass.setPackage( pkg ); javaClass.setName( name ); return javaClass; } @Test public void testAnnotations() { AnnotationSource<JavaClassSource> annotationSource = javaClass.addAnnotation( ClassAnnotation.class.getName() ); //Class value pair annotationSource.setClassValue( "classParam", java.util.List.class ); Class<?> cls = annotationSource.getClassValue( "classParam" ); assertEquals( java.util.List.class, cls ); //Class array value pair annotationSource.setClassArrayValue( "classArrayParam", new Class<?>[]{ Map.class, List.class, Serializable.class } ); Class<?>[] clss = annotationSource.getClassArrayValue( "classArrayParam" ); assertArrayEquals( new Class<?>[]{ Map.class, List.class, Serializable.class }, clss ); annotationSource = javaClass.addAnnotation( PrimitivesAnnotation.class.getName() ); //String value pair annotationSource.setStringValue( "stringParam", "TheValue" ); String stringResult = annotationSource.getStringValue( "stringParam" ); assertEquals( "TheValue", stringResult ); //String array value pair String[] stringArray = { "value1", "value2", "value3" }; annotationSource.setStringArrayValue( "stringArrayParam", new String[]{ "value1", "value2", "value3" } ); String[] stringArrayResult = annotationSource.getStringArrayValue( "stringArrayParam" ); assertArrayEquals( stringArray, stringArrayResult ); annotationSource = javaClass.addAnnotation( EnumsAnnotation.class.getName() ); //Enum value pair annotationSource.setEnumValue( "enum3Param", ENUM3.VALUE1 ); annotationSource.setEnumValue( "enum1Param", TestEnums.ENUM1.VALUE2 ); Object enumValue1Result = annotationSource.getEnumValue( ENUM3.class, "enum3Param" ); Object enumValue2Result = annotationSource.getEnumValue( TestEnums.ENUM1.class, "enum1Param" ); assertEquals( ENUM3.VALUE1, enumValue1Result ); assertEquals( TestEnums.ENUM1.VALUE2, enumValue2Result ); //Enum array value pair TestEnums.ENUM2[] enumArrayValues = { TestEnums.ENUM2.VALUE1, TestEnums.ENUM2.VALUE2, TestEnums.ENUM2.VALUE3 }; annotationSource.setEnumArrayValue( "enum2ArrayParam", enumArrayValues ); Object[] enumArrayValuesResult = annotationSource.getEnumArrayValue( TestEnums.ENUM2.class, "enum2ArrayParam" ); assertArrayEquals( enumArrayValues, enumArrayValuesResult ); //Annotation value pair annotationSource = javaClass.addAnnotation( AnnotationValuesAnnotation.class.getName() ); AnnotationSource<JavaClassSource> primitivesAnnotation = annotationSource.setAnnotationValue( "primitivesParam" ); primitivesAnnotation.setName( PrimitivesAnnotation.class.getName() ); primitivesAnnotation.setStringValue( "stringParam", "The Value" ); AnnotationSource<JavaClassSource> arrayAnnotationValue1 = annotationSource.addAnnotationValue( "primitivesArrayParam" ); arrayAnnotationValue1.setName( PrimitivesAnnotation.class.getName() ); arrayAnnotationValue1.setStringValue( "stringParam", "The Value1" ); AnnotationSource<JavaClassSource> arrayAnnotationValue2 = annotationSource.addAnnotationValue( "primitivesArrayParam" ); arrayAnnotationValue2.setName( PrimitivesAnnotation.class.getName() ); arrayAnnotationValue2.setStringValue( "stringParam", "The Value2" ); AnnotationSource<JavaClassSource> primitivesParamValue = annotationSource.getAnnotationValue( "primitivesParam" ); assertEquals( "The Value", primitivesParamValue.getStringValue( "stringParam" ) ); AnnotationSource<JavaClassSource>[] primitivesArrayParamValue = annotationSource.getAnnotationArrayValue( "primitivesArrayParam" ); assertEquals( 2, primitivesArrayParamValue.length ); assertEquals( PrimitivesAnnotation.class.getName(), primitivesArrayParamValue[0].getName() ); assertEquals( PrimitivesAnnotation.class.getName(), primitivesArrayParamValue[1].getName() ); assertEquals( "The Value1", primitivesArrayParamValue[0].getStringValue( "stringParam" ) ); assertEquals( "The Value2", primitivesArrayParamValue[1].getStringValue( "stringParam" ) ); logger.debug( javaClass.toString() ); } }