package org.projectusus.metrics.test; import static org.junit.Assert.assertEquals; import static org.projectusus.metrics.util.CountingUtils.getNumberOfClasses; import static org.projectusus.metrics.util.CountingUtils.getNumberOfMethods; import static org.projectusus.metrics.util.TypeBindingMocker.createFile; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.MethodDeclaration; import org.junit.Before; import org.junit.Test; import org.projectusus.core.basis.MetricsResults; import org.projectusus.core.statistics.UsusModelProvider; import org.projectusus.metrics.MLCollector; import org.projectusus.metrics.util.MethodValueVisitor; public class MLCollectorTest extends CollectorTestHelper { private static final String CLASS_NAME = "ClassName"; private static final String METHOD = "method"; private static final String CLASS_NAME_METHOD = CLASS_NAME + "." + METHOD + "()"; private MLCollector collector; private MethodDeclaration method; @Before public void setup() throws JavaModelException { methodVisitor = new MethodValueVisitor( MetricsResults.ML ); nodeHelper = setupNodeHelperForMethod( CLASS_NAME ); UsusModelProvider.clear( nodeHelper ); method = setupMethodDeclMock( METHOD ); collector = new MLCollector(); collector.setup( createFile(), UsusModelProvider.getMetricsWriter() ); // start the visit: collector.init( method ); } @Test public void methodWithoutStatementsHasML0() { checkMethodYieldsML( 0 ); assertEquals( 1, getNumberOfClasses() ); assertEquals( 1, getNumberOfMethods() ); } @Test public void methodWithOneStatementHasML1() { collector.calculate( 1 ); checkMethodYieldsML( 1 ); } @Test public void methodWithTwoSeparateStatementsHasML2() { collector.calculate( 1 ); collector.calculate( 1 ); checkMethodYieldsML( 2 ); } @Test public void methodWithMultipleGroupedStatementsSumsUpItsStatements() { collector.calculate( 3 ); collector.calculate( 5 ); collector.calculate( 2 ); checkMethodYieldsML( 10 ); } private void checkMethodYieldsML( int ml ) { collector.commit( method ); methodVisitor.visit(); assertEquals( ml, methodVisitor.getValueMap().get( CLASS_NAME_METHOD ).intValue() ); } }