package plugindevelopment; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Vector; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.FileAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.apache.log4j.SimpleLayout; import typinferenz.TypeInsertPoint; import typinferenz.TypeInsertSet; import junit.framework.TestCase; import mycompiler.MyCompiler; import mycompiler.MyCompilerAPI; import mycompiler.myparser.JavaParser.yyException; import mycompiler.mytest.LambdaTest; import mycompiler.mytypereconstruction.TypeinferenceResultSet; public class TypeInsertTester{ private static Logger inferencelog = Logger.getLogger("Typeinference"); static{ { // Ausgabeoptionen fuer die Logger ConsoleAppender logAppender = new ConsoleAppender(new SimpleLayout()); logAppender.setTarget("System.out"); logAppender.activateOptions(); inferencelog.addAppender(logAppender); //Bei den Tests wird der Log auch in System.out geschrieben. } } private static final String rootDirectory = System.getProperty("user.dir")+"/test/plugindevelopment/"; public static void test(String sourceFileToInfere, String solutionFile){ String inferedSource = ""; MyCompilerAPI compiler = MyCompiler.getAPI(); try { compiler.parse(new File(rootDirectory + sourceFileToInfere)); Vector results = compiler.typeReconstruction(); TestCase.assertTrue("Es darf nicht mehr als eine Lösungsmöglichkeit geben", results.size()==1); for(TypeinferenceResultSet result : results){ Vector points = result.getTypeInsertionPoints(); TestCase.assertTrue("Es muss mindestens ein TypeInsertSet vorhanden sein", points.size()>0); for(TypeInsertSet point : points){ if(point.points.size()>0){ inferedSource = point.insertAllTypes(getFileContent(rootDirectory + sourceFileToInfere)); String solutionSource = getFileContent(rootDirectory + solutionFile); System.out.println("\nInferierter Source:\n"+inferedSource); TestCase.assertTrue("Nicht das erwartete Ergebnis", inferedSource.equals(solutionSource)); } } } } catch (IOException | yyException e) { e.printStackTrace(); TestCase.fail(); } } //Source: https://stackoverflow.com/questions/326390/how-to-create-a-java-string-from-the-contents-of-a-file private static String getFileContent(String path)throws IOException { byte[] encoded = Files.readAllBytes(Paths.get(path)); return StandardCharsets.UTF_8.decode(ByteBuffer.wrap(encoded)).toString(); } }