package org.projectusus.autotestsuite.core.internal; import static java.util.Arrays.asList; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; import static org.junit.matchers.JUnitMatchers.either; import java.util.HashSet; import org.eclipse.jdt.core.IJavaProject; import org.junit.Test; public class CommonDependencyRootTest extends TestsWithProjectDependencies { private final CommonDependencyRoot finder = new CommonDependencyRoot( projects() ); @Test public void noneFoundForEmpty() { // [], ?[] => [] assertThat( finder.findFor( new HashSet<IJavaProject>() ), is( nullValue() ) ); } @Test public void singleProjectFindsItself() throws Exception { // [p], ?p => [p] IJavaProject project = addProject( "p1" ); assertThat( finder.findFor( asList( project ) ), is( project ) ); } @Test public void dependentProjectFindsItself() throws Exception { // [p1->p2], ?p1 => [p1] IJavaProject project = addProject( "p1" ); IJavaProject dependency = addProject( "p2" ); addDependency( project, dependency ); assertThat( finder.findFor( asList( project ) ), is( project ) ); } @Test public void dependencyFindsItself() throws Exception { // [p1->p2], ?p2 => [p2] IJavaProject project = addProject( "p1" ); IJavaProject dependency = addProject( "p2" ); addDependency( project, dependency ); assertThat( finder.findFor( asList( dependency ) ), is( dependency ) ); } @Test public void dependencyFindsDependent() throws Exception { // [p1->p2], ?p1,p2 => [p1] IJavaProject project = addProject( "p1" ); IJavaProject dependency = addProject( "p2" ); addDependency( project, dependency ); assertThat( finder.findFor( asList( project, dependency ) ), is( project ) ); } @Test public void directRootIsFound() throws Exception { // [p1->p2, p1->p3], ?p2,p3 => [p1] IJavaProject project = addProject( "p1" ); IJavaProject dependencyLeft = addProject( "p2" ); addDependency( project, dependencyLeft ); IJavaProject dependencyRight = addProject( "p3" ); addDependency( project, dependencyRight ); assertThat( finder.findFor( asList( dependencyLeft, dependencyRight ) ), is( project ) ); } @Test public void indirectRootIsFound() throws Exception { // [p1->p2, p1->p3, p3->p4], ?p2,p4 => [p1] IJavaProject project = addProject( "p1" ); IJavaProject dependencyLeft = addProject( "p2" ); addDependency( project, dependencyLeft ); IJavaProject dependencyRight = addProject( "p3" ); addDependency( project, dependencyRight ); IJavaProject dependencyBottom = addProject( "p4" ); addDependency( dependencyRight, dependencyBottom ); assertThat( finder.findFor( asList( dependencyLeft, dependencyBottom ) ), is( project ) ); } @Test public void intermediateRootIsFound() throws Exception { // [p0->p1, p1->p2, p1->p3, p3->p4], ?p2,p4 => [p1] IJavaProject uberRoot = addProject( "p0" ); IJavaProject project = addProject( "p1" ); addDependency( uberRoot, project ); IJavaProject dependencyLeft = addProject( "p2" ); addDependency( project, dependencyLeft ); IJavaProject dependencyRight = addProject( "p3" ); addDependency( project, dependencyRight ); IJavaProject dependencyBottom = addProject( "p4" ); addDependency( dependencyRight, dependencyBottom ); IJavaProject result = finder.findFor( asList( dependencyLeft, dependencyBottom ) ); assertThat( result, either( is( uberRoot ) ).or( is( project ) ) ); } @Test public void unrelatedProjectsFindNothing() throws Exception { // [p1,p2], ?p1,p2 => [] IJavaProject project = addProject( "p1" ); IJavaProject unrelatedProject = addProject( "p2" ); assertThat( finder.findFor( asList( project, unrelatedProject ) ), is( nullValue() ) ); } @Test public void disconnectedDependencyGraphsFindNothing() throws Exception { // [p1->p2,p3], ?p2,p3 => [] IJavaProject project = addProject( "p1" ); IJavaProject dependency = addProject( "p2" ); addDependency( project, dependency ); IJavaProject unrelatedProject = addProject( "p3" ); assertThat( finder.findFor( asList( dependency, unrelatedProject ) ), is( nullValue() ) ); } }