/** * Copyright (c) 2010, 2013 Darmstadt University of Technology. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Olav Lenz - initial API and implementation */ package org.eclipse.recommenders.coordinates.maven; import static java.nio.charset.StandardCharsets.*; import static org.eclipse.recommenders.coordinates.DependencyType.PROJECT; import static org.junit.Assert.*; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.Charset; import org.eclipse.recommenders.coordinates.DependencyInfo; import org.eclipse.recommenders.coordinates.IProjectCoordinateAdvisor; import org.eclipse.recommenders.coordinates.ProjectCoordinate; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import com.google.common.base.Optional; public class MavenPomXmlAdvisorTest { @Rule public final TemporaryFolder folder = new TemporaryFolder(); private DependencyInfo info; @Before public void init() throws IOException { info = new DependencyInfo(folder.getRoot(), PROJECT); } @Test public void testProjectCoordinateExtractedFromSimplePom() throws IOException { writePomFile(folder.newFile("pom.xml"), UTF_8, "org.example", "artifact", "1.0.0-SNAPSHOT"); IProjectCoordinateAdvisor sut = new MavenPomXmlAdvisor(); Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(info); ProjectCoordinate expected = new ProjectCoordinate("org.example", "artifact", "1.0.0"); assertEquals(expected, optionalProjectCoordinate.get()); } @Test public void testProjectCoordinateExtractedFromSimplePomInUtf16() throws IOException { writePomFile(folder.newFile("pom.xml"), UTF_16, "org.example", "artifact", "1.0.0-SNAPSHOT"); IProjectCoordinateAdvisor sut = new MavenPomXmlAdvisor(); Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(info); ProjectCoordinate expected = new ProjectCoordinate("org.example", "artifact", "1.0.0"); assertEquals(expected, optionalProjectCoordinate.get()); } @Test public void testVariablesInPomResultInAbsent() throws IOException { writePomFile(folder.newFile("pom.xml"), UTF_8, "${groupId}", "${artifactId}", "${version}"); IProjectCoordinateAdvisor sut = new MavenPomXmlAdvisor(); Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(info); assertFalse(optionalProjectCoordinate.isPresent()); } @Test public void testMissingValuesInPomWithoutParentResultInAbsent() throws IOException { writePomFile(folder.newFile("pom.xml"), UTF_8, null, "artifact", null); IProjectCoordinateAdvisor sut = new MavenPomXmlAdvisor(); Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(info); assertFalse(optionalProjectCoordinate.isPresent()); } @Test public void testMissingValuesAreTakenFromParent() throws IOException { writePomFile(folder.newFile("pom.xml"), UTF_8, null, "artifact", null, "org.example", "parent", "1.0.0-SNAPSHOT"); IProjectCoordinateAdvisor sut = new MavenPomXmlAdvisor(); Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(info); ProjectCoordinate expected = new ProjectCoordinate("org.example", "artifact", "1.0.0"); assertEquals(expected, optionalProjectCoordinate.get()); } private static void writePomFile(File file, Charset charset, String groupId, String artifactId, String version) throws IOException { writePomFile(file, charset, groupId, artifactId, version, null, null, null); } private static void writePomFile(File file, Charset charset, String groupId, String artifactId, String version, String parentGroupId, String parentArtifactId, String parentVersion) throws IOException { FileOutputStream out = new FileOutputStream(file); OutputStreamWriter writer = new OutputStreamWriter(out, charset); writer.append("<?xml version='1.0' encoding='").append(charset.name()).append("'?>\n"); writer.append("<project xmlns='http://maven.apache.org/POM/4.0.0'\n") .append("xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n") .append("xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd'>\n"); writer.append("<modelVersion>4.0.0</modelVersion>"); writer.append("<parent>\n"); if (parentGroupId != null) { writer.append("<groupId>").append(parentGroupId).append("</groupId>\n"); } if (parentArtifactId != null) { writer.append("<artifactId>").append(parentArtifactId).append("</artifactId>\n"); } if (parentVersion != null) { writer.append("<version>").append(parentVersion).append("</version>\n"); } writer.append("</parent>\n"); if (groupId != null) { writer.append("<groupId>").append(groupId).append("</groupId>\n"); } if (artifactId != null) { writer.append("<artifactId>").append(artifactId).append("</artifactId>\n"); } if (version != null) { writer.append("<version>").append(version).append("</version>\n"); } writer.append("</project>\n"); writer.close(); } }