package org.projectusus.core.filerelations.model.classdescriptortest; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import org.eclipse.core.resources.IFile; import org.junit.Before; import org.junit.Test; import org.projectusus.core.filerelations.model.ClassDescriptor; import org.projectusus.core.filerelations.model.Classname; import org.projectusus.core.filerelations.model.Packagename; import org.projectusus.core.statistics.UsusModelProvider; public class TransitiveParentCountTest { private ClassDescriptor descriptor1; private ClassDescriptor descriptor2; private ClassDescriptor descriptor3; @Before public void setupClassDescriptors() { UsusModelProvider.clear(); descriptor1 = createClassDescriptor( "Descriptor1" ); //$NON-NLS-1$ descriptor2 = createClassDescriptor( "Descriptor2" ); //$NON-NLS-1$ descriptor3 = createClassDescriptor( "Descriptor3" ); //$NON-NLS-1$ } public static ClassDescriptor createClassDescriptor( String name ) { IFile file = mock( IFile.class ); return ClassDescriptor.of( file, new Classname( name ), Packagename.of( name, null ) ); } @Test public void noRelations() { assertEquals( 1, descriptor1.getTransitiveParentCount() ); assertEquals( 1, descriptor2.getTransitiveParentCount() ); assertEquals( 1, descriptor3.getTransitiveParentCount() ); } @Test public void oneRelation() { descriptor1.addChild( descriptor2 ); assertEquals( 1, descriptor1.getTransitiveParentCount() ); assertEquals( 2, descriptor2.getTransitiveParentCount() ); } @Test public void oneClassKnows2() { descriptor1.addChild( descriptor2 ); descriptor1.addChild( descriptor3 ); assertEquals( 1, descriptor1.getTransitiveParentCount() ); assertEquals( 2, descriptor2.getTransitiveParentCount() ); assertEquals( 2, descriptor3.getTransitiveParentCount() ); } @Test public void oneClassKnows1Knows1() { descriptor1.addChild( descriptor2 ); descriptor2.addChild( descriptor3 ); assertEquals( 1, descriptor1.getTransitiveParentCount() ); assertEquals( 2, descriptor2.getTransitiveParentCount() ); assertEquals( 3, descriptor3.getTransitiveParentCount() ); } @Test public void twoClassCycle() { descriptor1.addChild( descriptor2 ); descriptor2.addChild( descriptor1 ); assertEquals( 2, descriptor1.getTransitiveParentCount() ); assertEquals( 2, descriptor2.getTransitiveParentCount() ); } @Test public void threeClassCycle() { descriptor1.addChild( descriptor2 ); descriptor2.addChild( descriptor3 ); descriptor3.addChild( descriptor1 ); assertEquals( 3, descriptor1.getTransitiveParentCount() ); assertEquals( 3, descriptor2.getTransitiveParentCount() ); assertEquals( 3, descriptor3.getTransitiveParentCount() ); } @Test public void threeClasses2InCycle() { descriptor1.addChild( descriptor2 ); descriptor2.addChild( descriptor3 ); descriptor3.addChild( descriptor2 ); assertEquals( 1, descriptor1.getTransitiveParentCount() ); assertEquals( 3, descriptor2.getTransitiveParentCount() ); assertEquals( 3, descriptor3.getTransitiveParentCount() ); } @Test public void transitiveChildrenWithSelfLoop() { descriptor1.addChild( descriptor2 ); descriptor2.addChild( descriptor2 ); descriptor2.addChild( descriptor3 ); assertEquals( 1, descriptor1.getTransitiveParentCount() ); assertEquals( 2, descriptor2.getTransitiveParentCount() ); assertEquals( 3, descriptor3.getTransitiveParentCount() ); } @Test public void calculateManyRelations() { descriptor1.addChild( descriptor2 ); descriptor1.addChild( descriptor3 ); descriptor2.addChild( descriptor3 ); descriptor3.addChild( descriptor2 ); descriptor3.addChild( descriptor1 ); assertEquals( 3, descriptor1.getTransitiveParentCount() ); assertEquals( 3, descriptor2.getTransitiveParentCount() ); assertEquals( 3, descriptor3.getTransitiveParentCount() ); } @Test public void transitiveRelationsFromCyclicRelationsIncludingStart() { descriptor1.addChild( descriptor2 ); descriptor2.addChild( descriptor3 ); descriptor3.addChild( descriptor2 ); descriptor3.addChild( descriptor1 ); assertEquals( 3, descriptor1.getTransitiveParentCount() ); assertEquals( 3, descriptor2.getTransitiveParentCount() ); assertEquals( 3, descriptor3.getTransitiveParentCount() ); } @Test public void secondQueryingOfCCDYieldsTheSameResult() { descriptor1.addChild( descriptor2 ); descriptor2.addChild( descriptor3 ); descriptor3.addChild( descriptor2 ); descriptor3.addChild( descriptor1 ); descriptor1.getTransitiveParentCount(); descriptor2.getTransitiveParentCount(); descriptor3.getTransitiveParentCount(); assertEquals( 3, descriptor1.getTransitiveParentCount() ); assertEquals( 3, descriptor2.getTransitiveParentCount() ); assertEquals( 3, descriptor3.getTransitiveParentCount() ); } }