Skip to content

Commit

Permalink
Added test to verify the generation contract of ScaffoldProvider
Browse files Browse the repository at this point in the history
A Mock scaffold provider that scaffolds mock resources has been
created.
  • Loading branch information
VineetReynolds committed Mar 13, 2014
1 parent b0099a5 commit b2e25f7
Show file tree
Hide file tree
Showing 12 changed files with 320 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.jboss.forge.addon.resource.DirectoryResource;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.addon.resource.Resource;
import org.jboss.forge.addon.resource.ResourceFactory;
import org.jboss.forge.addon.resource.util.ResourceUtil;
import org.jboss.forge.addon.scaffold.spi.ResourceCollection;
import org.jboss.forge.addon.scaffold.spi.ScaffoldGenerationContext;
Expand All @@ -28,6 +29,7 @@
import org.jboss.forge.addon.ui.util.Metadata;
import org.jboss.forge.addon.ui.wizard.UIWizardStep;
import org.jboss.forge.parser.java.JavaClass;
import org.jboss.forge.parser.java.JavaSource;
import org.jboss.shrinkwrap.descriptor.api.persistence.PersistenceCommonDescriptor;

public class ScaffoldableEntitySelectionWizard implements UIWizardStep
Expand All @@ -40,6 +42,9 @@ public class ScaffoldableEntitySelectionWizard implements UIWizardStep
@WithAttributes(label = "Targets", required = true)
private UISelectMany<JavaClass> targets;

@Inject
ResourceFactory resourceFactory;

@Override
public NavigationResult next(UINavigationContext context) throws Exception
{
Expand All @@ -48,7 +53,8 @@ public NavigationResult next(UINavigationContext context) throws Exception
{
for (JavaClass klass : targets.getValue())
{
resourceCollection.addToCollection(klass);
Resource<? extends JavaSource<?>> resource = resourceFactory.create(klass.getEnclosingType());
resourceCollection.addToCollection(resource);
}
}
Map<Object, Object> attributeMap = context.getUIContext().getAttributeMap();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.addon.projects.ui.AbstractProjectCommand;
import org.jboss.forge.addon.resource.Resource;
import org.jboss.forge.addon.scaffold.spi.ResourceCollection;
import org.jboss.forge.addon.scaffold.spi.ScaffoldGenerationContext;
import org.jboss.forge.addon.scaffold.spi.ScaffoldProvider;
Expand Down Expand Up @@ -83,7 +84,7 @@ protected ProjectFactory getProjectFactory()
return factory;
}

