package de.is24.deadcode4j;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static de.is24.deadcode4j.ModuleBuilder.givenModule;
import static java.util.Arrays.asList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
public final class A_Module {
@Test
public void sortsModulesByDependency() {
Module c = givenModule("C");
Module b = givenModule("B", c);
Module a = givenModule("A", b);
Iterable<Module> modules = Module.sort(asList(b, a, c));
assertThat(modules, contains(c, b, a));
}
@Test
public void sortsUnrelatedModulesAlphabetically() {
Module a = givenModule("A");
Module b = givenModule("B");
Module c = givenModule("C");
Iterable<Module> modules = Module.sort(asList(c, b, a));
assertThat(modules, contains(a, b, c));
}
@Test
public void sortsReallyComplexDependencyGraphCorrectly() {
Module z = givenModule("Z");
Module y = givenModule("Y", z);
Module c = givenModule("C", z);
Module b = givenModule("B", c, y);
Module a = givenModule("A", b);
Module x = givenModule("X", c);
List<Module> unsortedModules = asList(a, b, c, x, y, z);
Collections.shuffle(unsortedModules);
Iterable<Module> modules = Module.sort(unsortedModules);
assertThat(modules, contains(z, c, y, b, x, a));
}
@Test(expected = RuntimeException.class)
public void throwsExceptionIfSortingFails() {
ArrayList<Resource> dependencies = new ArrayList<Resource>();
Module a = givenModule("A", null, dependencies);
Module b = givenModule("B", a);
dependencies.add(Resource.of(b));
Module.sort(asList(a, b));
}
}