Package org.jboss.forge.addon.addons.project

Source Code of org.jboss.forge.addon.addons.project.AddonProjectConfiguratorTest

/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.jboss.forge.addon.addons.project;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Collections;

import javax.inject.Inject;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.addon.addons.facets.AddonAPIFacet;
import org.jboss.forge.addon.addons.facets.AddonImplFacet;
import org.jboss.forge.addon.addons.facets.AddonParentFacet;
import org.jboss.forge.addon.addons.facets.AddonSPIFacet;
import org.jboss.forge.addon.addons.facets.AddonTestFacet;
import org.jboss.forge.addon.addons.facets.DefaultFurnaceContainerAPIFacet;
import org.jboss.forge.addon.addons.facets.DefaultFurnaceContainerFacet;
import org.jboss.forge.addon.addons.facets.ForgeBOMFacet;
import org.jboss.forge.addon.addons.facets.FurnaceAPIFacet;
import org.jboss.forge.addon.addons.facets.FurnacePluginFacet;
import org.jboss.forge.addon.dependencies.Dependency;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.facets.FacetNotFoundException;
import org.jboss.forge.addon.javaee.cdi.CDIFacet;
import org.jboss.forge.addon.javaee.cdi.CDIFacet_1_1;
import org.jboss.forge.addon.maven.projects.MavenFacet;
import org.jboss.forge.addon.parser.java.facets.JavaCompilerFacet;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.addon.projects.facets.DependencyFacet;
import org.jboss.forge.addon.projects.facets.MetadataFacet;
import org.jboss.forge.addon.projects.facets.ResourcesFacet;
import org.jboss.forge.addon.resource.DirectoryResource;
import org.jboss.forge.addon.resource.Resource;
import org.jboss.forge.arquillian.AddonDependency;
import org.jboss.forge.arquillian.Dependencies;
import org.jboss.forge.arquillian.archive.ForgeArchive;
import org.jboss.forge.furnace.Furnace;
import org.jboss.forge.furnace.addons.AddonId;
import org.jboss.forge.furnace.repositories.AddonDependencyEntry;
import org.jboss.forge.furnace.versions.Version;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
public class AddonProjectConfiguratorTest
{
   private static final String FORGE_ADDON_CLASSIFIER = "forge-addon";

   @Deployment
   @Dependencies({
            @AddonDependency(name = "org.jboss.forge.furnace.container:cdi"),
            @AddonDependency(name = "org.jboss.forge.addon:addons")
   })
   public static ForgeArchive getDeployment()
   {
      return ShrinkWrap.create(ForgeArchive.class).
               addBeansXML().
               addAsAddonDependencies(
                        AddonDependencyEntry.create("org.jboss.forge.addon:addons"),
                        AddonDependencyEntry.create("org.jboss.forge.addon:maven"),
                        AddonDependencyEntry.create("org.jboss.forge.addon:javaee"),
                        AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi")
               );
   }

   @Inject
   private AddonProjectConfigurator configurator;

   @Inject
   private ProjectFactory projectFactory;

   @Inject
   private Furnace furnace;

