package net.bytebuddy.build.maven;
import net.bytebuddy.test.utility.MockitoRule;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.collection.CollectRequest;
import org.eclipse.aether.collection.CollectResult;
import org.eclipse.aether.collection.DependencyCollectionException;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.graph.DependencyVisitor;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.resolution.DependencyResolutionException;
import org.eclipse.aether.resolution.DependencyResult;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import java.io.File;
import java.util.Collections;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.*;
public class ClassLoaderResolverTest {
private static final String FOO = "foo", BAR = "bar", QUX = "qux", BAZ = "baz";
@Rule
public TestRule mockitoRule = new MockitoRule(this);
@Mock
private Log log;
@Mock
private RepositorySystem repositorySystem;
@Mock
private RepositorySystemSession repositorySystemSession;
@Mock
private DependencyNode root, child;
private ClassLoaderResolver classLoaderResolver;
@Before
public void setUp() throws Exception {
classLoaderResolver = new ClassLoaderResolver(log, repositorySystem, repositorySystemSession, Collections.<RemoteRepository>emptyList());
when(repositorySystem.collectDependencies(eq(repositorySystemSession), any(CollectRequest.class)))
.thenReturn(new CollectResult(new CollectRequest()).setRoot(root));
when(child.getDependency()).thenReturn(new Dependency(new DefaultArtifact(FOO,
BAR,
QUX,
BAZ,
FOO + BAR,
Collections.<String, String>emptyMap(),
new File(FOO + "/" + BAR)), QUX + BAZ));
when(root.accept(any(DependencyVisitor.class))).then(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
DependencyVisitor dependencyVisitor = invocationOnMock.getArgument(0);
dependencyVisitor.visitEnter(child);
dependencyVisitor.visitLeave(child);
return null;
}
});
}
@Test
public void testResolution() throws Exception {
assertThat(classLoaderResolver.resolve(new MavenCoordinate(FOO, BAR, QUX)), sameInstance(classLoaderResolver.resolve(new MavenCoordinate(FOO, BAR, QUX))));
}
@Test(expected = MojoExecutionException.class)
public void testCollectionFailure() throws Exception {
when(repositorySystem.collectDependencies(eq(repositorySystemSession), any(CollectRequest.class)))
.thenThrow(new DependencyCollectionException(new CollectResult(new CollectRequest())));
classLoaderResolver.resolve(new MavenCoordinate(FOO, BAR, QUX));
}
@Test(expected = MojoExecutionException.class)
public void testResolutionFailure() throws Exception {
when(repositorySystem.resolveDependencies(eq(repositorySystemSession), any(DependencyRequest.class)))
.thenThrow(new DependencyResolutionException(new DependencyResult(new DependencyRequest(root, mock(DependencyFilter.class))), new Throwable()));
classLoaderResolver.resolve(new MavenCoordinate(FOO, BAR, QUX));
}
@Test
public void testClose() throws Exception {
classLoaderResolver.resolve(new MavenCoordinate(FOO, BAR, QUX));
classLoaderResolver.close();
}
}