package org.castor.jdo.jpa.processors.classprocessors; import java.lang.reflect.AnnotatedElement; import javax.persistence.Entity; import javax.persistence.TableGenerator; import javax.persistence.UniqueConstraint; import org.castor.jdo.jpa.info.ClassInfo; import org.castor.jdo.jpa.info.JPAKeyGeneratorManager; import org.castor.jdo.jpa.info.JPATableGeneratorDescriptor; import org.castor.jdo.jpa.natures.JPAClassNature; import org.castor.jdo.jpa.processors.BaseJPAAnnotationProcessor; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static org.mockito.Mockito.*; public class JPATableGeneratorClassProcessorTest { JPATableGeneratorClassProcessor processor = new JPATableGeneratorClassProcessor(); JPAClassNature nature; @Mock TableGenerator annotation; @Mock AnnotatedElement target; @Before public void setUp() throws Exception { processor = new JPATableGeneratorClassProcessor(); MockitoAnnotations.initMocks(this); initNature(); when(annotation.name()).thenReturn("name"); when(annotation.uniqueConstraints()).thenReturn(new UniqueConstraint[]{}); } private void initNature() throws Exception { ClassInfo classInfo = new ClassInfo(this.getClass()); classInfo.addNature(JPAClassNature.class.getCanonicalName()); nature = new JPAClassNature(classInfo); } @SuppressWarnings("cast") @Test public void processorIsBaseJPAAnnotationProcessor() throws Exception { assertTrue(processor instanceof BaseJPAAnnotationProcessor); } @Test public void processorIsForTableGeneratorAnnotation() throws Exception { assertEquals(TableGenerator.class, processor.forAnnotationClass()); } // @Test // public void processorReturnsTrueForTableGeneratorAnnotatedClass() throws Exception { // boolean result = processor.processAnnotation(nature, annotation, AnnotatedClass.class); // assertTrue(result); // } @Test public void nonAnnotatedClassResultsInFalseProcessingResult() throws Exception { boolean result = processor.processAnnotation(nature, annotation, NonAnnotatedClass.class); assertFalse(result); } @Test public void otherwiseAnnotatedClassResultsInFalseProcessingResult() throws Exception { boolean result = processor.processAnnotation(nature, annotation, OtherwiseAnnotatedClass.class); assertFalse(result); } @Test public void nonEntityAnnotatedClassResultsInFalseProcessingResult() throws Exception { boolean result = processor.processAnnotation(nature, annotation, NonEntityAnnotatedClass.class); assertFalse(result); } @Test public void processedTableGeneratorWillBeManaged() throws Exception { processor.processAnnotation(nature, annotation, AnnotatedClass.class); JPAKeyGeneratorManager manager = JPAKeyGeneratorManager.getInstance(); JPATableGeneratorDescriptor tableGenerator = (JPATableGeneratorDescriptor)manager.get("name"); assertEquals("name", tableGenerator.getName()); } @TableGenerator(name="testGenerator") @Entity class AnnotatedClass { } @TableGenerator(name="generatorName") class NonEntityAnnotatedClass { } class NonAnnotatedClass { } @Entity class OtherwiseAnnotatedClass { } }