/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/
package org.ebayopensource.turmeric.eclipse.mavenapi.test.impl;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.IOUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.repository.metadata.ArtifactMetadata;
import org.ebayopensource.turmeric.eclipse.mavenapi.MavenApiPlugin;
import org.ebayopensource.turmeric.eclipse.mavenapi.exception.MavenEclipseApiException;
import org.ebayopensource.turmeric.eclipse.mavenapi.impl.EclipseArtifactMetadata;
import org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseApi;
import org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil;
import org.ebayopensource.turmeric.eclipse.mavenapi.request.AbstractProjectMavenizationRequest;
import org.ebayopensource.turmeric.eclipse.mavenapi.request.ProjectMavenizationRequest;
import org.ebayopensource.turmeric.eclipse.maveneclipseapi.test.request.TestProjectMavenizationRequestRaw;
import org.ebayopensource.turmeric.eclipse.utils.collections.ListUtil;
import org.ebayopensource.turmeric.eclipse.utils.plugin.WorkspaceUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.JavaCore;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* @author yayu
*
*/
public class TestMavenEclipseUtil {
private static MavenEclipseApi api;
private static final String MAVEN_GROUP_ID = "org.ebayopensource.turmeric.project";
private static IProject mavenProject;
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
api = (MavenEclipseApi)MavenApiPlugin.getDefault().getMavenEclipseApi();
api.refreshAllIndices();
int retry = 0;
try {
while (retry < 10 && api.findGroup("junit").isEmpty()) {
Thread.sleep(1000);
retry++;
}
} catch (Exception ex) {
// Swallow the exception
}
String projctName = "TestProjectUtil";
if (WorkspaceUtil.getProject(projctName).isAccessible()) {
mavenProject = WorkspaceUtil.getProject(projctName);
} else {
IPath workspaceRoot = ResourcesPlugin.getWorkspace().getRoot().getLocation();
IProgressMonitor monitor = new NullProgressMonitor();
IProject project = WorkspaceUtil.createProject(projctName, workspaceRoot, monitor);
final IProjectDescription description = project.getDescription();
final List<String> natureIDs = ListUtil.array(description
.getNatureIds());
natureIDs.add(JavaCore.NATURE_ID);
description.setNatureIds(natureIDs.toArray(new String[0]));
project.setDescription(description, monitor);
ProjectMavenizationRequest request = ProjectMavenizationRequest.createRequest(project);
final ArtifactMetadata artifact = new ArtifactMetadata( MAVEN_GROUP_ID, project.getName(), "1.0.0", "jar" );
request.setArtifact(artifact);
final Collection<ArtifactMetadata> dependencies = new ArrayList<ArtifactMetadata>();
ArtifactMetadata metadata = new EclipseArtifactMetadata("junit", "junit", "4.4");
metadata.setType("jar");
dependencies.add(metadata);
request.setDependencies(dependencies);
//setup SOA app dir structure
request.setSourcePath("src");
request.setTestSourcePath("test");
/*request.setTestOutputPath("bin");
request.setOutputPath("bin");*/
api.mavenizeProject((AbstractProjectMavenizationRequest)request, new NullProgressMonitor());
mavenProject = project;
}
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#hasMavenNature(org.eclipse.core.resources.IProject)}.
* @throws CoreException
*/
@Test
public void testHasMavenNature() throws CoreException {
Assert.assertTrue(MavenEclipseUtil.hasMavenNature(mavenProject));
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#getAllMavenProjectsInWorkspace()}.
* @throws CoreException
*/
@Test
public void testGetAllMavenProjectsInWorkspace() throws CoreException {
Assert.assertTrue("Can not find the TestProject", MavenEclipseUtil.getAllMavenProjectsInWorkspace().contains(mavenProject));
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#readPOM(org.eclipse.core.resources.IProject)}.
* @throws Exception
*/
@Test
public void testReadPOM() throws Exception {
Model model = MavenEclipseUtil.readPOM(mavenProject);
Assert.assertNotNull(model);
Assert.assertEquals(MAVEN_GROUP_ID, model.getGroupId());
Assert.assertEquals(mavenProject.getName(), model.getArtifactId());
Model pModel = api.parsePom(mavenProject);
Assert.assertNotNull(pModel);
Assert.assertEquals(MAVEN_GROUP_ID, pModel.getGroupId());
Assert.assertEquals(mavenProject.getName(), pModel.getArtifactId());
IFile file = mavenProject.getFile("pom.xml");
pModel = api.parsePom(file);
Assert.assertNotNull(pModel);
Assert.assertEquals(MAVEN_GROUP_ID, pModel.getGroupId());
Assert.assertEquals(mavenProject.getName(), pModel.getArtifactId());
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseApi#writePom(org.eclipse.core.resources.IFile, org.apache.maven.model.Model)}.
* @throws Exception
*/
@Test
public void testWritePom() throws Exception {
URL url = TestProjectMavenizationRequestRaw.class.getResource("pom.xml");
Assert.assertNotNull(url);
InputStream ins = null;
try {
ins = url.openStream();
Model model = api.parsePom(ins);
Assert.assertNotNull(model);
IFile file = mavenProject.getFile("new-pom.xml");
api.writePom(file, model);
} finally {
IOUtils.closeQuietly(ins);
}
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#getAllProjectArtifactsInWorkspace()}.
*/
@Test
public void testGetAllProjectArtifactsInWorkspace() {
boolean found = false;
for(IProject project : MavenEclipseUtil.getAllProjectArtifactsInWorkspace().values()) {
if (project.getName().equals(mavenProject.getName())) {
found = true;
break;
}
}
Assert.assertTrue("Could not find TestProject", found);
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#getAllProjectArtifactIdsInWorkspace()}.
*/
@Test
public void testGetAllProjectArtifactIdsInWorkspace() {
Map<String, IProject> data = MavenEclipseUtil.getAllProjectArtifactIdsInWorkspace();
Assert.assertTrue(data.values().contains(mavenProject));
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#getPomFile(org.eclipse.core.resources.IProject)}.
*/
@Test
public void testGetPomFile() {
Assert.assertNotNull(MavenEclipseUtil.getPomFile(mavenProject));
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#artifact(org.apache.maven.repository.metadata.ArtifactMetadata)}.
* @throws MavenEclipseApiException
*/
@Test
public void testArtifact() throws MavenEclipseApiException {
ArtifactMetadata metadata = new EclipseArtifactMetadata("android", "junit", "4.4");
metadata.setType("jar");
Artifact artifact = MavenEclipseUtil.artifact(metadata);
Assert.assertNotNull(artifact);
Assert.assertEquals(metadata.getGroupId(), artifact.getGroupId());
Assert.assertEquals(metadata.getArtifactId(), artifact.getArtifactId());
Assert.assertEquals(metadata.getVersion(), artifact.getVersion());
Assert.assertEquals(metadata.getType(), artifact.getType());
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#convertToArtifactMetadata(org.apache.maven.model.Model)}.
* @throws CoreException
*/
@Test
public void testConvertToArtifactMetadata() throws CoreException {
Model model = MavenEclipseUtil.readPOM(mavenProject);
Assert.assertNotNull(model);
ArtifactMetadata metadata = MavenEclipseUtil.convertToArtifactMetadata(model);
Assert.assertNotNull(metadata);
Assert.assertEquals(model.getGroupId(), metadata.getGroupId());
Assert.assertEquals(model.getArtifactId(), metadata.getArtifactId());
Assert.assertEquals(model.getVersion(), metadata.getVersion());
Assert.assertEquals(model.getPackaging(), metadata.getType());
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#artifactMetadata(java.lang.String)}.
*/
@Test
public void testArtifactMetadataString() {
ArtifactMetadata metadata = MavenEclipseUtil.artifactMetadata("android:rocks");
Assert.assertNotNull(metadata);
Assert.assertEquals("android", metadata.getGroupId());
Assert.assertEquals("rocks", metadata.getArtifactId());
Assert.assertNull(metadata.getVersion());
metadata = MavenEclipseUtil.artifactMetadata("android:rocks:jar:4.4");
Assert.assertNotNull(metadata);
Assert.assertEquals("android", metadata.getGroupId());
Assert.assertEquals("rocks", metadata.getArtifactId());
Assert.assertEquals("4.4", metadata.getVersion());
Assert.assertEquals("jar", metadata.getType());
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#artifactMetadata(org.apache.maven.model.Dependency)}.
*/
@Test
public void testArtifactMetadataDependency() {
Dependency dependency = new Dependency();
dependency.setGroupId("android");
dependency.setArtifactId("rocks");
dependency.setVersion("1.0");
dependency.setType("jar");
ArtifactMetadata metadata = MavenEclipseUtil.artifactMetadata(dependency);
Assert.assertNotNull(metadata);
Assert.assertEquals(dependency.getGroupId(), metadata.getGroupId());
Assert.assertEquals(dependency.getArtifactId(), metadata.getArtifactId());
Assert.assertEquals(dependency.getVersion(), metadata.getVersion());
Assert.assertEquals(dependency.getType(), metadata.getType());
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#artifactMetadata(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)}.
*/
@Test
public void testArtifactMetadataStringStringStringStringStringString() {
ArtifactMetadata metadata = MavenEclipseUtil.artifactMetadata("android", "rocks", "1.0", "jar", "compile", "clssifier");
Assert.assertNotNull(metadata);
Assert.assertEquals("android", metadata.getGroupId());
Assert.assertEquals("rocks", metadata.getArtifactId());
Assert.assertEquals("1.0", metadata.getVersion());
Assert.assertEquals("jar", metadata.getType());
Assert.assertEquals("compile", metadata.getScope());
Assert.assertEquals("clssifier", metadata.getClassifier());
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#artifactMetadata(java.lang.String, java.lang.String, java.lang.String, java.lang.String)}.
*/
@Test
public void testArtifactMetadataStringStringStringString() {
ArtifactMetadata metadata = MavenEclipseUtil.artifactMetadata("android", "rocks", "1.0", "jar");
Assert.assertNotNull(metadata);
Assert.assertEquals("android", metadata.getGroupId());
Assert.assertEquals("rocks", metadata.getArtifactId());
Assert.assertEquals("1.0", metadata.getVersion());
Assert.assertEquals("jar", metadata.getType());
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#artifactMetadata(org.apache.maven.artifact.Artifact)}.
* @throws MavenEclipseApiException
*/
@Test
public void testArtifactMetadataArtifact() throws MavenEclipseApiException {
ArtifactMetadata metadata = MavenEclipseUtil.artifactMetadata("android", "rocks", "1.0", "jar");
Artifact artifact = MavenEclipseUtil.artifact(metadata);
Assert.assertNotNull(artifact);
Assert.assertEquals(metadata.getGroupId(), artifact.getGroupId());
Assert.assertEquals(metadata.getArtifactId(), artifact.getArtifactId());
Assert.assertEquals(metadata.getVersion(), artifact.getVersion());
Assert.assertEquals(metadata.getType(), artifact.getType());
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#artifactMetadata(org.apache.maven.model.Model)}.
* @throws CoreException
*/
@Test
public void testArtifactMetadataModel() throws CoreException {
Model model = MavenEclipseUtil.readPOM(mavenProject);
Assert.assertNotNull(model);
ArtifactMetadata metadata = MavenEclipseUtil.artifactMetadata(model);
Assert.assertNotNull(metadata);
Assert.assertEquals(model.getGroupId(), metadata.getGroupId());
Assert.assertEquals(model.getArtifactId(), metadata.getArtifactId());
Assert.assertEquals(model.getVersion(), metadata.getVersion());
Assert.assertEquals(model.getPackaging(), metadata.getType());
Assert.assertNull(MavenEclipseUtil.artifactMetadata((Model)null));
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#dependency(org.apache.maven.repository.metadata.ArtifactMetadata)}.
*/
@Test
public void testDependencyArtifactMetadata() {
ArtifactMetadata metadata = MavenEclipseUtil.artifactMetadata("android", "rocks", "1.0", "jar");
Dependency dependency = MavenEclipseUtil.dependency(metadata);
Assert.assertNotNull(dependency);
Assert.assertEquals(metadata.getGroupId(), dependency.getGroupId());
Assert.assertEquals(metadata.getArtifactId(), dependency.getArtifactId());
Assert.assertEquals(metadata.getVersion(), dependency.getVersion());
Assert.assertEquals(metadata.getType(), dependency.getType());
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#dependency(org.apache.maven.model.Model)}.
*/
@Test
public void testDependencyModel() {
Assert.assertNull(MavenEclipseUtil.dependency((Model)null));
}
/**
* Test method for {@link org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil#getArtifactPOMFile(org.apache.maven.artifact.Artifact)}.
* @throws MavenEclipseApiException
*/
@Test
public void testGetArtifactPOMFile() throws MavenEclipseApiException {
Collection<Artifact> data = MavenApiPlugin.getDefault().getMavenEclipseApi()
.findArtifactByNameAndGroup("junit", "junit");
Assert.assertNotNull(data);
if (data.isEmpty() == false) {
Assert.assertFalse("could not find the artifact", data.isEmpty());
Artifact artifact = data.iterator().next();
MavenApiPlugin.getDefault().getMavenEclipseApi().resolveArtifact(artifact);
File file = MavenEclipseUtil.getArtifactPOMFile(artifact);
Assert.assertNotNull(file);
Assert.assertTrue(file.exists());
Assert.assertNull(MavenEclipseUtil.getArtifactPOMFile(null));
}
}
}