package org.projectusus.core.filerelations.model.test;
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.PackageRelations;
import org.projectusus.core.filerelations.model.Packagename;
import org.projectusus.core.statistics.UsusModelProvider;
public class PackageCyclesTest {
private static Packagename I = Packagename.of( "I", null ); //$NON-NLS-1$
private static Packagename II = Packagename.of( "II", null ); //$NON-NLS-1$
private static Packagename III = Packagename.of( "III", null ); //$NON-NLS-1$
private static Packagename IV = Packagename.of( "IV", null ); //$NON-NLS-1$
private ClassDescriptor I_A;
private ClassDescriptor I_B;
private ClassDescriptor II_A;
private ClassDescriptor II_B;
private ClassDescriptor III_A;
private ClassDescriptor IV_A;
@Before
public void setup() {
UsusModelProvider.clear();
I_A = createDescriptor( I );
I_B = createDescriptor( I );
II_A = createDescriptor( II );
II_B = createDescriptor( II );
III_A = createDescriptor( III );
IV_A = createDescriptor( IV );
}
@Test
public void countPackagesInCycles1() {
assertEquals( 0, packagesInCycles() );
}
@Test
public void countPackagesInCycles2() {
I_A.addChild( II_A );
assertEquals( 0, packagesInCycles() );
}
@Test
public void countPackagesInCycles3() {
I_A.addChild( I_B );
I_B.addChild( I_A );
assertEquals( 0, packagesInCycles() );
}
@Test
public void countPackagesInCycles4() {
I_A.addChild( II_A );
II_A.addChild( I_A );
assertEquals( 2, packagesInCycles() );
}
@Test
public void countPackagesInCycles5() {
I_A.addChild( II_A );
II_B.addChild( I_B );
assertEquals( 2, packagesInCycles() );
}
@Test
public void countPackagesInCycles6() {
I_A.addChild( II_A );
II_A.addChild( III_A );
III_A.addChild( I_A );
IV_A.addChild( III_A );
assertEquals( 3, packagesInCycles() );
}
@Test
public void countPackagesInCycles7() {
I_A.addChild( II_A );
II_A.addChild( I_A );
III_A.addChild( IV_A );
IV_A.addChild( III_A );
assertEquals( 4, packagesInCycles() );
}
private int packagesInCycles() {
return new PackageRelations().getPackageCycles().numberOfPackagesInAnyCycles();
}
private static ClassDescriptor createDescriptor( Packagename packagename ) {
return ClassDescriptor.of( mock( IFile.class ), new Classname( "classname1" ), packagename ); //$NON-NLS-1$
}
}