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 PackageRelationsTest {
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 ClassDescriptor I_A;
private ClassDescriptor I_B;
private ClassDescriptor II_A;
private ClassDescriptor II_B;
private ClassDescriptor III_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 );
}
@Test
public void crossLinkCountIsDirected() {
I_A.addChild( II_A );
I_A.addChild( I_B );
II_A.addChild( II_B );
assertEquals( 1, getCrossLinkCount( I, II ) );
assertEquals( 0, getCrossLinkCount( II, I ) );
}
@Test
public void noCrossLinksInsidePackages() {
I_A.addChild( I_B );
assertEquals( 0, getCrossLinkCount( I, I ) );
}
@Test
public void crossLinkCountAddsUp() {
I_A.addChild( II_A );
I_B.addChild( II_A );
I_A.addChild( II_B );
I_B.addChild( II_B );
assertEquals( 4, getCrossLinkCount( I, II ) );
}
@Test
public void referencesAmongTwoClassesCountOnce() {
I_A.addChild( II_A );
I_A.addChild( II_A );
assertEquals( 1, getCrossLinkCount( I, II ) );
}
@Test
public void maxLinkCount() {
I_A.addChild( II_A );
I_A.addChild( II_B );
I_A.addChild( III_A );
II_A.addChild( I_A );
II_A.addChild( I_B );
III_A.addChild( II_A );
assertEquals( 2, new PackageRelations().getMaxCrossLinkCount() );
}
private int getCrossLinkCount( Packagename source, Packagename target ) {
return new PackageRelations().getCrossLinkCount( source, target );
}
private static ClassDescriptor createDescriptor( Packagename packagename ) {
return ClassDescriptor.of( mock( IFile.class ), new Classname( "classname1" ), packagename ); //$NON-NLS-1$
}
}