package org.projectusus.metrics.test; import static org.junit.Assert.assertEquals; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.Modifier; 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.PublicFieldCollector; import org.projectusus.metrics.util.ClassValueVisitor; import org.projectusus.metrics.util.Setup; public class PublicFieldCollectorTest extends CollectorTestHelper { private static final String CLASS_NAME = "ClassName"; private static final String ANOTHER_CLASS_NAME = "AnotherClassName"; private PublicFieldCollector collector; private TypeDeclaration node; @Before public void setup() throws JavaModelException { classVisitor = new ClassValueVisitor( MetricsResults.PUBLIC_FIELDS ); nodeHelper = setupNodeHelperForClass(); UsusModelProvider.clear( nodeHelper ); collector = new PublicFieldCollector(); node = Setup.setupCollectorAndMockFor( collector, TypeDeclaration.class, CLASS_NAME ); collector.init( node ); } @Test public void noCalculationsYieldCountOf0() { collector.commit( node ); classVisitor.visit(); assertEquals( 0, classVisitor.getValueMap().get( CLASS_NAME ).intValue() ); } @Test public void publicStaticFinalFieldIsNotCounted() { collector.calculate( Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL ); collector.commit( node ); classVisitor.visit(); assertEquals( 0, classVisitor.getValueMap().get( CLASS_NAME ).intValue() ); } @Test public void publicNonstaticNonfinalFieldIsCounted() { collector.calculate( Modifier.PUBLIC ); collector.commit( node ); classVisitor.visit(); assertEquals( 1, classVisitor.getValueMap().get( CLASS_NAME ).intValue() ); } @Test public void combinationsOfPublicNonstaticNonfinalFieldIsCounted() { collector.calculate( Modifier.PUBLIC ); collector.calculate( Modifier.PUBLIC | Modifier.STATIC ); collector.calculate( Modifier.PUBLIC | Modifier.FINAL ); collector.commit( node ); classVisitor.visit(); assertEquals( 3, classVisitor.getValueMap().get( CLASS_NAME ).intValue() ); } @Test public void publicFieldsInTwoClassesAreCountedSeparately() { collector.calculate( Modifier.PUBLIC ); TypeDeclaration node2 = Setup.setupMockWithStartPosition( TypeDeclaration.class, PublicFieldCollectorTest.ANOTHER_CLASS_NAME, 100, nodeHelper ); collector.init( node2 ); collector.calculate( Modifier.PUBLIC ); collector.commit( node2 ); collector.commit( node ); classVisitor.visit(); assertEquals( 1, classVisitor.getValueMap().get( CLASS_NAME ).intValue() ); assertEquals( 1, classVisitor.getValueMap().get( ANOTHER_CLASS_NAME ).intValue() ); } }