package org.appfuse.mojo; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.apache.maven.archetype.Archetype; import org.apache.maven.archetype.ArchetypeGenerationRequest; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.DefaultArtifactRepository; import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; import org.apache.maven.model.Build; import org.apache.maven.plugin.testing.AbstractMojoTestCase; import org.apache.maven.plugin.testing.stubs.MavenProjectStub; import org.apache.maven.project.MavenProject; import org.appfuse.mojo.installer.InstallArtifactsMojo; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.StringUtils; public abstract class AbstractAppFuseMojoTestCase extends AbstractMojoTestCase { private boolean genericCore = false; public void setGenericCore(boolean genericCore) { this.genericCore = genericCore; } protected boolean checkExists(String target) { return (getTestFile(target).exists()); } protected void deleteDirectory(String targetFolder) throws Exception { FileUtils.deleteDirectory(getTestFile(targetFolder)); } protected HibernateExporterMojo getHibernateMojo(String goal, String implementation) throws Exception { String path = "target/test-classes/" + implementation + "/" + goal + "-config.xml"; if (genericCore) { path = "target/test-classes/" + implementation + "/generic-config.xml"; } HibernateExporterMojo mojo = (HibernateExporterMojo) lookupMojo(goal, getTestFile(path)); mojo.getLog().info("executing: " + getTestFile(path).getPath()); //setVariableValueToObject(mojo, "project", getMavenProject()); // disableInstallation to prevent installation System.setProperty("disableInstallation", "true"); mojo.setProject(getMavenProject()); return mojo; } protected InstallArtifactsMojo getInstallMojo(String goal, String implementation) throws Exception { String path = "target/test-project"; InstallArtifactsMojo mojo = (InstallArtifactsMojo) lookupMojo(goal, getTestFile(path)); mojo.getLog().info("executing: " + getTestFile(path).getPath()); //setVariableValueToObject(mojo, "project", getMavenProject()); return mojo; } protected void copyFileToDirectory(String from, String to) throws Exception { FileUtils.copyFileToDirectory(getTestFile(from), getTestFile(to)); } protected MavenProject getMavenProject() { final Build build = new Build(); build.setDirectory("target"); build.setOutputDirectory("target/classes"); build.setTestOutputDirectory("target/test-classes"); return new MavenProjectStub() { String daoFramework = "hibernate"; String webFramework = "struts"; Properties props; public Build getBuild() { return build; } public String getArtifactId() { return "test-project"; } public String getGroupId() { return "com.company"; } public String getPackaging() { return "war"; } @Override public Properties getProperties() { if (props == null) { props = new Properties(); props.put("dao.framework", this.daoFramework); props.put("web.framework", this.webFramework); props.put("amp.disableInstallation", "true"); } return props; } }; } protected void createTestProject(String archetypeArtifactId, String archetypeVersion) throws Exception { MavenProject project = getMavenProject(); FileUtils.deleteDirectory(getTestFile("target/" + project.getArtifactId())); Archetype archetype = (Archetype) lookup(Archetype.ROLE); String localRepoPath = System.getProperty( "localRepoPath" ); if (StringUtils.isEmpty(localRepoPath)) { localRepoPath = System.getProperty("user.home") + System.getProperty("file.separator") + ".m2" + System.getProperty("file.separator") + "repository"; } String mavenRepoLocal = "file://" + localRepoPath; ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) container.lookup(ArtifactRepositoryLayout.ROLE, "default"); ArtifactRepository localRepository = new DefaultArtifactRepository("local", mavenRepoLocal, layout); List<ArtifactRepository> remoteRepositories = new ArrayList<ArtifactRepository>(); String archetypeGroupId = "org.appfuse.archetypes"; ArchetypeGenerationRequest request = new ArchetypeGenerationRequest(); request.setGroupId(project.getGroupId()).setArtifactId(project.getArtifactId()).setVersion("1.0-SNAPSHOT"); request.setArchetypeGroupId(archetypeGroupId).setArchetypeArtifactId(archetypeArtifactId); request.setArchetypeVersion(archetypeVersion); request.setLocalRepository(localRepository); request.setRemoteArtifactRepositories(remoteRepositories); request.setOutputDirectory(getTestFile("target").getAbsolutePath()); archetype.generateProjectFromArchetype(request); } }