JavaTXCompilerInJavaTXNoMaven/tests/typeinference/JavaTXCompilerTest.java
2024-05-27 22:38:59 +02:00

201 lines
7.0 KiB
Java

package typeinference;
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.Ignore;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
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.HashSet;
import java.util.List;
import java.util.Set;
@Ignore("To be renewed")
public class JavaTXCompilerTest {
public static final String rootDirectory = System.getProperty("user.dir") + "/src/test/resources/javFiles/";
@Test
public void finiteClosure() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "fc.jav"));
}
@Test
public void importTest() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Import.jav"));
}
@Test
public void fieldTest() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "FieldAccess.jav"));
}
@Test
public void lambda() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Lambda.jav"));
}
@Test
public void lambda2() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Lambda2.jav"));
}
@Test
public void lambda3() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Lambda3.jav"));
}
@Test
public void lambdaField() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "LambdaField.jav"));
}
@Test
public void mathStruc() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "mathStruc.jav"));
}
@Test
public void generics() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Generics.jav"));
}
@Test
public void genericsMethodCall() throws IOException, ClassNotFoundException {
TestResultSet result = execute(new File(rootDirectory + "MethodCallGenerics.jav"));
// TODO: Hier sollte der Rückgabetyp der Methode String sein
}
@Test
public void faculty() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Faculty.jav"));
}
@Test
public void facultyIf() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "FacultyIf.jav"));
}
@Test
public void facultyTyped() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "FacultyTyped.jav"));
}
@Test
public void matrix() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Matrix.jav"));
}
@Test
public void packageTests() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Package.jav"));
}
@Test
public void vector() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Vector.jav"));
}
@Test
public void lambdaRunnable() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "LambdaRunnable.jav"));
}
@Test
public void expressions() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Expressions.jav"));
}
@Test
public void addLong() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "AddLong.jav"));
}
@Test
public void fields() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Fields.jav"));
}
@Test
public void ifStatement() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "IfTest.jav"));
}
@Test
public void multipleSolutions() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "Sorting.jav"));
}
@Test
public void listenerTest() throws IOException, ClassNotFoundException {
execute(new File(rootDirectory + "ListenerOverload.jav"));
}
private static class TestResultSet {
}
public TestResultSet execute(File fileToTest) throws IOException, ClassNotFoundException {
// filesToTest.add(new File(rootDirectory+"fc.jav"));
// filesToTest.add(new File(rootDirectory+"Lambda.jav"));
// filesToTest.add(new File(rootDirectory+"Lambda2.jav"));
// filesToTest.add(new File(rootDirectory+"Lambda3.jav"));
// filesToTest.add(new File(rootDirectory+"Vector.jav"));
// filesToTest.add(new File(rootDirectory+"Generics.jav"));
// filesToTest.add(new File(rootDirectory+"MethodsEasy.jav"));
// filesToTest.add(new File(rootDirectory+"Matrix.jav"));
// filesToTest.add(new File(rootDirectory+"Import.jav"));
// filesToTest.add(new File(rootDirectory+"Faculty.jav"));
// filesToTest.add(new File(rootDirectory+"mathStruc.jav"));
// filesToTest.add(new File(rootDirectory+"test.jav"));
JavaTXCompiler compiler = new JavaTXCompiler(fileToTest);
for (File f : compiler.sourceFiles.keySet()) {
SourceFile sf = compiler.sourceFiles.get(f);
System.out.println(ASTTypePrinter.print(sf));
System.out.println(ASTPrinter.print(sf));
}
// compiler.generateBytecode(rootDirectory+"xxx.class", results, simplifyResultsForAllSourceFiles);
for (File f : compiler.sourceFiles.keySet()) {
List<ResultSet> results = compiler.typeInference(f);
SourceFile sf = compiler.sourceFiles.get(f);
System.out.println(ASTTypePrinter.print(sf));
System.out.println(ASTPrinter.print(sf));
// List<ResultSet> results = compiler.typeInference(); PL 2017-10-03 vor die For-Schleife gezogen
assert results.size() > 0;
Set<String> insertedTypes = new HashSet<>();
for (var i = 0; i < results.size(); i++) {
var resultSet = results.get(i);
Set<TypeInsert> result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet, compiler.getGeneratedGenerics().get(sf).get(i));
assert result.size() > 0;
String content = readFile(f.getPath(), StandardCharsets.UTF_8);
for (TypeInsert tip : result) {
insertedTypes.add(tip.insert(content));
}
}
for (String s : insertedTypes) {
System.out.println(s);
}
}
return new TestResultSet();
}
static String readFile(String path, Charset encoding) throws IOException {
byte[] encoded = Files.readAllBytes(Paths.get(path));
return new String(encoded, encoding);
}
}