Skip to content

Commit

Permalink
FORGE-1755: Furnace container is required
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Apr 23, 2014
1 parent 90e606a commit c255881
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 39 deletions.
Expand Up @@ -29,6 +29,7 @@
import org.jboss.forge.addon.ui.hints.InputType;
import org.jboss.forge.addon.ui.input.UIInput;
import org.jboss.forge.addon.ui.input.UISelectMany;
import org.jboss.forge.addon.ui.input.UISelectOne;
import org.jboss.forge.addon.ui.metadata.UICommandMetadata;
import org.jboss.forge.addon.ui.metadata.WithAttributes;
import org.jboss.forge.addon.ui.result.Result;
Expand Down Expand Up @@ -67,32 +68,47 @@ public class NewFurnaceTestCommand extends AbstractProjectCommand
@WithAttributes(label = "Test Class Name", required = true)
private UIInput<String> named;

@Inject
@WithAttributes(label = "Furnace container", required = true, requiredMessage = "You must select one Furnace container")
private UISelectOne<AddonId> furnaceContainer;

@Inject
@WithAttributes(label = "Dependency addons", description = "Addons this test depends upon")
private UISelectMany<AddonId> addonDependencies;

@Override
public void initializeUI(UIBuilder builder) throws Exception
{
Set<AddonId> choices = new TreeSet<>();
configureAddonDependencies();
Project project = getSelectedProject(builder.getUIContext());
packageName.setDefaultValue(project.getFacet(MetadataFacet.class).getTopLevelPackage());
builder.add(packageName).add(named).add(furnaceContainer).add(addonDependencies);
}

private void configureAddonDependencies()
{
Set<AddonId> addonChoices = new TreeSet<AddonId>();
Set<AddonId> containerChoices = new TreeSet<AddonId>();
for (AddonRepository repository : furnace.getRepositories())
{
for (AddonId id : repository.listEnabled())
{
choices.add(id);
// TODO: Furnace should provide some way to detect if an addon is a Container type
boolean isContainerAddon = id.getName().contains("org.jboss.forge.furnace.container");
if (isContainerAddon)
{
containerChoices.add(id);
}
else
{
addonChoices.add(id);
}
}
}
addonDependencies.setValueChoices(choices);
Project project = getSelectedProject(builder.getUIContext());
packageName.setDefaultValue(project.getFacet(MetadataFacet.class).getTopLevelPackage());
builder.add(packageName).add(named).add(addonDependencies);
addonDependencies.setValueChoices(addonChoices);
furnaceContainer.setValueChoices(containerChoices);
}

/*
* (non-Javadoc)
*
* @see org.jboss.forge.addon.ui.AbstractUICommand#getMetadata(org.jboss.forge.addon.ui.context.UIContext)
*/
@Override
public UICommandMetadata getMetadata(UIContext context)
{
Expand Down Expand Up @@ -126,32 +142,26 @@ public Result execute(UIExecutionContext context) throws Exception
StringBuilder body = new StringBuilder(
"ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class).addBeansXML()");
StringBuilder dependenciesAnnotationBody = new StringBuilder();
if (addonDependencies.hasValue())
body.append(".addAsAddonDependencies(");
AddonId furnaceContainerId = furnaceContainer.getValue();
addAddonDependency(project, body, dependenciesAnnotationBody, furnaceContainerId);
Iterator<AddonId> it = addonDependencies.getValue().iterator();
if (it.hasNext())
{
body.append(",");
dependenciesAnnotationBody.append(",");
}
while (it.hasNext())
{
body.append(".addAsAddonDependencies(");
Iterator<AddonId> it = addonDependencies.getValue().iterator();
while (it.hasNext())
AddonId addonId = it.next();
addAddonDependency(project, body, dependenciesAnnotationBody, addonId);
if (it.hasNext())
{
AddonId addonId = it.next();
Dependency dependency = DependencyBuilder.create(addonId.getName()).setVersion(
addonId.getVersion().toString()).setScopeType("test");
String name = addonId.getName();
if (!dependencyInstaller.isInstalled(project, dependency))
{
dependencyInstaller.install(project, dependency);
}
body.append("AddonDependencyEntry.create(\"").append(name);
dependenciesAnnotationBody.append("@AddonDependency(name = \"").append(name);
body.append("\")");
dependenciesAnnotationBody.append("\")");
if (it.hasNext())
{
body.append(",");
dependenciesAnnotationBody.append(",");
}
body.append(",");
dependenciesAnnotationBody.append(",");
}
body.append(")");
}
body.append(")");
body.append(";");
body.append("return archive;");
MethodSource<JavaClassSource> getDeployment = javaClass.addMethod().setName("getDeployment").setPublic()
Expand All @@ -170,6 +180,22 @@ public Result execute(UIExecutionContext context) throws Exception
return Results.success("Test class " + javaClass.getQualifiedName() + " created");
}

