// This product is provided under the terms of EPL (Eclipse Public License)
// version 1.0.
//
// The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php
package org.dtangler.javaengine.dependencyengine;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.dtangler.core.configuration.Arguments;
import org.dtangler.core.dependencies.Dependable;
import org.dtangler.core.dependencies.Dependencies;
import org.dtangler.core.dependencies.DependencyGraph;
import org.dtangler.core.testutil.ClassPathEntryFinder;
import org.dtangler.javaengine.dependencyengine.JavaDependencyEngine;
import org.dtangler.javaengine.types.JavaScope;
import org.junit.Test;
public class JavaDependencyEngineTest {
private final String path1 = ClassPathEntryFinder
.getPathContaining("testdata-cyclic");
private final String path2 = ClassPathEntryFinder
.getPathContaining("testdata-good-deps");
List<String> path = Arrays.asList(path2);
@Test
public void testGetJarDependencies() {
String path = ClassPathEntryFinder.getPathContaining("core")
+ "/org/dtangler/core/acceptancetests/testdata/jarexample.jar";
Arguments args = new Arguments();
args.setInput(Arrays.asList(path));
JavaDependencyEngine engine = new JavaDependencyEngine();
Dependencies jarDeps = engine.getDependencies(args);
Set<Dependable> allItems = jarDeps.getAllItems();
assertEquals("one jar location, one package, two class files", 4,
allItems.size());
}
@Test
public void testDefaultScopeDependencies() {
Arguments defaultArgs = new Arguments();
defaultArgs.setInput(path);
testGetPackageDependencies(defaultArgs);
}
@Test
public void testLocationScopeDependencies() {
Arguments args = new Arguments();
args.setInput(Arrays.asList(path1, path2));
args.setScope(JavaScope.locations.getDisplayName());
JavaDependencyEngine engine = new JavaDependencyEngine();
DependencyGraph deps = engine.getDependencies(args).getDependencyGraph();
List<String> items = getItemNames(deps.getAllItems());
assertTrue(items.containsAll(Arrays.asList(path1, path2)));
}
@Test
public void testPackageScopeDependencies() {
Arguments packageArgs = new Arguments();
packageArgs.setInput(path);
packageArgs.setScope("packages");
testGetPackageDependencies(packageArgs);
}
@Test
public void testClassScopeDependencies() {
Arguments classArgs = new Arguments();
classArgs.setInput(path);
classArgs.setScope("classes");
JavaDependencyEngine engine = new JavaDependencyEngine();
DependencyGraph deps = engine.getDependencies(classArgs)
.getDependencyGraph();
List<String> items = getItemNames(deps.getAllItems());
assertEquals(6, items.size());
assertTrue(items.containsAll(new HashSet(Arrays.asList(
"MySecondClient", "MyClient", "MyService", "AnotherClass",
"MyApi", "YetAnotherClass"))));
}
private void testGetPackageDependencies(Arguments args) {
JavaDependencyEngine engine = new JavaDependencyEngine();
DependencyGraph deps = engine.getDependencies(args).getDependencyGraph();
List<String> items = getItemNames(deps.getAllItems());
assertEquals(3, items.size());
assertTrue(items.contains("eg.foo.good.deps.client"));
assertTrue(items.contains("eg.foo.good.deps.impl"));
assertTrue(items.contains("eg.foo.good.deps.api"));
}
private List<String> getItemNames(Set<Dependable> items) {
List<String> names = new ArrayList();
for (Dependable dep : items) {
names.add(dep.getDisplayName());
}
return names;
}
}