package org.projectusus.core.filerelations.model.classdescriptortest; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.projectusus.matchers.UsusMatchers.emptySet; import static org.projectusus.matchers.UsusMatchers.setOf; 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; public class ClassDescriptorGetChildrenTest { private ClassDescriptor descriptor1; private ClassDescriptor descriptor2; private ClassDescriptor descriptor3; @Before public void setupClassDescriptors() { 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() { assertThat( descriptor1.getChildren(), emptySet() ); } @Test public void oneRelation() { descriptor1.addChild( descriptor2 ); assertThat( descriptor1.getChildren(), setOf( descriptor2 ) ); assertThat( descriptor2.getChildren(), emptySet() ); } @Test public void oneClassKnows2() { descriptor1.addChild( descriptor2 ); descriptor1.addChild( descriptor3 ); assertThat( descriptor1.getChildren(), setOf( descriptor2, descriptor3 ) ); assertThat( descriptor2.getChildren(), emptySet() ); assertThat( descriptor3.getChildren(), emptySet() ); } @Test public void oneClassKnows1Knows1() { descriptor1.addChild( descriptor2 ); descriptor2.addChild( descriptor3 ); assertThat( descriptor1.getChildren(), setOf( descriptor2 ) ); assertThat( descriptor2.getChildren(), setOf( descriptor3 ) ); assertThat( descriptor3.getChildren(), emptySet() ); } @Test public void threeClassCycle() { descriptor1.addChild( descriptor2 ); descriptor2.addChild( descriptor3 ); descriptor3.addChild( descriptor1 ); assertThat( descriptor1.getChildren(), setOf( descriptor2 ) ); assertThat( descriptor2.getChildren(), setOf( descriptor3 ) ); assertThat( descriptor3.getChildren(), setOf( descriptor1 ) ); } @Test public void threeClasses2InCycle() { descriptor1.addChild( descriptor2 ); descriptor2.addChild( descriptor3 ); descriptor3.addChild( descriptor2 ); assertThat( descriptor1.getChildren(), setOf( descriptor2 ) ); assertThat( descriptor2.getChildren(), setOf( descriptor3 ) ); assertThat( descriptor3.getChildren(), setOf( descriptor2 ) ); } }