   @Test
   public void testComplexAddonProject() throws FileNotFoundException, FacetNotFoundException
   {
      Project project = projectFactory.createTempProject();
      project.getRoot().reify(DirectoryResource.class).deleteOnExit();

      MetadataFacet metadataFacet = project.getFacet(MetadataFacet.class);
      metadataFacet.setProjectName("testproject");
      metadataFacet.setProjectVersion("1.0.0-SNAPSHOT");
      metadataFacet.setProjectGroupName("com.acme.testproject");

      Version forgeVersion = furnace.getVersion();
      configurator.setupComplexAddonProject(project, forgeVersion, Collections.<AddonId> emptyList());
      Assert.assertTrue(project.hasFacet(AddonParentFacet.class));
      Assert.assertTrue(project.hasFacet(JavaCompilerFacet.class));
      Assert.assertFalse(project.hasFacet(JavaSourceFacet.class));
      Assert.assertFalse(project.hasFacet(CDIFacet.class));
      Assert.assertFalse(project.hasFacet(ResourcesFacet.class));
      Resource<?> projectRoot = project.getRoot();

      Assert.assertTrue("ADDON module is missing", projectRoot.getChild("addon").exists());
      Assert.assertTrue("API module is missing", projectRoot.getChild("api").exists());
      Assert.assertTrue("IMPL module is missing", projectRoot.getChild("impl").exists());
      Assert.assertTrue("SPI module is missing", projectRoot.getChild("spi").exists());
      Assert.assertTrue("TESTS module is missing", projectRoot.getChild("tests").exists());

      Project addonProject = projectFactory.findProject(projectRoot.getChild("addon"));
      Project apiProject = projectFactory.findProject(projectRoot.getChild("api"));
      Project implProject = projectFactory.findProject(projectRoot.getChild("impl"));
      Project spiProject = projectFactory.findProject(projectRoot.getChild("spi"));
      Project testsProject = projectFactory.findProject(projectRoot.getChild("tests"));

      Assert.assertTrue(project.hasFacet(ForgeBOMFacet.class));

      Assert.assertFalse(addonProject.hasFacet(ForgeBOMFacet.class));
      Assert.assertFalse(addonProject.hasFacet(JavaCompilerFacet.class));
      Assert.assertTrue(addonProject.hasFacet(JavaSourceFacet.class));
      Assert.assertTrue(addonProject.hasFacet(ResourcesFacet.class));
      Assert.assertFalse(addonProject.hasFacet(CDIFacet.class));

      Assert.assertFalse(apiProject.hasFacet(ForgeBOMFacet.class));
      Assert.assertFalse(apiProject.hasFacet(JavaCompilerFacet.class));
      Assert.assertTrue(apiProject.hasFacet(JavaSourceFacet.class));
      Assert.assertTrue(apiProject.hasFacet(ResourcesFacet.class));
      Assert.assertTrue(apiProject.hasFacet(CDIFacet_1_1.class));

      Assert.assertFalse(implProject.hasFacet(ForgeBOMFacet.class));
      Assert.assertFalse(implProject.hasFacet(JavaCompilerFacet.class));
      Assert.assertTrue(implProject.hasFacet(JavaSourceFacet.class));
      Assert.assertTrue(implProject.hasFacet(ResourcesFacet.class));
      Assert.assertTrue(implProject.hasFacet(CDIFacet_1_1.class));

      Assert.assertFalse(spiProject.hasFacet(ForgeBOMFacet.class));
      Assert.assertFalse(spiProject.hasFacet(JavaCompilerFacet.class));
      Assert.assertTrue(spiProject.hasFacet(JavaSourceFacet.class));
      Assert.assertTrue(spiProject.hasFacet(ResourcesFacet.class));
      Assert.assertTrue(spiProject.hasFacet(FurnaceAPIFacet.class));
      Assert.assertFalse(spiProject.hasFacet(CDIFacet_1_1.class));

      Assert.assertFalse(testsProject.hasFacet(ForgeBOMFacet.class));
      Assert.assertFalse(testsProject.hasFacet(JavaCompilerFacet.class));
      Assert.assertTrue(testsProject.hasFacet(JavaSourceFacet.class));
      Assert.assertTrue(testsProject.hasFacet(ResourcesFacet.class));
      Assert.assertFalse(testsProject.hasFacet(CDIFacet_1_1.class));

      Dependency addonDependency = DependencyBuilder.create(
               addonProject.getFacet(MetadataFacet.class).getOutputDependency())
               .setClassifier(FORGE_ADDON_CLASSIFIER);
      Dependency apiDependency = apiProject.getFacet(MetadataFacet.class).getOutputDependency();
      Dependency implDependency = implProject.getFacet(MetadataFacet.class).getOutputDependency();
      Dependency spiDependency = DependencyBuilder.create(
               spiProject.getFacet(MetadataFacet.class).getOutputDependency())
               .setClassifier(FORGE_ADDON_CLASSIFIER);

      /*
       * Verify parent project
       */
      Assert.assertNull(project.getFacet(MavenFacet.class).getModel().getParent());

      Assert.assertFalse(project.getRoot().getChild("src").exists());
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasDirectManagedDependency(
               DefaultFurnaceContainerAPIFacet.FURNACE_CONTAINER_API_DEPENDENCY));
      Assert.assertFalse(project.getFacet(DependencyFacet.class).hasDirectDependency(
               DependencyBuilder.create("javax.annotation:jsr250-api:1.0")));
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasDirectManagedDependency(
               DependencyBuilder.create(addonProject.getFacet(MetadataFacet.class).getOutputDependency())
                        .setClassifier(FORGE_ADDON_CLASSIFIER)));
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasDirectManagedDependency(apiDependency));
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasDirectManagedDependency(
               implProject.getFacet(MetadataFacet.class).getOutputDependency()));

      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasDirectManagedDependency(spiDependency));

      /*
       * Verify impl/ sub-module
       */

      Assert.assertEquals(".." + File.separator + "pom.xml", implProject.getFacet(MavenFacet.class).getModel()
               .getParent().getRelativePath());
      Assert.assertTrue(implProject.hasFacet(DefaultFurnaceContainerAPIFacet.class));
      Assert.assertTrue(implProject.getFacet(JavaSourceFacet.class)
               .getJavaResource("com.acme.testproject.package-info.java").exists());

      Assert.assertTrue(implProject.getFacet(DependencyFacet.class).hasDirectDependency(apiDependency));
      Assert.assertFalse(implProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(apiDependency));
      Assert.assertTrue(implProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(apiDependency));
      Assert.assertEquals("provided", implProject.getFacet(DependencyFacet.class).getDirectDependency(apiDependency)
               .getScopeType());

      Assert.assertTrue(implProject.getFacet(DependencyFacet.class).hasDirectDependency(spiDependency));
      Assert.assertFalse(implProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(spiDependency));
      Assert.assertTrue(implProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(spiDependency));
      Assert.assertEquals("provided", implProject.getFacet(DependencyFacet.class).getDirectDependency(spiDependency)
               .getScopeType());

      // Assert.assertTrue(implProject.getFacet(DependencyFacet.class).getManagedDependencies().isEmpty());
      Assert.assertTrue(implProject.getFacet(DependencyFacet.class).hasDirectDependency(
               DefaultFurnaceContainerAPIFacet.FURNACE_CONTAINER_API_DEPENDENCY));
      Assert.assertFalse(implProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(
               DefaultFurnaceContainerAPIFacet.FURNACE_CONTAINER_API_DEPENDENCY));
      Assert.assertTrue(implProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(
               DefaultFurnaceContainerAPIFacet.FURNACE_CONTAINER_API_DEPENDENCY));
      Assert.assertFalse(implProject.getFacet(DependencyFacet.class).hasDirectDependency(
               DependencyBuilder.create("javax.annotation:jsr250-api:1.0")));
      Assert.assertTrue(implProject.hasFacet(AddonImplFacet.class));
      Assert.assertFalse(implProject.hasFacet(FurnacePluginFacet.class));

      /*
       * Verify api/ sub-module
       */
      Assert.assertEquals(".." + File.separator + "pom.xml", apiProject.getFacet(MavenFacet.class).getModel()
               .getParent().getRelativePath());
      Assert.assertTrue(apiProject.hasFacet(DefaultFurnaceContainerAPIFacet.class));
      Assert.assertTrue(apiProject.getFacet(JavaSourceFacet.class)
               .getJavaResource("com.acme.testproject.package-info.java").exists());

      Assert.assertTrue(apiProject.getFacet(DependencyFacet.class).hasDirectDependency(spiDependency));
      Assert.assertFalse(apiProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(spiDependency));
      Assert.assertTrue(apiProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(spiDependency));
      Assert.assertEquals("provided", apiProject.getFacet(DependencyFacet.class).getDirectDependency(spiDependency)
               .getScopeType());

      // Assert.assertTrue(apiProject.getFacet(DependencyFacet.class).getManagedDependencies().isEmpty());
      Assert.assertTrue(apiProject.getFacet(DependencyFacet.class).hasDirectDependency(
               DefaultFurnaceContainerAPIFacet.FURNACE_CONTAINER_API_DEPENDENCY));
      Assert.assertFalse(apiProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(
               DefaultFurnaceContainerAPIFacet.FURNACE_CONTAINER_API_DEPENDENCY));
      Assert.assertTrue(apiProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(
               DefaultFurnaceContainerAPIFacet.FURNACE_CONTAINER_API_DEPENDENCY));
      Assert.assertFalse(apiProject.getFacet(DependencyFacet.class).hasDirectDependency(
               DependencyBuilder.create("javax.annotation:jsr250-api:1.0")));
      Assert.assertTrue(apiProject.hasFacet(AddonAPIFacet.class));
      Assert.assertFalse(apiProject.hasFacet(FurnacePluginFacet.class));

      /*
       * Verify spi/ sub-module2.0.0.Final
       */
      Assert.assertEquals(".." + File.separator + "pom.xml", spiProject.getFacet(MavenFacet.class).getModel()
               .getParent().getRelativePath());
      Assert.assertTrue(spiProject.getFacet(JavaSourceFacet.class)
               .getJavaResource("com.acme.testproject.package-info.java").exists());

      // Assert.assertTrue(spiProject.getFacet(DependencyFacet.class).getManagedDependencies().isEmpty());
      Assert.assertTrue(spiProject.getFacet(DependencyFacet.class).hasDirectDependency(
               FurnaceAPIFacet.FURNACE_API_DEPENDENCY));
      Assert.assertFalse(spiProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(
               FurnaceAPIFacet.FURNACE_API_DEPENDENCY));
      Assert.assertTrue(spiProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(
               FurnaceAPIFacet.FURNACE_API_DEPENDENCY));
      Assert.assertFalse(spiProject.getFacet(DependencyFacet.class).hasDirectDependency(
               DependencyBuilder.create("javax.annotation:jsr250-api:1.0")));
      Assert.assertFalse(spiProject.hasFacet(DefaultFurnaceContainerFacet.class));
      Assert.assertFalse(spiProject.hasFacet(DefaultFurnaceContainerAPIFacet.class));
      Assert.assertFalse(spiProject.hasFacet(CDIFacet_1_1.class));
      Assert.assertTrue(spiProject.hasFacet(AddonSPIFacet.class));
      Assert.assertTrue(spiProject.hasFacet(FurnacePluginFacet.class));

      /*
       * Verify addon/ sub-module
       */
      Assert.assertEquals(".." + File.separator + "pom.xml", addonProject.getFacet(MavenFacet.class).getModel()
               .getParent()
               .getRelativePath());
      Assert.assertTrue(addonProject.getFacet(JavaSourceFacet.class)
               .getJavaResource("com.acme.testproject.package-info.java").exists());

      Assert.assertTrue(addonProject.getFacet(DependencyFacet.class).hasDirectDependency(apiDependency));
      Assert.assertFalse(addonProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(apiDependency));
      Assert.assertTrue(addonProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(apiDependency));
      Assert.assertNull(addonProject.getFacet(DependencyFacet.class).getDirectDependency(apiDependency)
               .getScopeType());
      Assert.assertFalse(addonProject.getFacet(DependencyFacet.class).getDirectDependency(apiDependency).isOptional());

      Assert.assertTrue(addonProject.getFacet(DependencyFacet.class).hasDirectDependency(implDependency));
      Assert.assertFalse(addonProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(implDependency));
      Assert.assertTrue(addonProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(implDependency));
      Assert.assertEquals("runtime", addonProject.getFacet(DependencyFacet.class).getDirectDependency(implDependency)
               .getScopeType());
      Assert.assertTrue(addonProject.getFacet(DependencyFacet.class).getDirectDependency(implDependency).isOptional());

      Assert.assertTrue(addonProject.getFacet(DependencyFacet.class).hasDirectDependency(spiDependency));
      Assert.assertFalse(addonProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(spiDependency));
      Assert.assertTrue(addonProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(spiDependency));
      Assert.assertNull(addonProject.getFacet(DependencyFacet.class).getDirectDependency(spiDependency)
               .getScopeType());
      Assert.assertEquals("compile", addonProject.getFacet(DependencyFacet.class).getEffectiveDependency(spiDependency)
               .getScopeType());
      Assert.assertFalse(addonProject.getFacet(DependencyFacet.class).getDirectDependency(spiDependency).isOptional());

      // Assert.assertTrue(addonProject.getFacet(DependencyFacet.class).getManagedDependencies().isEmpty());
      Assert.assertTrue(addonProject.getFacet(DependencyFacet.class).hasDirectDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY));
      Assert.assertFalse(addonProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY));
      Assert.assertTrue(addonProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY));
      Assert.assertFalse(addonProject.getFacet(DependencyFacet.class).hasDirectDependency(
               DependencyBuilder.create("javax.annotation:jsr250-api:1.0")));

      Assert.assertTrue(addonProject.hasFacet(FurnacePluginFacet.class));

      /*
       * Verify tests/ sub-module
       */

      Assert.assertEquals(".." + File.separator + "pom.xml", testsProject.getFacet(MavenFacet.class).getModel()
               .getParent()
               .getRelativePath());

      Assert.assertTrue(testsProject.getFacet(DependencyFacet.class).hasDirectDependency(addonDependency));
      Assert.assertFalse(testsProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(addonDependency));
      Assert.assertTrue(testsProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(addonDependency));
      Assert.assertNull(testsProject.getFacet(DependencyFacet.class).getDirectDependency(addonDependency)
               .getScopeType());
      Assert.assertNotNull("ADDON module is not present in the TESTS module",
               testsProject.getFacet(DependencyFacet.class).getEffectiveDependency(addonDependency));
      Assert.assertEquals("compile",
               testsProject.getFacet(DependencyFacet.class).getEffectiveDependency(addonDependency)
                        .getScopeType());

      Assert.assertFalse(testsProject.getFacet(DependencyFacet.class).hasDirectDependency(spiDependency));
      Assert.assertFalse(testsProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(spiDependency));
      Assert.assertTrue(testsProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(spiDependency));

      // Assert.assertTrue(testsProject.getFacet(DependencyFacet.class).getManagedDependencies().isEmpty());
      Assert.assertTrue(testsProject.getFacet(DependencyFacet.class).hasDirectDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY));
      Assert.assertFalse(testsProject.getFacet(DependencyFacet.class).hasDirectManagedDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY));
      Assert.assertTrue(testsProject.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY));
      Assert.assertEquals(forgeVersion.toString(), testsProject.getFacet(DependencyFacet.class).getEffectiveDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY).getCoordinate().getVersion());
      Assert.assertFalse(testsProject.getFacet(DependencyFacet.class).hasDirectDependency(
               DependencyBuilder.create("javax.annotation:jsr250-api:1.0")));

      Assert.assertTrue(project.getRoot().getChild("README.asciidoc").exists());
      project.getRoot().delete(true);
      project.getRoot().reify(DirectoryResource.class).deleteOnExit();
   }

   @Test
   public void testSimpleAddonProject() throws FileNotFoundException, FacetNotFoundException
   {
      Project project = projectFactory.createTempProject();
      project.getRoot().reify(DirectoryResource.class).deleteOnExit();
      MetadataFacet metadataFacet = project.getFacet(MetadataFacet.class);
      metadataFacet.setProjectName("testproject");
      metadataFacet.setProjectVersion("1.0.0-SNAPSHOT");
      metadataFacet.setProjectGroupName("com.acme.testproject");

      Version forgeVersion = furnace.getVersion();
      configurator.setupSimpleAddonProject(project, forgeVersion, Collections.<AddonId> emptyList());

      Assert.assertTrue(project.hasFacet(ForgeBOMFacet.class));
      Assert.assertTrue(project.hasFacet(DefaultFurnaceContainerFacet.class));
      Assert.assertTrue(project.hasFacet(FurnacePluginFacet.class));
      Assert.assertTrue(project.hasFacet(AddonTestFacet.class));
      Assert.assertTrue(project.hasFacet(JavaSourceFacet.class));
      Assert.assertTrue(project.hasFacet(JavaCompilerFacet.class));
      Assert.assertTrue(project.hasFacet(CDIFacet.class));
      Assert.assertTrue(project.hasFacet(CDIFacet_1_1.class));

      Assert.assertFalse(project.getFacet(DependencyFacet.class).getManagedDependencies().isEmpty());
      Assert.assertTrue(project.getFacet(JavaSourceFacet.class)
               .getJavaResource("com.acme.testproject.package-info.java").exists());

      /**
       * Verify test harness dependencies
       */
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasDirectDependency(
               AddonTestFacet.FURNACE_TEST_ADAPTER_DEPENDENCY));
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasDirectDependency(
               AddonTestFacet.FURNACE_TEST_HARNESS_DEPENDENCY));
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(
               AddonTestFacet.FURNACE_TEST_ADAPTER_DEPENDENCY));
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(
               AddonTestFacet.FURNACE_TEST_HARNESS_DEPENDENCY));
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasEffectiveDependency(
               DependencyBuilder.create("junit:junit").setScopeType("test")));

      /**
       * Verify container dependencies
       */
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasDirectDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY));
      Assert.assertNull(project.getFacet(DependencyFacet.class).getDirectDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY).getCoordinate().getVersion());
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasEffectiveManagedDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY));
      Assert.assertNotNull(project.getFacet(DependencyFacet.class).getEffectiveManagedDependency(
               DefaultFurnaceContainerFacet.FURNACE_CONTAINER_DEPENDENCY).getCoordinate().getVersion());
      Assert.assertTrue(project.getFacet(DependencyFacet.class).hasEffectiveDependency(
               DefaultFurnaceContainerAPIFacet.FURNACE_CONTAINER_API_DEPENDENCY));
      Assert.assertEquals(forgeVersion.toString(), project.getFacet(DependencyFacet.class).getEffectiveDependency(
               DefaultFurnaceContainerAPIFacet.FURNACE_CONTAINER_API_DEPENDENCY).getCoordinate().getVersion());
      Assert.assertFalse(project.getFacet(DependencyFacet.class).hasDirectDependency(
               DefaultFurnaceContainerAPIFacet.FURNACE_CONTAINER_API_DEPENDENCY));
      Assert.assertFalse(project.getFacet(DependencyFacet.class).hasDirectDependency(
               DependencyBuilder.create("javax.annotation:jsr250-api:1.0")));

      Assert.assertTrue(project.getRoot().getChild("README.asciidoc").exists());
      project.getRoot().delete(true);
   }

   @Test
   @Ignore("FORGE-894")
   public void testDependencyResolution() throws FileNotFoundException, FacetNotFoundException
   {
      Project project = projectFactory.createTempProject();
      project.getRoot().reify(DirectoryResource.class).deleteOnExit();

      MetadataFacet metadataFacet = project.getFacet(MetadataFacet.class);
      metadataFacet.setProjectName("testproject");
      metadataFacet.setProjectVersion("1.0.0-SNAPSHOT");
      metadataFacet.setProjectGroupName("com.acme.testproject");

      Version forgeVersion = furnace.getVersion();
      configurator.setupComplexAddonProject(project, forgeVersion, Collections.<AddonId> emptyList());

      Resource<?> projectRoot = project.getRoot();

      Assert.assertTrue("SPI module is missing", projectRoot.getChild("spi").exists());
      Assert.assertTrue("TESTS module is missing", projectRoot.getChild("tests").exists());

      Project spiProject = projectFactory.findProject(projectRoot.getChild("spi"));
      Project testsProject = projectFactory.findProject(projectRoot.getChild("tests"));

      Dependency spiDependency = DependencyBuilder.create(
               spiProject.getFacet(MetadataFacet.class).getOutputDependency())
               .setClassifier(FORGE_ADDON_CLASSIFIER);
      Assert.assertNotNull("SPI module is not present in the TESTS module", testsProject
               .getFacet(DependencyFacet.class).getEffectiveDependency(spiDependency));
      Assert.assertEquals("compile",
               testsProject.getFacet(DependencyFacet.class).getEffectiveDependency(spiDependency)
                        .getScopeType());
   }
}
TOP

Related Classes of org.jboss.forge.addon.addons.project.AddonProjectConfiguratorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.