Skip to content

Commit

Permalink
Integration tests are now run in temporary directory. Implemented
Browse files Browse the repository at this point in the history
GradleManager.
  • Loading branch information
adam-wyluda committed Jul 17, 2013
1 parent e6c41f0 commit 5524f7c
Show file tree
Hide file tree
Showing 8 changed files with 212 additions and 66 deletions.
7 changes: 7 additions & 0 deletions addon/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@
<classifier>forge-addon</classifier>
<optional>true</optional>
</dependency>

<dependency>
<groupId>org.jboss.forge.furnace</groupId>
<artifactId>container-cdi</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* 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.gradle.projects;

import org.jboss.forge.furnace.services.Exported;

/**
* @author Adam Wyłuda
*/
@Exported
public interface GradleManager
{
boolean runGradleBuild(String directory, String task, String profile);
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.facets.AbstractFacet;
import org.jboss.forge.addon.gradle.projects.GradleFacet;
import org.jboss.forge.addon.gradle.projects.GradleConnectionManager;
import org.jboss.forge.addon.gradle.projects.GradleManagerImpl;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.facets.DependencyFacet;

Expand All @@ -32,7 +32,7 @@
public class GradleDependencyFacet extends AbstractFacet<Project> implements DependencyFacet
{
@Inject
private GradleConnectionManager gradleManager;
private GradleManager gradleManager;

@Override
public boolean install()
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/*
* 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.gradle.projects;

import java.io.File;
import java.util.concurrent.CountDownLatch;

import org.gradle.jarjar.com.google.common.base.Preconditions;
import org.gradle.tooling.BuildLauncher;
import org.gradle.tooling.GradleConnectionException;
import org.gradle.tooling.GradleConnector;
import org.gradle.tooling.ProjectConnection;
import org.gradle.tooling.ResultHandler;
import org.jboss.forge.furnace.util.Strings;

/**
* @author Adam Wyłuda
*/
public class GradleManagerImpl implements GradleManager
{
private static class ResultHolder
{
private volatile boolean result;
}

@Override
public boolean runGradleBuild(String directory, String task, String profile)
{
String gradleHome = System.getenv("GRADLE_HOME");
Preconditions.checkArgument(!Strings.isNullOrEmpty(gradleHome), "GRADLE_HOME not set");

GradleConnector connector = GradleConnector.newConnector();
ProjectConnection connection = connector
.forProjectDirectory(new File(directory))
.useGradleUserHomeDir(new File(gradleHome))
.connect();

BuildLauncher launcher = connection.newBuild().forTasks(task);
if (!Strings.isNullOrEmpty(profile))
{
launcher.withArguments("-Pprofile=" + profile);
}

final ResultHolder holder = new ResultHolder();
final CountDownLatch latch = new CountDownLatch(1);

launcher.run(new ResultHandler<Object>()
{
@Override
public void onComplete(Object result)
{
holder.result = true;
latch.countDown();
}

@Override
public void onFailure(GradleConnectionException failure)
{
holder.result = false;
latch.countDown();
}
});

try
{
latch.await();
}
catch (InterruptedException e)
{
e.printStackTrace();
}

return holder.result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,16 @@
import org.jboss.forge.addon.gradle.projects.model.GradleTask;
import org.jboss.forge.addon.gradle.projects.model.GradleTaskBuilder;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.arquillian.AddonDependency;
import org.jboss.forge.arquillian.Dependencies;
import org.jboss.forge.arquillian.archive.ForgeArchive;
import org.jboss.forge.furnace.repositories.AddonDependencyEntry;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;


/**
* @author Adam Wyłuda
*/
Expand All @@ -46,23 +45,30 @@ public static ForgeArchive getDeployment()
return ShrinkWrap
.create(ForgeArchive.class)
.addBeansXML()
.addClass(GradleTestProjectProvider.class)
.addAsResource("build.gradle")
.addAsAddonDependencies(
AddonDependencyEntry.create("org.jboss.forge.furnace:container-cdi", "2.0.0-SNAPSHOT"),
AddonDependencyEntry.create("org.jboss.forge.addon:resources", "2.0.0-SNAPSHOT"),
AddonDependencyEntry.create("org.jboss.forge.addon:gradle", "2.0.0-SNAPSHOT"),
AddonDependencyEntry.create("org.jboss.forge.addon:projects", "2.0.0-SNAPSHOT")
);
}

@Inject
private ProjectFactory projectFactory;

private GradleTestProjectProvider projectProvider;
private Project project;

@Before
public void setUp()
{
project = projectFactory.createTempProject();
project = projectProvider.create();
}

@After
public void cleanUp()
{
projectProvider.clean();
}

@Test
Expand Down Expand Up @@ -100,16 +106,30 @@ public void testCreateTask()
.setType("Copy")
.setCode("println 'myTask!'"));

Project theSameProject = projectFactory.findProject(project.getProjectRoot());
Project theSameProject = projectProvider.findProject();
GradleFacet newGradleFacet = theSameProject.getFacet(GradleFacet.class);

boolean containsMyTask = false;
for (GradleTask task : newGradleFacet.getModel().getTasks()) {
if (task.getName().equals("myTask")) {
for (GradleTask task : newGradleFacet.getModel().getTasks())
{
if (task.getName().equals("myTask"))
{
containsMyTask = true;
break;
}
}
assertTrue(containsMyTask);
}

@Test
public void testExecuteTask()
{
// TODO
}

@Test
public void testExecuteTaskWithProfile()
{
// TODO
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* 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.gradle.projects;

import javax.inject.Inject;

import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.addon.resource.DirectoryResource;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.addon.resource.ResourceFactory;
import org.jboss.forge.furnace.Furnace;
import org.jboss.forge.furnace.services.Exported;

/**
* @author Adam Wyłuda
*/
@Exported
public class GradleTestProjectProvider
{
@Inject
private Furnace furnace;
@Inject
private GradleProjectLocator locator;
@Inject
private ProjectFactory projectFactory;
@Inject
private ResourceFactory resourceFactory;

private DirectoryResource projectDir;

public Project create()
{
DirectoryResource addonDir = resourceFactory.create(furnace.getRepositories().get(0).getRootDirectory()).reify(
DirectoryResource.class);
projectDir = addonDir.createTempResource();
FileResource<?> gradleFile = projectDir.getChild("build.gradle").reify(FileResource.class);
gradleFile.createNewFile();
gradleFile.setContents(getClass().getResourceAsStream("/build.gradle"));
return findProject();
}

public Project findProject()
{
return projectFactory.findProject(projectDir);
}

public void clean()
{
projectDir.delete(true);
}
}

0 comments on commit 5524f7c

Please sign in to comment.