package insertGenerics; import de.dhbwstuttgart.bytecode.constraint.TPHConstraint.Relation; import de.dhbwstuttgart.bytecode.genericsGeneratorTypes.GenericGenratorResultForSourceFile; import de.dhbwstuttgart.bytecode.insertGenerics.ClassConstraint; import de.dhbwstuttgart.bytecode.insertGenerics.FamilyOfGeneratedGenerics; import de.dhbwstuttgart.bytecode.insertGenerics.MethodConstraint; import de.dhbwstuttgart.core.JavaTXCompiler; import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.syntaxtree.visual.ASTPrinter; import de.dhbwstuttgart.syntaxtree.visual.ASTTypePrinter; import de.dhbwstuttgart.typedeployment.TypeInsert; import de.dhbwstuttgart.typedeployment.TypeInsertFactory; import de.dhbwstuttgart.typeinference.result.ResultSet; import org.junit.Test; import static org.junit.Assert.assertEquals; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.net.URLClassLoader; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; public class TestTPHsAndGenerics { private static final String rootDirectory = System.getProperty("user.dir")+"/src/test/resources/insertGenericsJav/"; private String pathToClassFile = System.getProperty("user.dir")+"/src/test/resources/testBytecode/generatedBC/"; private static ClassLoader loader; private static Class classToTest; private static Object instanceOfClass; private static String className = "TestTPHsAndGenerics"; @Test public void ggFinder() throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { execute(new File(rootDirectory+className+".jav")); } private static class TestResultSet{ } public TestResultSet execute(File fileToTest) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { JavaTXCompiler compiler = new JavaTXCompiler(fileToTest); List results = compiler.typeInference(); List simplifyResultsForAllSourceFiles = compiler.getGeneratedGenericResultsForAllSourceFiles(results); List classConstraintsTest = new ArrayList<>(); HashMap> methodConstraintsWithPositionTest = new HashMap<>(); FamilyOfGeneratedGenerics fogg = compiler.fogg; Set lmc; lmc = new HashSet<>(); if (fogg.allConstraints.contains((new MethodConstraint("DZP", "ETW", Relation.EXTENDS)))) { classConstraintsTest.add(new ClassConstraint("UD", "DZP", Relation.EXTENDS)); classConstraintsTest.add(new ClassConstraint("DZP", "ETW", Relation.EXTENDS)); classConstraintsTest.add(new ClassConstraint("U", "java/lang/Object", Relation.EXTENDS)); lmc.add(new MethodConstraint("AI", "AE", Relation.EXTENDS)); lmc.add(new MethodConstraint("AD", "AI", Relation.EXTENDS)); lmc.add(new MethodConstraint("AB", "AM", Relation.EXTENDS)); lmc.add(new MethodConstraint("AE", "java/lang/Object", Relation.EXTENDS)); lmc.add(new MethodConstraint("AM", "java/lang/Object", Relation.EXTENDS)); methodConstraintsWithPositionTest.put("TPH ABm(TPH ABTPH AD)", lmc); lmc = new HashSet<>(); lmc.add(new MethodConstraint("V", "UD", Relation.EXTENDS)); methodConstraintsWithPositionTest.put("TPH ETWid2(TPH V)", lmc); lmc = new HashSet<>(); lmc.add(new MethodConstraint("AM", "java/lang/Object", Relation.EXTENDS)); methodConstraintsWithPositionTest.put("TPH AIm2(TPH AMTPH AI)", lmc); } else { if (fogg.allConstraints.contains((new MethodConstraint("DZP", "U", Relation.EXTENDS)))) { classConstraintsTest.add(new ClassConstraint("ETW", "DZP", Relation.EXTENDS)); classConstraintsTest.add(new ClassConstraint("DZP", "U", Relation.EXTENDS)); classConstraintsTest.add(new ClassConstraint("ETW", "java/lang/Object", Relation.EXTENDS)); lmc.add(new MethodConstraint("AI", "AE", Relation.EXTENDS)); lmc.add(new MethodConstraint("AD", "AI", Relation.EXTENDS)); lmc.add(new MethodConstraint("AB", "AM", Relation.EXTENDS)); lmc.add(new MethodConstraint("AE", "java/lang/Object", Relation.EXTENDS)); lmc.add(new MethodConstraint("AM", "java/lang/Object", Relation.EXTENDS)); methodConstraintsWithPositionTest.put("TPH ABm(TPH ABTPH AD)", lmc); lmc = new HashSet<>(); lmc.add(new MethodConstraint("V", "ETW", Relation.EXTENDS)); methodConstraintsWithPositionTest.put("TPH ETWid2(TPH V)", lmc); lmc = new HashSet<>(); lmc.add(new MethodConstraint("AM", "java/lang/Object", Relation.EXTENDS)); methodConstraintsWithPositionTest.put("TPH AIm2(TPH AMTPH AI)", lmc); } else { if (fogg.allConstraints.contains((new MethodConstraint("EIM", "FEA", Relation.EXTENDS)))) { classConstraintsTest.add(new ClassConstraint("VK", "EIM", Relation.EXTENDS)); classConstraintsTest.add(new ClassConstraint("EIM", "FEA", Relation.EXTENDS)); classConstraintsTest.add(new ClassConstraint("FEA", "java/lang/Object", Relation.EXTENDS)); lmc.add(new MethodConstraint("AI", "AE", Relation.EXTENDS)); lmc.add(new MethodConstraint("AD", "AI", Relation.EXTENDS)); lmc.add(new MethodConstraint("AB", "AM", Relation.EXTENDS)); lmc.add(new MethodConstraint("AE", "java/lang/Object", Relation.EXTENDS)); lmc.add(new MethodConstraint("AM", "java/lang/Object", Relation.EXTENDS)); methodConstraintsWithPositionTest.put("TPH ABm(TPH ABTPH AD)", lmc); lmc = new HashSet<>(); lmc.add(new MethodConstraint("V", "VK", Relation.EXTENDS)); methodConstraintsWithPositionTest.put("TPH FEAid2(TPH V)", lmc); lmc = new HashSet<>(); lmc.add(new MethodConstraint("AM", "java/lang/Object", Relation.EXTENDS)); lmc.add(new MethodConstraint("AI", "java/lang/Object", Relation.EXTENDS)); methodConstraintsWithPositionTest.put("TPH AIm2(TPH AMTPH AI)", lmc); } } } Set computedClassCons = new HashSet<>(fogg.classConstraints); Set expectedClassCons = new HashSet<>(classConstraintsTest); assertEquals(expectedClassCons, computedClassCons); HashMap> methodConstraintsWithPositionComputed = new HashMap<>(); fogg.methodConstraintsWithPosition.forEach((s, l) -> methodConstraintsWithPositionComputed.put(s,new HashSet<>(l))); assertEquals(methodConstraintsWithPositionTest, methodConstraintsWithPositionComputed); /* compiler.generateBytecode(new File(pathToClassFile), results, simplifyResultsForAllSourceFiles); loader = new URLClassLoader(new URL[] {new URL("file://"+pathToClassFile)}); classToTest = loader.loadClass(className); instanceOfClass = classToTest.getDeclaredConstructor().newInstance(); */ return new TestResultSet(); } }