package org.projectusus.metrics.test; import static org.junit.Assert.assertEquals; import static org.projectusus.metrics.util.CountingUtils.getNumberOfClasses; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration; import org.eclipse.jdt.core.dom.EnumDeclaration; import org.eclipse.jdt.core.dom.TypeDeclaration; import org.junit.Before; import org.junit.Test; import org.projectusus.core.basis.MetricsResults; import org.projectusus.core.statistics.UsusModelProvider; import org.projectusus.metrics.AbstractClassCollector; import org.projectusus.metrics.util.ClassValueVisitor; import org.projectusus.metrics.util.Setup; public class AbstractClassCollectorTest extends CollectorTestHelper { private static final String ABSTRACT_CLASS_NAME = "AbstractClassName"; private static final String ENUM_NAME = "EnumName"; private static final String INTERFACE_NAME = "InterfaceName"; private static final String ANNOTATION_NAME = "AnnotationName"; private static final String CLASS_NAME = "ClassName"; private AbstractClassCollector collector; @Before public void setup() throws JavaModelException { classVisitor = new ClassValueVisitor( MetricsResults.ABSTRACTNESS ); UsusModelProvider.clear( setupNodeHelperForClass() ); collector = new AbstractClassCollector(); } @Test public void markAsAbstractLeadsToAbstractionCounter1() { collector.markAsAbstract( Setup.setupCollectorAndMockFor( collector, TypeDeclaration.class, CLASS_NAME ) ); classVisitor.visit(); assertEquals( 1, classVisitor.getValueMap().get( CLASS_NAME ).intValue() ); assertEquals( 1, getNumberOfClasses() ); } @Test public void markAsConcreteLeadsToAbstractionCounter0() { collector.markAsConcrete( Setup.setupCollectorAndMockFor( collector, TypeDeclaration.class, CLASS_NAME ) ); classVisitor.visit(); assertEquals( 0, classVisitor.getValueMap().get( CLASS_NAME ).intValue() ); assertEquals( 1, getNumberOfClasses() ); } @Test public void abstractnessOfMultipleClassesIsAdditive() { collector.markAsAbstract( Setup.setupCollectorAndMockFor( collector, TypeDeclaration.class, INTERFACE_NAME ) ); collector.markAsAbstract( Setup.setupCollectorAndMockFor( collector, TypeDeclaration.class, ABSTRACT_CLASS_NAME ) ); collector.markAsConcrete( Setup.setupCollectorAndMockFor( collector, TypeDeclaration.class, CLASS_NAME ) ); collector.markAsConcrete( Setup.setupCollectorAndMockFor( collector, EnumDeclaration.class, ENUM_NAME ) ); collector.markAsConcrete( Setup.setupCollectorAndMockFor( collector, AnnotationTypeDeclaration.class, ANNOTATION_NAME ) ); classVisitor.visit(); assertEquals( 1, classVisitor.getValueMap().get( INTERFACE_NAME ).intValue() ); assertEquals( 1, classVisitor.getValueMap().get( ABSTRACT_CLASS_NAME ).intValue() ); assertEquals( 0, classVisitor.getValueMap().get( CLASS_NAME ).intValue() ); assertEquals( 0, classVisitor.getValueMap().get( ENUM_NAME ).intValue() ); assertEquals( 0, classVisitor.getValueMap().get( ANNOTATION_NAME ).intValue() ); assertEquals( 5, getNumberOfClasses() ); } }