/* * Copyright 2014 Bernd Vogt and others. * * 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 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.sourcepit.b2.internal.generator; import static org.hamcrest.core.IsEqual.equalTo; import static org.hamcrest.core.IsNull.notNullValue; import static org.junit.Assert.assertThat; import static org.sourcepit.b2.files.ModuleDirectory.FLAG_DERIVED; import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import javax.inject.Inject; import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Model; import org.apache.maven.model.io.DefaultModelReader; import org.apache.maven.model.io.ModelReader; import org.apache.maven.plugin.LegacySupport; import org.apache.maven.project.MavenProject; import org.junit.Test; import org.sourcepit.b2.execution.B2Request; import org.sourcepit.b2.files.ModuleDirectory; import org.sourcepit.b2.internal.maven.MavenB2RequestFactory; import org.sourcepit.b2.model.builder.IB2ModelBuilder; import org.sourcepit.b2.model.builder.internal.tests.harness.AbstractB2SessionWorkspaceTest2; import org.sourcepit.b2.model.module.AbstractModule; import org.sourcepit.b2.model.module.PluginProject; import org.sourcepit.b2.model.module.PluginsFacet; import org.sourcepit.b2.model.module.Project; import org.sourcepit.b2.model.module.ProjectFacet; import org.sourcepit.common.maven.testing.MavenExecutionResult2; public class PerProjectPomTemplateTest extends AbstractB2SessionWorkspaceTest2 { @Inject private LegacySupport legacySupport; @Inject private MavenB2RequestFactory b2SessionInitializer; @Inject private IB2ModelBuilder modelBuilder; @Inject private PomGenerator pomGenerator; @Test public void test() throws Exception { final File projectDir = getResource("feature_53_per-project-pom-templates"); final MavenExecutionResult2 result = buildProject(new File(projectDir, "module.xml")); final MavenSession mavenSession = result.getSession(); legacySupport.setSession(mavenSession); final List<MavenProject> projects = mavenSession.getProjects(); final Properties properties = new Properties(); properties.putAll(mavenSession.getSystemProperties()); properties.putAll(mavenSession.getUserProperties()); for (MavenProject project : projects) { mavenSession.setCurrentProject(project); final B2Request b2Request = b2SessionInitializer.newB2Request(mavenSession, project); final AbstractModule module = modelBuilder.build(b2Request); final B2GenerationRequest request = new B2GenerationRequest(); request.setModule(module); ModuleDirectory moduleDirectory = new ModuleDirectory(module.getDirectory(), null); moduleDirectory.addFlags(new File(module.getDirectory(), ".b2"), FLAG_DERIVED); request.setModuleDirectory(moduleDirectory); request.setModuleProperties(b2Request.getModuleProperties()); request.setTemplates(b2Request.getTemplates()); final B2Generator generator = new B2Generator(Collections.singletonList(pomGenerator), Collections.<B2GeneratorLifecycleParticipant> emptyList()); generator.generate(request); PluginProject pluginProject = findProject(module, PluginsFacet.class, "org.sourcepit.b2.feature53.bundle"); assertThat(pluginProject, notNullValue()); Model pluginPom = readPom(new File(pluginProject.getDirectory(), "pom.xml")); // assert packaging NOT overridden assertThat(pluginPom.getPackaging(), equalTo("eclipse-plugin")); // assert entry from project template assertThat(pluginPom.getProperties().getProperty("type"), equalTo("plugin")); PluginProject testProject = findProject(module, PluginsFacet.class, "org.sourcepit.b2.feature53.bundle.tests"); assertThat(testProject, notNullValue()); Model testPom = readPom(new File(testProject.getDirectory(), "pom.xml")); // assert entry from project template assertThat(testPom.getProperties().getProperty("type"), equalTo("test")); } } private Model readPom(File pom) { final Map<String, String> options = new HashMap<String, String>(); options.put(ModelReader.IS_STRICT, Boolean.FALSE.toString()); try { return new DefaultModelReader().read(pom, options); } catch (IOException e) { throw new IllegalStateException(e); } } private <P extends Project> P findProject(AbstractModule module, Class<? extends ProjectFacet<P>> facetType, String projectId) { for (ProjectFacet<P> projectFacet : module.getFacets(facetType)) { final P project = projectFacet.getProjectById(projectId); if (project != null) { return project; } } return null; } }