package org.jboss.windup.config.selectables; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.forge.arquillian.AddonDependency; import org.jboss.forge.arquillian.AddonDependencies; import org.jboss.forge.arquillian.archive.AddonArchive; import org.jboss.forge.furnace.util.OperatingSystemUtils; import org.jboss.forge.furnace.util.Sets; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.windup.config.DefaultEvaluationContext; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.Variables; import org.jboss.windup.config.exception.IllegalTypeArgumentException; import org.jboss.windup.graph.GraphContext; import org.jboss.windup.graph.GraphContextFactory; import org.jboss.windup.graph.model.WindupVertexFrame; import org.jboss.windup.rules.apps.java.model.JavaClassModel; import org.jboss.windup.rules.apps.java.model.project.MavenProjectModel; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.ocpsoft.rewrite.param.DefaultParameterValueStore; import org.ocpsoft.rewrite.param.ParameterValueStore; @RunWith(Arquillian.class) public class VariablesTest { @Deployment @AddonDependencies({ @AddonDependency(name = "org.jboss.windup.config:windup-config"), @AddonDependency(name = "org.jboss.windup.rules.apps:windup-rules-java"), @AddonDependency(name = "org.jboss.forge.furnace.container:cdi") }) public static AddonArchive getDeployment() { final AddonArchive archive = ShrinkWrap.create(AddonArchive.class) .addBeansXML(); return archive; } @Inject private GraphContextFactory factory; @Test public void testMultipleFramesSameName() throws Exception { final Path folder = OperatingSystemUtils.createTempDir().toPath(); try (final GraphContext context = factory.create(folder)) { GraphRewrite event = new GraphRewrite(context); final DefaultEvaluationContext evaluationContext = new DefaultEvaluationContext(); final DefaultParameterValueStore values = new DefaultParameterValueStore(); evaluationContext.put(ParameterValueStore.class, values); JavaClassModel classModel1 = context.getFramed().addVertex(null, JavaClassModel.class); classModel1.setQualifiedName("com.example.Class1NoToString"); JavaClassModel classModel2 = context.getFramed().addVertex(null, JavaClassModel.class); classModel2.setQualifiedName("com.example.Class2HasToString"); List<WindupVertexFrame> list1 = new ArrayList<>(); Variables vars = Variables.instance(event); vars.push(); vars.setVariable("1", list1); Iterable<? extends WindupVertexFrame> fromVars1 = vars.findVariable("1"); Assert.assertFalse(fromVars1.iterator().hasNext()); List<WindupVertexFrame> list2 = new ArrayList<>(); list2.add(classModel1); list2.add(classModel2); Map<String, Iterable<? extends WindupVertexFrame>> newFrame = new HashMap<>(); newFrame.put("1", list2); vars.push(newFrame); Iterable<? extends WindupVertexFrame> fromVars2 = vars.findVariable("1"); List<? extends WindupVertexFrame> fromVars2List = new ArrayList<>(Sets.toSet(fromVars2)); Assert.assertEquals(2, fromVars2List.size()); } } @Test public void testInvalidTypeGet() throws Exception { final Path folder = OperatingSystemUtils.createTempDir().toPath(); try (final GraphContext context = factory.create(folder)) { GraphRewrite event = new GraphRewrite(context); final DefaultEvaluationContext evaluationContext = new DefaultEvaluationContext(); final DefaultParameterValueStore values = new DefaultParameterValueStore(); evaluationContext.put(ParameterValueStore.class, values); JavaClassModel classModel1 = context.getFramed().addVertex(null, JavaClassModel.class); classModel1.setQualifiedName("com.example.Class1NoToString"); JavaClassModel classModel2 = context.getFramed().addVertex(null, JavaClassModel.class); classModel2.setQualifiedName("com.example.Class2HasToString"); Variables vars = Variables.instance(event); vars.push(); vars.setSingletonVariable("classModel1", classModel1); try { vars.findSingletonVariable(MavenProjectModel.class, "classModel1"); } catch (IllegalTypeArgumentException e) { Assert.assertNotNull(e.getMessage()); Assert.assertTrue(e .getMessage() .contains("Variable \"classModel1\" does not implement expected interface " + "\"" + MavenProjectModel.class.getName() + "\", actual implemented interfaces are")); } } } @Test public void testUnTypedGet() throws Exception { final Path folder = OperatingSystemUtils.createTempDir().toPath(); try (final GraphContext context = factory.create(folder)) { GraphRewrite event = new GraphRewrite(context); final DefaultEvaluationContext evaluationContext = new DefaultEvaluationContext(); final DefaultParameterValueStore values = new DefaultParameterValueStore(); evaluationContext.put(ParameterValueStore.class, values); JavaClassModel classModel1 = context.getFramed().addVertex(null, JavaClassModel.class); classModel1.setQualifiedName("com.example.Class1NoToString"); JavaClassModel classModel2 = context.getFramed().addVertex(null, JavaClassModel.class); classModel2.setQualifiedName("com.example.Class2HasToString"); Variables vars = Variables.instance(event); vars.push(); vars.setSingletonVariable("classModel1", classModel1); WindupVertexFrame frame = vars.findSingletonVariable("classModel1"); Assert.assertNotNull(frame); } } @Test public void testInvalidCountGet() throws Exception { final Path folder = OperatingSystemUtils.createTempDir().toPath(); try (final GraphContext context = factory.create(folder)) { GraphRewrite event = new GraphRewrite(context); final DefaultEvaluationContext evaluationContext = new DefaultEvaluationContext(); final DefaultParameterValueStore values = new DefaultParameterValueStore(); evaluationContext.put(ParameterValueStore.class, values); JavaClassModel classModel1 = context.getFramed().addVertex(null, JavaClassModel.class); classModel1.setQualifiedName("com.example.Class1NoToString"); JavaClassModel classModel2 = context.getFramed().addVertex(null, JavaClassModel.class); classModel2.setQualifiedName("com.example.Class2HasToString"); Variables vars = Variables.instance(event); vars.push(); vars.setVariable("classModel1", Arrays.asList((WindupVertexFrame) classModel1, classModel2)); try { vars.findSingletonVariable(MavenProjectModel.class, "classModel1"); } catch (IllegalStateException e) { Assert.assertNotNull(e.getMessage()); Assert.assertTrue(e.getMessage().contains("More than one frame present")); } } } }