package org.molgenis.util;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.molgenis.data.MolgenisDataException;
import org.testng.annotations.Test;
import java.util.Set;
import static java.util.Objects.requireNonNull;
import static org.testng.Assert.assertEquals;
public class GenericDependencyResolverTest
{
private GenericDependencyResolver genericDependencyResolver = new GenericDependencyResolver();
private class DependentOn
{
private final Set<DependentOn> dependencies = Sets.newHashSet();
private final String label;
DependentOn(String label)
{
this.label = requireNonNull(label);
}
Set<DependentOn> getDependencies()
{
return dependencies;
}
void addDependency(DependentOn dependentOn)
{
dependencies.add(dependentOn);
}
@Override
public String toString()
{
return label;
}
}
@Test(expectedExceptions = MolgenisDataException.class)
public void testCyclicDepencencies()
{
DependentOn d1 = new DependentOn("1");
DependentOn d2 = new DependentOn("2");
DependentOn d3 = new DependentOn("3");
d1.addDependency(d2);
d2.addDependency(d3);
d3.addDependency(d1);
genericDependencyResolver.resolve(Sets.newHashSet(d1, d2, d3), DependentOn::getDependencies);
}
@Test
public void testResolveTransientDependency()
{
DependentOn d1 = new DependentOn("1");
DependentOn d2 = new DependentOn("2");
DependentOn d3 = new DependentOn("3");
d1.addDependency(d2);
d2.addDependency(d3);
assertEquals(Lists.newArrayList(d3, d2, d1),
genericDependencyResolver.resolve(Sets.newHashSet(d1, d2, d3), DependentOn::getDependencies));
}
}