package org.jboss.windup.rules.java;
import java.nio.file.Path;
import org.jboss.windup.graph.model.resource.FileModel;
import org.apache.commons.io.FileUtils;
import org.jboss.forge.furnace.repositories.AddonDependencyEntry;
import org.jboss.forge.furnace.util.Iterators;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.context.EvaluationContext;
import org.jboss.windup.exec.configuration.WindupConfiguration;
@RunWith(Arquillian.class)
public class JavaClassTestFile1
{
@Deployment
@Dependencies({
@AddonDependency(name = "org.jboss.windup.config:windup-config"),
@AddonDependency(name = "org.jboss.windup.exec:windup-exec"),
@AddonDependency(name = "org.jboss.windup.rules.apps:windup-rules-java"),
@AddonDependency(name = "org.jboss.windup.reporting:windup-reporting"),
@AddonDependency(name = "org.jboss.forge.furnace.container:cdi")
})
public static ForgeArchive getDeployment()
{
final ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class)
.addBeansXML()
.addClass(TestJavaClassTestRuleProvider.class)
.addClass(JavaClassTest.class)
.addAsAddonDependencies(
AddonDependencyEntry.create("org.jboss.windup.config:windup-config"),
AddonDependencyEntry.create("org.jboss.windup.exec:windup-exec"),
AddonDependencyEntry.create("org.jboss.windup.rules.apps:windup-rules-java"),
AddonDependencyEntry.create("org.jboss.windup.reporting:windup-reporting"),
AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi")
);
return archive;
}
@Inject
TestJavaClassTestRuleProvider provider;
@Inject
private WindupProcessor processor;
@Inject
private GraphContextFactory factory;
@Test
public void testJavaClassCondition() throws IOException, InstantiationException, IllegalAccessException
{
try (GraphContext context = factory.create(getDefaultPath()))
{
final String inputDir = "src/test/resources/org/jboss/windup/rules/java";
final Path outputPath = Paths.get(FileUtils.getTempDirectory().toString(),
"windup_" + RandomStringUtils.randomAlphanumeric(6));
FileUtils.deleteDirectory(outputPath.toFile());
Files.createDirectories(outputPath);
// Fill the graph with test data.
ProjectModel pm = context.getFramed().addVertex(null, ProjectModel.class);
pm.setName("Main Project");
// Create FileModel for $inputDir
FileModel inputPathFrame = context.getFramed().addVertex(null, FileModel.class);
inputPathFrame.setFilePath(inputDir);
inputPathFrame.setProjectModel(pm);
pm.addFileModel(inputPathFrame);
// Set project.rootFileModel to inputPath
pm.setRootFileModel(inputPathFrame);
// Create FileModel for $inputDir/HintsClassificationsTest.java
FileModel fileModel = context.getFramed().addVertex(null, FileModel.class);
fileModel.setFilePath(inputDir + "/JavaHintsClassificationsTest.java");
fileModel.setProjectModel(pm);
pm.addFileModel(fileModel);
// Create FileModel for $inputDir/JavaClassTest.java
fileModel = context.getFramed().addVertex(null, FileModel.class);
fileModel.setFilePath(inputDir + "/JavaClassTest.java");
fileModel.setProjectModel(pm);
pm.addFileModel(fileModel);
context.getGraph().getBaseGraph().commit();
final WindupConfiguration processorConfig = new WindupConfiguration().setOutputDirectory(outputPath);
processorConfig.setRuleProviderFilter(new RuleProviderWithDependenciesPredicate(
TestJavaClassTestRuleProvider.class));
processorConfig.setGraphContext(context).setRuleProviderFilter(
new RuleProviderWithDependenciesPredicate(TestJavaClassTestRuleProvider.class));
processorConfig.setInputPath(Paths.get(inputDir));
processorConfig.setOutputDirectory(outputPath);
processorConfig.setOptionValue(ScanPackagesOption.NAME, Collections.singletonList(""));
processor.execute(processorConfig);
GraphService<JavaTypeReferenceModel> typeRefService = new GraphService<>(context,
JavaTypeReferenceModel.class);
Iterable<JavaTypeReferenceModel> typeReferences = typeRefService.findAll();
Assert.assertTrue(typeReferences.iterator().hasNext());
Assert.assertEquals(3, provider.getFirstRuleMatchCount());
Assert.assertEquals(1, provider.getSecondRuleMatchCount());
}
}
private Path getDefaultPath()
{
return FileUtils.getTempDirectory().toPath().resolve("Windup")
.resolve("windupgraph_javaclasstest_" + RandomStringUtils.randomAlphanumeric(6));
}
}