package org.projectusus.core.filerelations.model.classdescriptortest; import static org.hamcrest.Matchers.hasItems; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; 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; public class ClassDescriptorTest { private static final String NAME_STRING = "name"; private static final String PACKAGENAME_STRING = "packagename"; private Classname classname1 = new Classname( NAME_STRING ); private Classname classname2 = new Classname( NAME_STRING ); private Packagename packagename1 = Packagename.of( PACKAGENAME_STRING, null ); private Packagename packagename2 = Packagename.of( PACKAGENAME_STRING, null ); private IFile file; @Before public void setup() { file = mock( IFile.class ); } @Test public void equalsIsEqual() { ClassDescriptor descriptor1 = createDescriptor( file ); Object descriptor2 = createDescriptor( file ); assertTrue( descriptor1.equals( descriptor2 ) ); assertSame( descriptor1, descriptor2 ); } @Test public void differentClassDescriptorsWithEqualContentsAreEqualAndSame() { ClassDescriptor descriptor1a = ClassDescriptor.of( file, classname1, packagename1 ); ClassDescriptor descriptor1b = ClassDescriptor.of( file, classname1, packagename1 ); ClassDescriptor descriptor2 = ClassDescriptor.of( file, classname2, packagename2 ); assertEquals( descriptor1a, descriptor2 ); assertEquals( descriptor1a, descriptor1b ); assertEquals( descriptor1b, descriptor2 ); assertSame( descriptor1a, descriptor2 ); assertSame( descriptor1a, descriptor1b ); assertSame( descriptor1b, descriptor2 ); } @Test public void classIsAddedToPackageOnCreation() { ClassDescriptor descriptor = createDescriptor( file ); assertTrue( descriptor.getPackagename().containsClass( descriptor ) ); } @Test public void classIsRemovedFromPackageOnDestruction() { ClassDescriptor descriptor = createDescriptor( file ); Packagename packagename = descriptor.getPackagename(); descriptor.removeFromPool(); assertFalse( packagename.containsClass( descriptor ) ); } @Test public void isCrossPackage() { ClassDescriptor first = createDescriptor( Packagename.of( "x", null ) ); //$NON-NLS-1$ ClassDescriptor second = createDescriptor( Packagename.of( "y", null ) ); //$NON-NLS-1$ first.addChild( second ); assertThat( first.getChildrenInOtherPackages(), hasItems( second ) ); } @Test public void classIsNotAddedToItsChildren() { ClassDescriptor descriptor = ClassDescriptor.of( mock( IFile.class ), new Classname( "classname" ), Packagename.of( NAME_STRING, null ) ); //$NON-NLS-1$ assertEquals( 0, descriptor.getChildren().size() ); descriptor.addChild( descriptor ); assertEquals( 0, descriptor.getChildren().size() ); } private static ClassDescriptor createDescriptor( IFile file ) { return ClassDescriptor.of( file, new Classname( "classname1" ), Packagename.of( "packagename1", null ) ); //$NON-NLS-1$ //$NON-NLS-2$ } private static ClassDescriptor createDescriptor( Packagename packagename ) { return ClassDescriptor.of( mock( IFile.class ), new Classname( "classname1" ), packagename ); //$NON-NLS-1$ } }