private ScaffoldGenerationContext populateGenerationContext(UIContext context, Collection<?> resources)
private ScaffoldGenerationContext populateGenerationContext(UIContext context, Collection<Resource<?>> resources)
{
Map<Object, Object> attributeMap = context.getAttributeMap();
ScaffoldGenerationContext generationContext = (ScaffoldGenerationContext) attributeMap
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
package org.jboss.forge.addon.scaffold.spi;

import org.jboss.forge.addon.resource.Resource;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class ResourceCollection
{
private List resources = new ArrayList();
private List<Resource<?>> resources = new ArrayList<Resource<?>>();

public Collection<?> getResources()
public Collection<Resource<?>> getResources()
{
return resources;
}

public void addToCollection(Object resource)
public void addToCollection(Resource<?> resource)
{
resources.add(resource);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

package org.jboss.forge.addon.scaffold.spi;

import org.jboss.forge.addon.resource.Resource;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
Expand All @@ -19,10 +21,10 @@ public class ScaffoldGenerationContext
{
private String targetDirectory;
private boolean overwrite;
private Collection<?> resources;
private Collection<Resource<?>> resources;
private Map<String, Object> attributes;

public ScaffoldGenerationContext(String targetDirectory, boolean overwrite, Collection<?> resources)
public ScaffoldGenerationContext(String targetDirectory, boolean overwrite, Collection<Resource<?>> resources)
{
super();
this.targetDirectory = targetDirectory == null ? "" : targetDirectory;
Expand Down Expand Up @@ -51,12 +53,12 @@ public void setOverwrite(boolean overwrite)
this.overwrite = overwrite;
}

public Collection<?> getResources()
public Collection<Resource<?>> getResources()
{
return resources;
}

public void setResources(Collection<?> resources)
public void setResources(Collection<Resource<?>> resources)
{
this.resources = resources;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.resource.Resource;
import org.jboss.forge.addon.resource.ResourceFactory;
import org.jboss.forge.addon.scaffold.mock.MockProvider;
import org.jboss.forge.addon.scaffold.mock.Scaffoldable;
import org.jboss.forge.addon.scaffold.mock.ScaffoldedResource;
import org.jboss.forge.addon.scaffold.spi.ScaffoldGenerationContext;
import org.jboss.forge.addon.scaffold.spi.ScaffoldProvider;
import org.jboss.forge.addon.scaffold.spi.ScaffoldSetupContext;
import org.jboss.forge.arquillian.AddonDependency;
Expand All @@ -26,8 +32,8 @@
import org.junit.Test;
import org.junit.runner.RunWith;

import static org.jboss.forge.addon.scaffold.MockScaffoldProvider.PROVIDER_DESCRIPTION;
import static org.jboss.forge.addon.scaffold.MockScaffoldProvider.PROVIDER_NAME;
import static org.jboss.forge.addon.scaffold.mock.MockProvider.PROVIDER_DESCRIPTION;
import static org.jboss.forge.addon.scaffold.mock.MockProvider.PROVIDER_NAME;
import static org.junit.Assert.*;

@RunWith(Arquillian.class)
Expand All @@ -45,7 +51,8 @@ public static ForgeArchive getDeployment()
{
ForgeArchive archive = ShrinkWrap
.create(ForgeArchive.class)
.addClasses(MockScaffoldProvider.class, ProjectHelper.class)
.addPackage(MockProvider.class.getPackage())
.addClass(ProjectHelper.class)
.addBeansXML()
.addAsAddonDependencies(
AddonDependencyEntry.create("org.jboss.forge.addon:projects"),
Expand All @@ -64,31 +71,64 @@ public static ForgeArchive getDeployment()
@Inject
private ProjectHelper projectHelper;

@Inject
private ResourceFactory resourceFactory;

@Test
public void testCanLoadScaffoldProviders() throws Exception
{
// Setup

// Execute
Imported<ScaffoldProvider> providerInstances = registry.getServices(ScaffoldProvider.class);
List<ScaffoldProvider> providerList = new ArrayList<ScaffoldProvider>();
for (ScaffoldProvider provider : providerInstances)
{
providerList.add(provider);
}
assertFalse(providerList.isEmpty());
assertNotNull(providerList.get(0));
ScaffoldProvider scaffoldProvider = providerInstances.get();

// Verify
assertNotNull(scaffoldProvider);
assertEquals(PROVIDER_NAME, scaffoldProvider.getName());
assertEquals(PROVIDER_DESCRIPTION, scaffoldProvider.getDescription());
}

@Test
public void testCanSetupScaffoldProvider() throws Exception
{
Imported<ScaffoldProvider> providerInstances = registry.getServices(ScaffoldProvider.class);
ScaffoldProvider scaffoldProvider = providerInstances.get();
assertNotNull(scaffoldProvider);
// Setup
ScaffoldProvider scaffoldProvider = getScaffoldProvider();
Project project = projectHelper.createWebProject();
ScaffoldSetupContext setupContext = new ScaffoldSetupContext("", true);

// Execute
scaffoldProvider.setup(project, setupContext);

// Verify
assertTrue(scaffoldProvider.isSetup(setupContext));
}

@Test
public void testCanGenerateScaffold() throws Exception
{
// Setup
ScaffoldProvider scaffoldProvider = getScaffoldProvider();
Project project = projectHelper.createWebProject();
ScaffoldSetupContext setupContext = new ScaffoldSetupContext("", true);
scaffoldProvider.setup(project, setupContext);

// Execute
List<Resource<?>> scaffoldables = new ArrayList<Resource<?>>();
scaffoldables.add(resourceFactory.create(new Scaffoldable("mock")));
ScaffoldGenerationContext generationContext = new ScaffoldGenerationContext("", true, scaffoldables);
List<Resource<?>> generatedResources = scaffoldProvider.generateFrom(project, generationContext);

// Verify
assertTrue(generatedResources.size() > 0);
assertTrue(generatedResources.get(0) instanceof ScaffoldedResource);
}

private ScaffoldProvider getScaffoldProvider()
{
Imported<ScaffoldProvider> providerInstances = registry.getServices(ScaffoldProvider.class);
ScaffoldProvider scaffoldProvider = providerInstances.get();
assertNotNull(scaffoldProvider);
return scaffoldProvider;
}
}
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
package org.jboss.forge.addon.scaffold;
package org.jboss.forge.addon.scaffold.mock;

import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.resource.Resource;
import org.jboss.forge.addon.resource.ResourceFactory;
import org.jboss.forge.addon.scaffold.spi.AccessStrategy;
import org.jboss.forge.addon.scaffold.spi.ScaffoldGenerationContext;
import org.jboss.forge.addon.scaffold.spi.ScaffoldProvider;
import org.jboss.forge.addon.scaffold.spi.ScaffoldSetupContext;
import org.jboss.forge.addon.ui.command.UICommand;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class MockScaffoldProvider implements ScaffoldProvider
public class MockProvider implements ScaffoldProvider
{

public static final String PROVIDER_NAME = "Mock Scaffold Provider";
public static final String PROVIDER_DESCRIPTION = "Mock Scaffold Provider for use in tests";

private boolean isSetup;

@Inject
private ResourceFactory resourceFactory;

@Override
public String getName()
{
Expand Down Expand Up @@ -46,7 +53,14 @@ public boolean isSetup(ScaffoldSetupContext setupContext)
@Override
public List<Resource<?>> generateFrom(Project project, ScaffoldGenerationContext generationContext)
{
return null;
List<Resource<?>> result = new ArrayList<Resource<?>>();
for (Resource<?> resource : generationContext.getResources())
{
Scaffoldable scaffoldable = ((ScaffoldableResource) resource).getUnderlyingResourceObject();
Scaffolded scaffolded = new Scaffolded(scaffoldable.getName());
result.add(new ScaffoldedResource(resourceFactory, scaffolded));
}
return result;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.jboss.forge.addon.scaffold.mock;

public class Scaffoldable
{

private String name;

public Scaffoldable(String name)
{
this.name = name;
}

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}

@Override
public String toString()
{
return name;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package org.jboss.forge.addon.scaffold.mock;

import org.jboss.forge.addon.resource.Resource;
import org.jboss.forge.addon.resource.ResourceFactory;
import org.jboss.forge.addon.resource.VirtualResource;

import java.util.List;

public class ScaffoldableResource extends VirtualResource<Scaffoldable>
{

private Scaffoldable value;

public ScaffoldableResource(ResourceFactory factory, Scaffoldable resource)
{
super(factory, null);
this.value = resource;
}

protected ScaffoldableResource(ResourceFactory factory, Resource<?> parent)
{
super(factory, parent);
}

@Override
protected List<Resource<?>> doListResources()
{
return null;
}

@Override
public boolean delete() throws UnsupportedOperationException
{
return false;
}

@Override
public boolean delete(boolean recursive) throws UnsupportedOperationException
{
return false;
}

@Override
public String getName()
{
return value.toString();
}

@Override
public Scaffoldable getUnderlyingResourceObject()
{
return value;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package org.jboss.forge.addon.scaffold.mock;

import org.jboss.forge.addon.resource.Resource;
import org.jboss.forge.addon.resource.ResourceFactory;
import org.jboss.forge.addon.resource.ResourceGenerator;

public class ScaffoldableResourceGenerator implements ResourceGenerator<ScaffoldableResource, Scaffoldable>
{
@Override
public boolean handles(Class<?> type, Object resource)
{
if (resource instanceof Scaffoldable)
{
return true;
}
return false;
}

@Override
@SuppressWarnings("unchecked")
public <T extends Resource<Scaffoldable>> T getResource(ResourceFactory factory, Class<ScaffoldableResource> type,
Scaffoldable resource)
{
return (T) new ScaffoldableResource(factory, resource);
}

@Override
public <T extends Resource<Scaffoldable>> Class<?> getResourceType(ResourceFactory factory,
Class<ScaffoldableResource> type, Scaffoldable resource)
{
return ScaffoldableResource.class;
}
}

0 comments on commit b2e25f7

Please sign in to comment.