package org.robolectric.internal.dependency; import org.apache.maven.artifact.ant.DependenciesTask; import org.apache.maven.artifact.ant.RemoteRepository; import org.apache.maven.model.Dependency; import org.apache.tools.ant.Project; import org.junit.Before; import org.junit.Test; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import java.net.URL; import java.util.List; import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class MavenDependencyResolverTest { private static final String REPOSITORY_URL = "https://default-repo"; private static final String REPOSITORY_ID = "remote"; private DependenciesTask dependenciesTask; private Project project; @Before public void setUp() { dependenciesTask = spy(new DependenciesTask()); doNothing().when(dependenciesTask).execute(); doAnswer(new Answer() { @Override public Void answer(InvocationOnMock invocationOnMock) throws Throwable { invocationOnMock.callRealMethod(); Object[] args = invocationOnMock.getArguments(); project = (Project) args[0]; project.setProperty("group1:artifact1:jar", "path1"); project.setProperty("group2:artifact2:jar", "path2"); project.setProperty("group3:artifact3:jar:classifier3", "path3"); return null; } }).when(dependenciesTask).setProject(any(Project.class)); } @Test public void getLocalArtifactUrl_shouldAddConfiguredRemoteRepository() { DependencyResolver dependencyResolver = createResolver(); DependencyJar dependencyJar = new DependencyJar("group1", "artifact1", "", null); dependencyResolver.getLocalArtifactUrl(dependencyJar); List<RemoteRepository> repositories = dependenciesTask.getRemoteRepositories(); assertEquals(1, repositories.size()); RemoteRepository remoteRepository = repositories.get(0); assertEquals(REPOSITORY_URL, remoteRepository.getUrl()); assertEquals(REPOSITORY_ID, remoteRepository.getId()); } @Test public void getLocalArtifactUrl_shouldAddDependencyToDependenciesTask() { DependencyResolver dependencyResolver = createResolver(); DependencyJar dependencyJar = new DependencyJar("group1", "artifact1", "3", null); dependencyResolver.getLocalArtifactUrl(dependencyJar); List<Dependency> dependencies = dependenciesTask.getDependencies(); assertEquals(1, dependencies.size()); Dependency dependency = dependencies.get(0); assertEquals("group1", dependency.getGroupId()); assertEquals("artifact1", dependency.getArtifactId()); assertEquals("3", dependency.getVersion()); assertEquals("jar", dependency.getType()); assertNull(dependency.getClassifier()); } @Test public void getLocalArtifactUrl_shouldExecuteDependenciesTask() { DependencyResolver dependencyResolver = createResolver(); DependencyJar dependencyJar = new DependencyJar("group1", "artifact1", "", null); dependencyResolver.getLocalArtifactUrl(dependencyJar); verify(dependenciesTask).execute(); } @Test public void getLocalArtifactUrl_shouldReturnCorrectUrlForArtifactKey() { DependencyResolver dependencyResolver = createResolver(); DependencyJar dependencyJar = new DependencyJar("group1", "artifact1", "", null); URL url = dependencyResolver.getLocalArtifactUrl(dependencyJar); assertEquals("file:/path1", url.toExternalForm()); } @Test public void getLocalArtifactUrl_shouldReturnCorrectUrlForArtifactKeyWithClassifier() { DependencyResolver dependencyResolver = createResolver(); DependencyJar dependencyJar = new DependencyJar("group3", "artifact3", "", "classifier3"); URL url = dependencyResolver.getLocalArtifactUrl(dependencyJar); assertEquals("file:/path3", url.toExternalForm()); } private DependencyResolver createResolver() { return new MavenDependencyResolver(REPOSITORY_URL, REPOSITORY_ID) { @Override protected DependenciesTask createDependenciesTask() { return dependenciesTask; } }; } }