From b2e25f721ca0060c741c7f1bdd099c41c3c626ac Mon Sep 17 00:00:00 2001 From: Vineet Reynolds Date: Fri, 14 Feb 2014 17:44:04 +0530 Subject: [PATCH] Added test to verify the generation contract of ScaffoldProvider A Mock scaffold provider that scaffolds mock resources has been created. --- .../ScaffoldableEntitySelectionWizard.java | 8 ++- .../ui/ScaffoldExecuteGenerationStep.java | 3 +- .../scaffold/spi/ResourceCollection.java | 8 ++- .../spi/ScaffoldGenerationContext.java | 10 +-- .../addon/scaffold/ScaffoldAddonTest.java | 66 +++++++++++++++---- .../MockProvider.java} | 20 +++++- .../addon/scaffold/mock/Scaffoldable.java | 28 ++++++++ .../scaffold/mock/ScaffoldableResource.java | 54 +++++++++++++++ .../mock/ScaffoldableResourceGenerator.java | 33 ++++++++++ .../forge/addon/scaffold/mock/Scaffolded.java | 28 ++++++++ .../scaffold/mock/ScaffoldedResource.java | 54 +++++++++++++++ .../mock/ScaffoldedResourceGenerator.java | 33 ++++++++++ 12 files changed, 320 insertions(+), 25 deletions(-) rename scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/{MockScaffoldProvider.java => mock/MockProvider.java} (67%) create mode 100644 scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/Scaffoldable.java create mode 100644 scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldableResource.java create mode 100644 scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldableResourceGenerator.java create mode 100644 scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/Scaffolded.java create mode 100644 scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldedResource.java create mode 100644 scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldedResourceGenerator.java diff --git a/javaee/faces/src/main/java/org/jboss/forge/addon/scaffold/faces/ScaffoldableEntitySelectionWizard.java b/javaee/faces/src/main/java/org/jboss/forge/addon/scaffold/faces/ScaffoldableEntitySelectionWizard.java index 55c98433ae..73ad4ae813 100644 --- a/javaee/faces/src/main/java/org/jboss/forge/addon/scaffold/faces/ScaffoldableEntitySelectionWizard.java +++ b/javaee/faces/src/main/java/org/jboss/forge/addon/scaffold/faces/ScaffoldableEntitySelectionWizard.java @@ -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; @@ -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 @@ -40,6 +42,9 @@ public class ScaffoldableEntitySelectionWizard implements UIWizardStep @WithAttributes(label = "Targets", required = true) private UISelectMany targets; + @Inject + ResourceFactory resourceFactory; + @Override public NavigationResult next(UINavigationContext context) throws Exception { @@ -48,7 +53,8 @@ public NavigationResult next(UINavigationContext context) throws Exception { for (JavaClass klass : targets.getValue()) { - resourceCollection.addToCollection(klass); + Resource> resource = resourceFactory.create(klass.getEnclosingType()); + resourceCollection.addToCollection(resource); } } Map attributeMap = context.getUIContext().getAttributeMap(); diff --git a/scaffold/impl/src/main/java/org/jboss/forge/addon/scaffold/impl/ui/ScaffoldExecuteGenerationStep.java b/scaffold/impl/src/main/java/org/jboss/forge/addon/scaffold/impl/ui/ScaffoldExecuteGenerationStep.java index 30cc67db30..6cd9be0794 100644 --- a/scaffold/impl/src/main/java/org/jboss/forge/addon/scaffold/impl/ui/ScaffoldExecuteGenerationStep.java +++ b/scaffold/impl/src/main/java/org/jboss/forge/addon/scaffold/impl/ui/ScaffoldExecuteGenerationStep.java @@ -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; @@ -83,7 +84,7 @@ protected ProjectFactory getProjectFactory() return factory; } - private ScaffoldGenerationContext populateGenerationContext(UIContext context, Collection resources) + private ScaffoldGenerationContext populateGenerationContext(UIContext context, Collection> resources) { Map attributeMap = context.getAttributeMap(); ScaffoldGenerationContext generationContext = (ScaffoldGenerationContext) attributeMap diff --git a/scaffold/spi/src/main/java/org/jboss/forge/addon/scaffold/spi/ResourceCollection.java b/scaffold/spi/src/main/java/org/jboss/forge/addon/scaffold/spi/ResourceCollection.java index 5712704f4f..d1481c57ba 100644 --- a/scaffold/spi/src/main/java/org/jboss/forge/addon/scaffold/spi/ResourceCollection.java +++ b/scaffold/spi/src/main/java/org/jboss/forge/addon/scaffold/spi/ResourceCollection.java @@ -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> resources = new ArrayList>(); - public Collection getResources() + public Collection> getResources() { return resources; } - public void addToCollection(Object resource) + public void addToCollection(Resource resource) { resources.add(resource); } diff --git a/scaffold/spi/src/main/java/org/jboss/forge/addon/scaffold/spi/ScaffoldGenerationContext.java b/scaffold/spi/src/main/java/org/jboss/forge/addon/scaffold/spi/ScaffoldGenerationContext.java index 6586fd6a15..9375c10b90 100644 --- a/scaffold/spi/src/main/java/org/jboss/forge/addon/scaffold/spi/ScaffoldGenerationContext.java +++ b/scaffold/spi/src/main/java/org/jboss/forge/addon/scaffold/spi/ScaffoldGenerationContext.java @@ -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; @@ -19,10 +21,10 @@ public class ScaffoldGenerationContext { private String targetDirectory; private boolean overwrite; - private Collection resources; + private Collection> resources; private Map attributes; - public ScaffoldGenerationContext(String targetDirectory, boolean overwrite, Collection resources) + public ScaffoldGenerationContext(String targetDirectory, boolean overwrite, Collection> resources) { super(); this.targetDirectory = targetDirectory == null ? "" : targetDirectory; @@ -51,12 +53,12 @@ public void setOverwrite(boolean overwrite) this.overwrite = overwrite; } - public Collection getResources() + public Collection> getResources() { return resources; } - public void setResources(Collection resources) + public void setResources(Collection> resources) { this.resources = resources; } diff --git a/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/ScaffoldAddonTest.java b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/ScaffoldAddonTest.java index a6a578e0d5..1aea07b73e 100644 --- a/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/ScaffoldAddonTest.java +++ b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/ScaffoldAddonTest.java @@ -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; @@ -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) @@ -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"), @@ -64,18 +71,20 @@ public static ForgeArchive getDeployment() @Inject private ProjectHelper projectHelper; + @Inject + private ResourceFactory resourceFactory; + @Test public void testCanLoadScaffoldProviders() throws Exception { + // Setup + + // Execute Imported providerInstances = registry.getServices(ScaffoldProvider.class); - List providerList = new ArrayList(); - 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()); } @@ -83,12 +92,43 @@ public void testCanLoadScaffoldProviders() throws Exception @Test public void testCanSetupScaffoldProvider() throws Exception { - Imported 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> scaffoldables = new ArrayList>(); + scaffoldables.add(resourceFactory.create(new Scaffoldable("mock"))); + ScaffoldGenerationContext generationContext = new ScaffoldGenerationContext("", true, scaffoldables); + List> generatedResources = scaffoldProvider.generateFrom(project, generationContext); + + // Verify + assertTrue(generatedResources.size() > 0); + assertTrue(generatedResources.get(0) instanceof ScaffoldedResource); + } + + private ScaffoldProvider getScaffoldProvider() + { + Imported providerInstances = registry.getServices(ScaffoldProvider.class); + ScaffoldProvider scaffoldProvider = providerInstances.get(); + assertNotNull(scaffoldProvider); + return scaffoldProvider; + } } \ No newline at end of file diff --git a/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/MockScaffoldProvider.java b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/MockProvider.java similarity index 67% rename from scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/MockScaffoldProvider.java rename to scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/MockProvider.java index cbcb6f1e74..2fda9b2a6d 100644 --- a/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/MockScaffoldProvider.java +++ b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/MockProvider.java @@ -1,16 +1,20 @@ -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"; @@ -18,6 +22,9 @@ public class MockScaffoldProvider implements ScaffoldProvider private boolean isSetup; + @Inject + private ResourceFactory resourceFactory; + @Override public String getName() { @@ -46,7 +53,14 @@ public boolean isSetup(ScaffoldSetupContext setupContext) @Override public List> generateFrom(Project project, ScaffoldGenerationContext generationContext) { - return null; + List> result = new ArrayList>(); + 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 diff --git a/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/Scaffoldable.java b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/Scaffoldable.java new file mode 100644 index 0000000000..ed505d5a1f --- /dev/null +++ b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/Scaffoldable.java @@ -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; + } +} diff --git a/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldableResource.java b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldableResource.java new file mode 100644 index 0000000000..8cc0a8d566 --- /dev/null +++ b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldableResource.java @@ -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 +{ + + 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> 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; + } +} diff --git a/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldableResourceGenerator.java b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldableResourceGenerator.java new file mode 100644 index 0000000000..7d6d5a514e --- /dev/null +++ b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldableResourceGenerator.java @@ -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 +{ + @Override + public boolean handles(Class type, Object resource) + { + if (resource instanceof Scaffoldable) + { + return true; + } + return false; + } + + @Override + @SuppressWarnings("unchecked") + public > T getResource(ResourceFactory factory, Class type, + Scaffoldable resource) + { + return (T) new ScaffoldableResource(factory, resource); + } + + @Override + public > Class getResourceType(ResourceFactory factory, + Class type, Scaffoldable resource) + { + return ScaffoldableResource.class; + } +} diff --git a/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/Scaffolded.java b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/Scaffolded.java new file mode 100644 index 0000000000..c23a128700 --- /dev/null +++ b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/Scaffolded.java @@ -0,0 +1,28 @@ +package org.jboss.forge.addon.scaffold.mock; + +public class Scaffolded +{ + + private String name; + + public Scaffolded(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + @Override + public String toString() + { + return name; + } +} diff --git a/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldedResource.java b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldedResource.java new file mode 100644 index 0000000000..a045330533 --- /dev/null +++ b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldedResource.java @@ -0,0 +1,54 @@ +package org.jboss.forge.addon.scaffold.mock; + +import java.util.List; + +import org.jboss.forge.addon.resource.Resource; +import org.jboss.forge.addon.resource.ResourceFactory; +import org.jboss.forge.addon.resource.VirtualResource; + +public class ScaffoldedResource extends VirtualResource +{ + + private Scaffolded value; + + public ScaffoldedResource(ResourceFactory factory, Scaffolded resource) + { + super(factory, null); + this.value = resource; + } + + protected ScaffoldedResource(ResourceFactory factory, Resource parent) + { + super(factory, parent); + } + + @Override + protected List> 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 Scaffolded getUnderlyingResourceObject() + { + return value; + } +} diff --git a/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldedResourceGenerator.java b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldedResourceGenerator.java new file mode 100644 index 0000000000..c052cfe066 --- /dev/null +++ b/scaffold/tests/src/test/java/org/jboss/forge/addon/scaffold/mock/ScaffoldedResourceGenerator.java @@ -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 ScaffoldedResourceGenerator implements ResourceGenerator +{ + @Override + public boolean handles(Class type, Object resource) + { + if (resource instanceof ScaffoldedResource) + { + return true; + } + return false; + } + + @Override + @SuppressWarnings("unchecked") + public > T getResource(ResourceFactory factory, Class type, + Scaffolded resource) + { + return (T) new ScaffoldedResource(factory, resource); + } + + @Override + public > Class getResourceType(ResourceFactory factory, + Class type, Scaffolded resource) + { + return ScaffoldedResource.class; + } +}