import static org.fest.assertions.api.Assertions.assertThat;
import java.util.Collections;
import java.util.Set;
import org.fest.assertions.api.IterableAssert;
import org.junit.Test;
import com.google.common.collect.Sets;
public class DependencyTest {
@Test
public void it_should_return_empty_dependencies_for_a_single_package(){
assertDependencies("A", DependencyBuilder.dependencyBuilder(), Collections.EMPTY_SET);
}
@Test
public void it_should_return_child_for_source_with_single_dependency(){
DependencyBuilder dependencyBuilder = DependencyBuilder.dependencyBuilder()
.addDependency("A", "B","C");
assertDependencies("A", dependencyBuilder, Sets.newHashSet("B", "C"));
}
@Test
public void it_should_return_dependencies_for_source_with_2_levels_dependency_with_one_dependency_each(){
DependencyBuilder dependencyBuilder = DependencyBuilder.dependencyBuilder()
.addDependency("A", "B")
.addDependency("B","C");
assertDependencies("A", dependencyBuilder,Sets.newHashSet("B", "C") );
}
@Test
public void it_should_return_child_of_child_for_source_with_2_level_dependency_with_two_dependencies(){
DependencyBuilder dependencyBuilder = DependencyBuilder.dependencyBuilder()
.addDependency("A", "B","D")
.addDependency("D","C");
assertDependencies("A", dependencyBuilder, Sets.newHashSet("B", "D", "C"));
}
@Test
public void it_should_avoid_cycles(){
DependencyBuilder dependencyBuilder = DependencyBuilder.dependencyBuilder()
.addDependency("A", "B")
.addDependency("B","A");
assertDependencies("A", dependencyBuilder, Sets.newHashSet("B"));
}
@Test
public void acceptance_test(){
DependencyBuilder dependencyBuilder = DependencyBuilder.dependencyBuilder()
.addDependency("A", "B", "C")
.addDependency("B", "C", "E")
.addDependency("C", "G")
.addDependency("D", "A", "F")
.addDependency("E", "F")
.addDependency("F", "H");
assertDependencies("A", dependencyBuilder, Sets.newHashSet("B", "C", "E", "F", "G", "H"));
}
private IterableAssert assertDependencies(String source, DependencyBuilder dependencyBuilder, Set expected) {
return assertThat(dependencyBuilder.build().compute(source)).isEqualTo(expected);
}
}