package org.projectusus.ui.dependencygraph.sourcefolder;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaElementDelta;
import org.eclipse.jdt.core.IJavaProject;
import org.junit.Test;
import org.mockito.Mockito;
import org.projectusus.core.project2.IUSUSProject;
public class SourceFolderChangeDetectorTest {
@Test
public void detectSourceFolderAddition() {
IJavaElement model = javaElement( IJavaElement.JAVA_MODEL );
IJavaElementDelta modelDelta = javaElementDeltaFor( model );
IJavaElement project = javaProject();
IJavaElementDelta projectDelta = javaElementDeltaFor( project );
when( modelDelta.getChangedChildren() ).thenReturn( new IJavaElementDelta[] { projectDelta } );
IJavaElement fragmentRoot = javaElement( IJavaElement.PACKAGE_FRAGMENT_ROOT );
IJavaElementDelta fragmentDelta = javaElementDeltaFor( fragmentRoot );
when( projectDelta.getAddedChildren() ).thenReturn( new IJavaElementDelta[] { fragmentDelta } );
when( projectDelta.getChangedChildren() ).thenReturn( new IJavaElementDelta[0] );
when( projectDelta.getRemovedChildren() ).thenReturn( new IJavaElementDelta[0] );
SourceFolderChangeDetector detector = new SourceFolderChangeDetector();
assertTrue( detector.analyze( modelDelta ) );
}
@Test
public void detectSourceFolderRemoval() {
IJavaElement model = javaElement( IJavaElement.JAVA_MODEL );
IJavaElementDelta modelDelta = javaElementDeltaFor( model );
IJavaElement project = javaProject();
IJavaElementDelta projectDelta = javaElementDeltaFor( project );
when( modelDelta.getChangedChildren() ).thenReturn( new IJavaElementDelta[] { projectDelta } );
IJavaElement fragmentRoot = javaElement( IJavaElement.PACKAGE_FRAGMENT_ROOT );
IJavaElementDelta fragmentDelta = javaElementDeltaFor( fragmentRoot );
when( projectDelta.getAddedChildren() ).thenReturn( new IJavaElementDelta[0] );
when( projectDelta.getChangedChildren() ).thenReturn( new IJavaElementDelta[0] );
when( projectDelta.getRemovedChildren() ).thenReturn( new IJavaElementDelta[] { fragmentDelta } );
SourceFolderChangeDetector detector = new SourceFolderChangeDetector();
assertTrue( detector.analyze( modelDelta ) );
}
@Test
public void ignoreSourceFolderChangeAsRenameIsRemovalPlusAddition() {
IJavaElement model = javaElement( IJavaElement.JAVA_MODEL );
IJavaElementDelta modelDelta = javaElementDeltaFor( model );
IJavaElement project = javaProject();
IJavaElementDelta projectDelta = javaElementDeltaFor( project );
when( modelDelta.getChangedChildren() ).thenReturn( new IJavaElementDelta[] { projectDelta } );
IJavaElement fragmentRoot = javaElement( IJavaElement.PACKAGE_FRAGMENT_ROOT );
IJavaElementDelta fragmentDelta = javaElementDeltaFor( fragmentRoot );
when( projectDelta.getAddedChildren() ).thenReturn( new IJavaElementDelta[0] );
when( projectDelta.getChangedChildren() ).thenReturn( new IJavaElementDelta[] { fragmentDelta } );
when( projectDelta.getRemovedChildren() ).thenReturn( new IJavaElementDelta[0] );
SourceFolderChangeDetector detector = new SourceFolderChangeDetector();
assertFalse( detector.analyze( modelDelta ) );
}
private static IJavaElement javaElement( int elementType ) {
IJavaElement element = Mockito.mock( IJavaElement.class );
intWhen( element.getElementType(), elementType );
return element;
}
private static IJavaElement javaProject() {
IJavaProject element = Mockito.mock( IJavaProject.class );
intWhen( element.getElementType(), IJavaElement.JAVA_PROJECT );
IProject project = Mockito.mock( IProject.class );
when( element.getProject() ).thenReturn( project );
booleanWhen( project.isAccessible(), true );
when( project.getAdapter( IUSUSProject.class ) ).thenReturn( new DummyUsusProject() );
return element;
}
private static IJavaElementDelta javaElementDeltaFor( IJavaElement project2 ) {
IJavaElementDelta delta = Mockito.mock( IJavaElementDelta.class );
when( delta.getElement() ).thenReturn( project2 );
return delta;
}
private static void intWhen( int methodCall, int value ) {
when( Integer.valueOf( methodCall ) ).thenReturn( Integer.valueOf( value ) );
}
private static void booleanWhen( boolean methodCall, boolean value ) {
when( Boolean.valueOf( methodCall ) ).thenReturn( Boolean.valueOf( value ) );
}
static class DummyUsusProject implements IUSUSProject {
public boolean isUsusProject() {
return true;
}
public void setUsusProject( boolean ususProject ) { //
}
public String getProjectName() {
return "Dummy Project";
}
}
}