private void addAddonDependency(Project project, StringBuilder body, StringBuilder dependenciesAnnotationBody,
AddonId addonId)
{
Dependency dependency = DependencyBuilder.create(addonId.getName()).setVersion(
addonId.getVersion().toString()).setScopeType("test");
String name = addonId.getName();
if (!dependencyInstaller.isInstalled(project, dependency))
{
dependencyInstaller.install(project, dependency);
}
body.append("AddonDependencyEntry.create(\"").append(name);
dependenciesAnnotationBody.append("@AddonDependency(name = \"").append(name);
body.append("\")");
dependenciesAnnotationBody.append("\")");
}

@Override
public boolean isEnabled(UIContext context)
{
Expand Down
Expand Up @@ -10,6 +10,8 @@
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;

import java.util.Iterator;

import javax.inject.Inject;

import org.jboss.arquillian.container.test.api.Deployment;
Expand All @@ -28,6 +30,7 @@
import org.jboss.forge.addon.resource.Resource;
import org.jboss.forge.addon.ui.controller.CommandController;
import org.jboss.forge.addon.ui.input.UISelectMany;
import org.jboss.forge.addon.ui.input.UISelectOne;
import org.jboss.forge.addon.ui.result.Failed;
import org.jboss.forge.addon.ui.result.Result;
import org.jboss.forge.addon.ui.test.UITestHarness;
Expand Down Expand Up @@ -78,7 +81,7 @@ public static ForgeArchive getDeployment()

@Inject
private FacetFactory facetFactory;

@Inject
private UITestHarness testHarness;

Expand All @@ -101,17 +104,30 @@ public void testCreateTestClass() throws Exception
controller.setValueFor("named", "MyTestCase");
controller.setValueFor("packageName", "org.jboss.forge.test");
UISelectMany<AddonId> component = (UISelectMany<AddonId>) controller.getInputs().get("addonDependencies");
controller.setValueFor("addonDependencies", component.getValueChoices());
UISelectOne<AddonId> furnaceContainer = (UISelectOne<AddonId>) controller.getInputs().get("furnaceContainer");
AddonId funaceContainerAddonId = furnaceContainer.getValueChoices().iterator().next();
controller.setValueFor("furnaceContainer", funaceContainerAddonId);
Iterator<AddonId> dependencies = component.getValueChoices().iterator();
AddonId addonDependency = null;
while (dependencies.hasNext())
{
addonDependency = dependencies.next();
}
controller.setValueFor("addonDependencies", addonDependency);
Assert.assertTrue(controller.canExecute());
Result result = controller.execute();
Assert.assertFalse(result instanceof Failed);
DependencyFacet deps = project.getFacet(DependencyFacet.class);
for (AddonId addonId: component.getValueChoices()) {
Dependency dependency = DependencyBuilder.create(addonId.getName()).setVersion(
addonId.getVersion().toString()).setScopeType("test");
{
Dependency dependency = DependencyBuilder.create(funaceContainerAddonId.getName()).setVersion(
funaceContainerAddonId.getVersion().toString()).setScopeType("test");
Assert.assertTrue(deps.hasEffectiveDependency(dependency));
}
{
Dependency dependency = DependencyBuilder.create(addonDependency.getName()).setVersion(
addonDependency.getVersion().toString()).setScopeType("test");
Assert.assertTrue(deps.hasEffectiveDependency(dependency));
}

JavaSourceFacet facet = project.getFacet(JavaSourceFacet.class);
JavaResource javaResource = facet.getTestJavaResource("org.jboss.forge.test.MyTestCase");
Assert.assertNotNull(javaResource);
Expand Down

0 comments on commit c255881

Please sign in to comment.