/* * Copyright (C) 2015 Red Hat, Inc. and/or its affiliates. * * 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.jboss.errai.forge.facet.plugin; import org.jboss.errai.forge.facet.aggregate.CoreFacet; import org.jboss.errai.forge.test.base.ForgeTest; import org.jboss.forge.addon.dependencies.builder.CoordinateBuilder; import org.jboss.forge.addon.maven.plugins.*; import org.jboss.forge.addon.maven.projects.MavenPluginFacet; import org.jboss.forge.addon.projects.Project; import org.junit.Before; import org.junit.Test; import static org.jboss.errai.forge.constant.DefaultVault.DefaultValue.WarSourceDirectory; import static org.junit.Assert.*; public class WarSourceDirectoryTest extends ForgeTest { private Project project; @Before public void setup() { project = createErraiTestProject(); } @Test public void useDefaultWhenNoDirectoryDefined() throws Exception { facetFactory.install(project, CoreFacet.class); assertWarSourceDirectoryIsUsed(WarSourceDirectory.getDefaultValue()); } @Test public void useGivenWarSourceDirectory() throws Exception { final MavenPluginFacet pluginFacet = project.getFacet(MavenPluginFacet.class); final MavenPlugin warPlugin = MavenPluginBuilder.create().setCoordinate(CoordinateBuilder.create() .setGroupId("org.apache.maven.plugins").setArtifactId("maven-war-plugin")); final String warSourceDirectory = "war"; warPlugin.getConfig() .addConfigurationElement( ConfigurationElementBuilder.create().setName(WarSourceDirectory.getValueName()) .setText(warSourceDirectory)); pluginFacet.addPlugin(warPlugin); facetFactory.install(project, CoreFacet.class); assertWarSourceDirectoryIsUsed(warSourceDirectory); } private void assertWarSourceDirectoryIsUsed(final String warSourceDirectory) { final MavenPluginFacet pluginFacet = project.getFacet(MavenPluginFacet.class); final ConfigurationElement gwtMavenHostedWebapp = getGwtMavenPluginHostedWebapp(pluginFacet); final ConfigurationElement cleanPluginIncludes = getCleanPluginIncludes(pluginFacet); final ConfigurationElement warSourceElement = getWarSourceDirectory(project.getFacet(WarPluginFacet.class)); assertWarSourceDirectoryInIncludes(warSourceDirectory, cleanPluginIncludes); assertEquals(warSourceDirectory, gwtMavenHostedWebapp.getText()); assertEquals(warSourceDirectory, warSourceElement.getText()); } private ConfigurationElement getWarSourceDirectory(final WarPluginFacet warPluginFacet) { for (final ConfigurationElement configElement : warPluginFacet.getConfigurations()) { if (configElement.getName().equals(WarSourceDirectory.getValueName())) { return configElement; } } fail("Could not find war source directory configuration."); return null; } private void assertWarSourceDirectoryInIncludes(final String warSourceDirectory, final ConfigurationElement includesElement) { assertNotNull(includesElement); for (final PluginElement include : includesElement.getChildren()) { final String text = ((ConfigurationElement) include).getText(); if (text.contains("WEB-INF")) { assertTrue(text.startsWith(warSourceDirectory)); } } } private ConfigurationElement getCleanPluginIncludes(final MavenPluginFacet pluginFacet) { final String groupId = "org.apache.maven.plugins"; final String artifactId = "maven-clean-plugin"; return getPlugin(pluginFacet, groupId, artifactId).getConfig().getConfigurationElement("filesets") .getChildByName("includes"); } private ConfigurationElement getGwtMavenPluginHostedWebapp(final MavenPluginFacet pluginFacet) { final String groupId = "org.codehaus.mojo"; final String artifactId = "gwt-maven-plugin"; return getPlugin(pluginFacet, groupId, artifactId).getConfig().getConfigurationElement("hostedWebapp"); } private MavenPlugin getPlugin(final MavenPluginFacet pluginFacet, final String groupId, final String artifactId) { return pluginFacet.getPlugin(CoordinateBuilder.create().setGroupId(groupId).setArtifactId(artifactId)); } }