/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * 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: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.model.ext.maven.internal; import static org.eclipse.skalli.model.ext.maven.MavenCoordinateUtil.*; import static org.eclipse.skalli.model.ext.maven.MavenPomUtility.*; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import java.io.IOException; import java.util.HashMap; import java.util.UUID; import org.eclipse.skalli.model.ValidationException; import org.eclipse.skalli.model.ext.maven.MavenModule; import org.eclipse.skalli.model.ext.maven.MavenPomResolver; import org.eclipse.skalli.model.ext.maven.MavenReactor; import org.eclipse.skalli.testutil.TestUUIDs; import org.junit.Test; @SuppressWarnings("nls") public class MavenResolverTest { private static final String SCM_LOCATION = "scm"; private static final String RELATIVE_ROOT_POM_PATH = ""; /** * use {@link MavenPomResolverMock#addExpectedPom(String, MavenPom)} to add poms, * which should be returned when {@link MavenPomResolverMock#getMavenPom(UUID, String, String)} * is called. */ class MavenPomResolverMock implements MavenPomResolver { private String scmLocation; public MavenPomResolverMock(String scmLocation) { super(); this.scmLocation = scmLocation; } void addExpectedPom(String relativePath, MavenPom toReturnPom) { pomMap.put(relativePath, toReturnPom); } private HashMap<String, MavenPom> pomMap = new HashMap<String, MavenPom>(); @Override public MavenPom getMavenPom(UUID project, String scmLocation, String relativePath) throws IOException, ValidationException { if (this.scmLocation.equals(scmLocation)) { return pomMap.get(relativePath); } else { return null; } } @Override public boolean canResolve(String scmLocation) { return true; } } @Test public void testPomNoParent() throws Exception { MavenPomResolverMock pomReslover = new MavenPomResolverMock(SCM_LOCATION); pomReslover.addExpectedPom(RELATIVE_ROOT_POM_PATH, getParentPom()); MavenReactor expected = new MavenReactor(); expected.setCoordinate(TEST_PARENT_COORD); MavenResolver resolver = new MavenResolver(TestUUIDs.TEST_UUIDS[0], pomReslover); assertThat(resolver.resolve(SCM_LOCATION, RELATIVE_ROOT_POM_PATH), is(expected)); } @Test public void testPomWithParent() throws Exception { MavenPom mavenParentPom = new MavenPom(); mavenParentPom.setSelf(new MavenModule(null, PARENT_ARTIFACT, PARENT_PACKAGING)); //group is null! it has to be calculated via parent.GroupId mavenParentPom.setParent(getParentCoordinates()); MavenPomResolverMock pomReslover = new MavenPomResolverMock(SCM_LOCATION); pomReslover.addExpectedPom(RELATIVE_ROOT_POM_PATH, mavenParentPom); MavenReactor expected = new MavenReactor(); expected.setCoordinate(TEST_PARENT_COORD); MavenResolver resolver = new MavenResolver(TestUUIDs.TEST_UUIDS[0], pomReslover); assertThat(resolver.resolve(SCM_LOCATION, RELATIVE_ROOT_POM_PATH), is(expected)); } @Test public void testPomWithModules() throws Exception { MavenPom parentPom = getParentPom(); MavenPom module1 = asModulePom(TEST_PARENT_COORD, MODULE1); MavenPom module2 = asModulePom(TEST_PARENT_COORD, MODULE2); parentPom.getModuleTags().add(MODULE1); parentPom.getModuleTags().add(MODULE2); MavenPomResolverMock pomReslover = new MavenPomResolverMock(SCM_LOCATION); pomReslover.addExpectedPom(RELATIVE_ROOT_POM_PATH, parentPom); pomReslover.addExpectedPom(MODULE1, module1); pomReslover.addExpectedPom(MODULE2, module2); MavenReactor expected = new MavenReactor(); expected.setCoordinate(TEST_PARENT_COORD); expected.addModule(getModuleCoordinate(MODULE1)); expected.addModule(getModuleCoordinate(MODULE2)); MavenResolver resolver = new MavenResolver(TestUUIDs.TEST_UUIDS[0], pomReslover); assertThat(resolver.resolve(SCM_LOCATION, RELATIVE_ROOT_POM_PATH), is(expected)); } @Test public void testPomWithModulesContainingModules() throws Exception { MavenPom parentPom = getParentPom(); MavenPom module1 = asModulePom(TEST_PARENT_COORD, MODULE1); MavenPom module2 = asModulePom(TEST_PARENT_COORD, MODULE2); parentPom.getModuleTags().add(MODULE1); module1.getModuleTags().add(MODULE2); MavenPomResolverMock pomReslover = new MavenPomResolverMock(SCM_LOCATION); pomReslover.addExpectedPom(RELATIVE_ROOT_POM_PATH, parentPom); pomReslover.addExpectedPom(MODULE1, module1); pomReslover.addExpectedPom(MODULE1 + "/" + MODULE2, module2); MavenReactor expected = new MavenReactor(); expected.setCoordinate(TEST_PARENT_COORD); expected.addModule(getModuleCoordinate(MODULE1)); expected.addModule(getModuleCoordinate(MODULE2)); MavenResolver resolver = new MavenResolver(TestUUIDs.TEST_UUIDS[0], pomReslover); assertThat(resolver.resolve(SCM_LOCATION, RELATIVE_ROOT_POM_PATH), is(expected)); } private MavenModule getModuleCoordinate(String moduleName) { return new MavenModule(GROUPID, moduleName, PACKAGING); } private MavenPom asModulePom(MavenModule parent, String moduleName) { MavenPom pom = new MavenPom(); pom.setSelf(getModuleCoordinate(moduleName)); pom.setParent(parent); return pom; } private MavenPom getParentPom() { MavenPom mavenParentPom = new MavenPom(); mavenParentPom.setSelf(new MavenModule(PARENT_GROUPID, PARENT_ARTIFACT, PARENT_PACKAGING)); return mavenParentPom; } }