fixed some tests, cleaned up, etc

This commit is contained in:
JonathanFleischmann 2024-07-02 21:49:53 +02:00
parent a5d13fd2a9
commit cc674625b0
165 changed files with 752 additions and 1130 deletions

View File

@ -34,4 +34,5 @@
- keine Accessmodifier/alles ist public - keine Accessmodifier/alles ist public
- logische Statements MÜSSEN geklammert werden, ansonsten wird ununterbrochen von links nach rechts berechnet - logische Statements MÜSSEN geklammert werden, ansonsten wird ununterbrochen von links nach rechts berechnet
(so würde z.B. (true || false == false) false zurückgeben) (so würde z.B. (true || false == false) false zurückgeben)
- i++ und i-- sind nicht erlaubt, stattdessen i = i + 1 und i = i - 1 bzw i += 1 und i -= 1 - i++ und i-- sind nur in for-Schleifen oder Statements erlaubt, --i und ++i sind generell nicht erlaubt
- ein File kann nur eine Klasse enthalten

View File

@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test;
import java.util.List; import java.util.List;
import static HelpFiles.TestFileTester.run; import static HelpClasses.TestFileTester.run;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;
class AllNegativeTests { class AllNegativeTests {

View File

@ -1,148 +0,0 @@
import org.junit.jupiter.api.Test;
import testResources.CodeGen.Features.*;
import static HelpFiles.TestFileTester.run;
class CodegeneratorTests {
// @Test
// void testPublicClass() {
// byte[] resultBytecode = Compiler.generateByteCodeArrayFromTypedAst();
// assertEquals(AbstractSyntax_PublicClass.get(), resultBytecode);
// }
// @Test
// void testMethodCall() {
// assertDoesNotThrow(() -> {
// BytecodeTestUtil testUtility = new BytecodeTestUtil("src/test/testFiles/ASTandTypedASTFeatures/MethodCall.java", "MethodCall");
//
// assertEquals(0, testUtility.invokeMethod("method", null));
// assertEquals(1, testUtility.invokeMethod("method1", new Class<?>[]{int.class}, 1));
// assertEquals(3, testUtility.invokeMethod("method2", new Class<?>[]{int.class, int.class}, 1, 2));
// });
// }
@Test
void runByteCodeBreakTests() {
run(ByteCode_Break.class);
}
@Test
void runByteCodeClassTests() {
run(ByteCode_Class.class);
}
@Test
void runByteCodeClassObjectsTests() {
run(ByteCode_ClassObjects.class);
}
@Test
void runByteCodeCommentTests() {
run(ByteCode_Comment.class);
}
@Test
void runByteCodeCompAssignTests() {
run(ByteCode_CompAssign.class);
}
@Test
void runByteCodeComplexCallsTests() {
run(ByteCode_ComplexCalls.class);
}
@Test
void runByteCodeConstructorTests() {
run(ByteCode_Constructor.class);
}
@Test
void runByteCodeContinueTests() {
run(ByteCode_Continue.class);
}
@Test
void runByteCodeDataTypesTests() {
run(ByteCode_DataTypes.class);
}
@Test
void runByteCodeFieldTests() {
run(ByteCode_Field.class);
}
@Test
void runByteCodeForTests() {
run(ByteCode_For.class);
}
@Test
void runByteCodeIfTests() {
run(ByteCode_If.class);
}
@Test
void runByteCodeLogicExprTests() {
run(ByteCode_LogicExpr.class);
}
@Test
void runByteCodeMainTests() {
run(ByteCode_Main.class);
}
@Test
void runByteCodeMethodTests() {
run(ByteCode_Method.class);
}
@Test
void runByteCodeMethodCallTests() {
run(ByteCode_MethodCall.class);
}
@Test
void runByteCodeMultipleClassesTests() {
run(ByteCode_MultipleClasses.class);
}
@Test
void runByteCodeOperatorsTests() {
run(ByteCode_Operators.class);
}
@Test
void runByteCodeOverloadedTests() {
run(ByteCode_Overloaded.class);
}
@Test
void runByteCodePrintTests() {
run(ByteCode_Print.class);
}
@Test
void runByteCodeReturnTests() {
run(ByteCode_Return.class);
}
@Test
void runByteCodeUnaryTests() {
run(ByteCode_Unary.class);
}
@Test
void runByteCodeVariableDefWithDeclTests() {
run(ByteCode_VariableDefWithDecl.class);
}
@Test
void runByteCodeWhileTests() {
run(ByteCode_While.class);
}
}

View File

@ -1,30 +1,145 @@
public class E2ETests { import E2ETests.Features.*;
char ZZ; import org.junit.jupiter.api.Test;
public E2ETests() { import static HelpClasses.TestFileTester.run;
this.ZZ = 'z';
// if (stuff1) {
// ifcontent class E2ETests {
// } else if (stuff2) {
// content2 // @Test
// } else if (stuffs3) { // void testPublicClass() {
// content3 // byte[] resultBytecode = Compiler.generateByteCodeArrayFromTypedAst();
// } else { // assertEquals(AbstractSyntax_PublicClass.get(), resultBytecode);
// contents4
// } // }
// @Test
// void testMethodCall() {
// assertDoesNotThrow(() -> {
// BytecodeTestUtil testUtility = new BytecodeTestUtil("src/test/testFiles/ASTandTypedASTFeatures/MethodCall.java", "MethodCall");
// //
// if (stuff1) { // assertEquals(0, testUtility.invokeMethod("method", null));
// ifcontent // assertEquals(1, testUtility.invokeMethod("method1", new Class<?>[]{int.class}, 1));
// } else { // assertEquals(3, testUtility.invokeMethod("method2", new Class<?>[]{int.class, int.class}, 1, 2));
// if (stuff2) { // });
// content2
// } else {
// if (stuff3) {
// content3
// } else {
// content4
// }
// }
// } // }
@Test
void runByteCodeBreakTests() {
run(ByteCode_Break.class);
}
@Test
void runByteCodeClassTests() {
run(ByteCode_Class.class);
}
@Test
void runByteCodeClassObjectsTests() {
run(ByteCode_ClassObjects.class);
}
@Test
void runByteCodeCommentTests() {
run(ByteCode_Comment.class);
}
@Test
void runByteCodeCompAssignTests() {
run(ByteCode_CompAssign.class);
}
@Test
void runByteCodeComplexCallsTests() {
run(ByteCode_ComplexCalls.class);
}
@Test
void runByteCodeConstructorTests() {
run(ByteCode_Constructor.class);
}
@Test
void runByteCodeContinueTests() {
run(ByteCode_Continue.class);
}
@Test
void runByteCodeDataTypesTests() {
run(ByteCode_DataTypes.class);
}
@Test
void runByteCodeFieldTests() {
run(ByteCode_Field.class);
}
@Test
void runByteCodeForTests() {
run(ByteCode_For.class);
}
@Test
void runByteCodeIfTests() {
run(ByteCode_If.class);
}
@Test
void runByteCodeLogicExprTests() {
run(ByteCode_LogicExpr.class);
}
@Test
void runByteCodeMainTests() {
run(ByteCode_Main.class);
}
@Test
void runByteCodeMethodTests() {
run(ByteCode_Method.class);
}
@Test
void runByteCodeMethodCallTests() {
run(ByteCode_MethodCall.class);
}
// @Test
// void runByteCodeMultipleClassesTests() {
// run(ByteCode_MultipleClasses.class);
// } TODO: Fix this test or remove it
@Test
void runByteCodeOperatorsTests() {
run(ByteCode_Operators.class);
}
@Test
void runByteCodeOverloadedTests() {
run(ByteCode_Overloaded.class);
}
@Test
void runByteCodePrintTests() {
run(ByteCode_Print.class);
}
@Test
void runByteCodeReturnTests() {
run(ByteCode_Return.class);
}
@Test
void runByteCodeUnaryTests() {
run(ByteCode_Unary.class);
}
@Test
void runByteCodeVariableDefWithDeclTests() {
run(ByteCode_VariableDefWithDecl.class);
}
@Test
void runByteCodeWhileTests() {
run(ByteCode_While.class);
} }
} }

View File

@ -0,0 +1,28 @@
package E2ETests;
import java.util.HashMap;
import java.util.Map;
public class ByteClassLoader extends ClassLoader {
// Map to store the class name and its corresponding byte array
private final Map<String, byte[]> classesBytes = new HashMap<>();
public ByteClassLoader() {
super(ClassLoader.getSystemClassLoader());
}
// Method to add a class byte array to the loader
public void addClass(String name, byte[] classData) {
classesBytes.put(name, classData);
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
byte[] classData = classesBytes.get(name);
if (classData == null) {
return super.findClass(name);
}
return defineClass(name, classData, 0, classData.length);
}
}

View File

@ -1,4 +1,4 @@
package testResources.CodeGen; package E2ETests;
import de.maishai.Compiler; import de.maishai.Compiler;
@ -31,7 +31,7 @@ public class BytecodeTestUtil {
clazz = classLoader.loadClass(className); clazz = classLoader.loadClass(className);
this.instance = clazz.getDeclaredConstructor().newInstance(); this.instance = clazz.getDeclaredConstructor().newInstance();
} catch (ClassNotFoundException | SecurityException | NoSuchMethodException e) { } catch (ClassNotFoundException | SecurityException | NoSuchMethodException e) {
LOGGER.log(Level.SEVERE, "Exception occur", e); LOGGER.log(Level.SEVERE, "Exception occurred", e);
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }

View File

@ -0,0 +1,32 @@
package E2ETests;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.Opcodes;
public class ClassNameExtractor {
public static String getClassName(byte[] classBytes) {
ClassReader classReader = new ClassReader(classBytes);
ClassNameVisitor classNameVisitor = new ClassNameVisitor();
classReader.accept(classNameVisitor, 0);
return classNameVisitor.getClassName();
}
private static class ClassNameVisitor extends ClassVisitor {
private String className;
public ClassNameVisitor() {
super(Opcodes.ASM9);
}
@Override
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
this.className = name.replace('/', '.');
}
public String getClassName() {
return className;
}
}
}

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -14,7 +14,7 @@ public class ByteCode_Break {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Break.java"), "Break"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Break.java"), "Break");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -14,7 +14,7 @@ public class ByteCode_Class {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Class.java"), "Class"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Class.java"), "Class");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import E2ETests.BytecodeTestUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -14,7 +14,7 @@ public class ByteCode_ClassObjects {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/ClassObjects.java"), "ClassObjects"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/ClassObjects.java"), "ClassObjects");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,14 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.TypedBlock;
import de.maishai.typedast.typedclass.TypedClass;
import de.maishai.typedast.typedclass.TypedConstructor;
import de.maishai.typedast.typedclass.TypedProgram;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -19,7 +14,7 @@ public class ByteCode_Comment {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Comment.java"), "Comment"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Comment.java"), "Comment");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import E2ETests.BytecodeTestUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -14,7 +14,7 @@ public class ByteCode_CompAssign {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/CompAssign.java"), "CompAssign"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/CompAssign.java"), "CompAssign");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,11 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.typedast.Type; import E2ETests.BytecodeTestUtil;
import de.maishai.typedast.typedclass.*;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -16,7 +14,7 @@ public class ByteCode_ComplexCalls {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/ComplexCalls.java"), "ComplexCalls"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/ComplexCalls.java"), "ComplexCalls");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,12 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.ast.Operator; import E2ETests.BytecodeTestUtil;
import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -17,7 +14,7 @@ public class ByteCode_Constructor {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Constructor.java"), "Constructor"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Constructor.java"), "Constructor");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,12 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.ast.Operator; import E2ETests.BytecodeTestUtil;
import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -17,7 +14,7 @@ public class ByteCode_Continue {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Continue.java"), "Continue"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Continue.java"), "Continue");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,11 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -16,7 +14,7 @@ public class ByteCode_DataTypes {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/DataTypes.java"), "DataTypes"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/DataTypes.java"), "DataTypes");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,11 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -16,7 +14,7 @@ public class ByteCode_Field {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Field.java"), "Field"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Field.java"), "Field");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,12 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.ast.Operator;
import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -17,7 +14,7 @@ public class ByteCode_For {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/For.java"), "For"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/For.java"), "For");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -14,7 +14,7 @@ public class ByteCode_If {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/If.java"), "If"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/If.java"), "If");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,12 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.ast.Operator; import E2ETests.BytecodeTestUtil;
import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -17,7 +14,7 @@ public class ByteCode_LogicExpr {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/LogicExpr.java"), "LogicExpr"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/LogicExpr.java"), "LogicExpr");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,10 +1,12 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import E2ETests.BytecodeTestUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.List; import java.util.List;
public class ByteCode_Main { public class ByteCode_Main {
@ -13,7 +15,7 @@ public class ByteCode_Main {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Main.java"), "Main"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Main.java"), "Main");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -102,5 +104,23 @@ public class ByteCode_Main {
} }
} }
//TODO: Add test for invoking main method, how to? @Test
public void testInvokeMainMethod() {
try {
PrintStream originalOut = System.out;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PrintStream newOut = new PrintStream(byteArrayOutputStream);
System.setOut(newOut);
Object returnValue = util.invokeMethod("main", new Class<?>[]{String[].class}, new Object[]{new String[0]});
Assertions.assertNull(returnValue);
Assertions.assertEquals(3, byteArrayOutputStream.toString().length());
// durch die newline wird die Ausgabe um 2 Zeichen länger
Assertions.assertEquals("3", byteArrayOutputStream.toString().substring(0, byteArrayOutputStream.toString().length() - 2));
System.setOut(originalOut);
} catch (Exception e) {
Assertions.fail();
}
}
//TODO: Add test for invoking main method by starting the compiled class file?
} }

View File

@ -1,11 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.typedast.Type; import E2ETests.BytecodeTestUtil;
import de.maishai.typedast.typedclass.*;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -16,7 +14,7 @@ public class ByteCode_Method {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Method.java"), "Method"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Method.java"), "Method");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,12 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.ast.Operator; import E2ETests.BytecodeTestUtil;
import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -17,7 +14,7 @@ public class ByteCode_MethodCall {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/MethodCall.java"), "MethodCall"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/MethodCall.java"), "MethodCall");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,9 +1,10 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import E2ETests.BytecodeTestUtil;
import de.maishai.Compiler;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -14,8 +15,8 @@ public class ByteCode_MultipleClasses {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/MultipleClasses1.java", util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/MultipleClasses1.java",
"src/test/testFiles/CodeGenFeatures/MultipleClasses2.java"), "MultipleClasses1"); "src/test/testFiles/E2EFeatures/MultipleClasses2.java"), "MultipleClasses1");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -116,4 +117,9 @@ public class ByteCode_MultipleClasses {
Assertions.fail(); Assertions.fail();
} }
} }
public static void main(String[] args) {
Compiler.generateByteCodeFilesFromFiles(List.of("src/test/testFiles/E2EFeatures/MultipleClasses1.java",
"src/test/testFiles/E2EFeatures/MultipleClasses2.java"));
}
} }

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import E2ETests.BytecodeTestUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -15,7 +15,7 @@ public class ByteCode_Operators {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Operators.java"), "Operators"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Operators.java"), "Operators");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import E2ETests.BytecodeTestUtil;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -14,7 +14,7 @@ public class ByteCode_Overloaded {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Overloaded.java"), "Overloaded"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Overloaded.java"), "Overloaded");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.PrintStream; import java.io.PrintStream;
@ -16,7 +16,7 @@ public class ByteCode_Print {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Print.java"), "Print"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Print.java"), "Print");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -14,7 +14,7 @@ public class ByteCode_Return {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Return.java"), "Return"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Return.java"), "Return");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,12 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import de.maishai.ast.UnaryOperator; import E2ETests.BytecodeTestUtil;
import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -17,7 +14,7 @@ public class ByteCode_Unary {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/Unary.java"), "Unary"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/Unary.java"), "Unary");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -14,7 +14,7 @@ public class ByteCode_VariableDefWithDecl {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/VariableDefWithDecl.java"), util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/VariableDefWithDecl.java"),
"VariableDefWithDecl"); "VariableDefWithDecl");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);

View File

@ -1,9 +1,9 @@
package testResources.CodeGen.Features; package E2ETests.Features;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import testResources.CodeGen.BytecodeTestUtil; import E2ETests.BytecodeTestUtil;
import java.util.List; import java.util.List;
@ -14,7 +14,7 @@ public class ByteCode_While {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
try { try {
util = new BytecodeTestUtil(List.of("src/test/testFiles/CodeGenFeatures/While.java"), "While"); util = new BytecodeTestUtil(List.of("src/test/testFiles/E2EFeatures/While.java"), "While");
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.Block; import de.maishai.ast.records.Block;
import de.maishai.ast.records.Constructor; import de.maishai.ast.records.Constructor;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.Block; import de.maishai.ast.records.Block;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.UnaryOperator; import de.maishai.ast.UnaryOperator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
import de.maishai.ast.records.Class; import de.maishai.ast.records.Class;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTFeatures; package FeatureTestResources.AST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.TypedBlock; import de.maishai.typedast.typedclass.TypedBlock;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.TypedBlock; import de.maishai.typedast.typedclass.TypedBlock;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

View File

@ -1,7 +1,5 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.records.Class;
import de.maishai.ast.records.*;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
@ -130,7 +130,6 @@ public class TypedAST_Continue {
Type.VOID Type.VOID
), ),
Type.VOID, Type.VOID,
// TODO: ist Konstruktor nicht immer vom Typ der Klasse?
List.of() List.of()
) )
), ),

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

View File

@ -1,7 +1,5 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.records.Class;
import de.maishai.ast.records.*;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;
@ -17,7 +17,34 @@ public class TypedAST_MultipleClasses {
Type.REFERENCE("MultipleClasses2") Type.REFERENCE("MultipleClasses2")
) )
), ),
List.of(
new TypedMethod(
"getIFromAnotherClass",
Type.INT,
List.of(), List.of(),
List.of(),
new TypedBlock(
List.of(),
List.of(
new TypedReturn(
new TypedFieldVarAccess(
true,
new TypedFieldVarAccess(
true,
null,
"anotherClass",
Type.REFERENCE("MultipleClasses2")
),
"i",
Type.INT
),
Type.INT
)
),
Type.INT
)
)
),
List.of( List.of(
new TypedConstructor( new TypedConstructor(
"MultipleClasses1", "MultipleClasses1",

View File

@ -1,7 +1,6 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.FieldVarAccess;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

View File

@ -1,6 +1,5 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.records.*;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,8 +1,6 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.UnaryOperator; import de.maishai.ast.UnaryOperator;
import de.maishai.ast.records.Class;
import de.maishai.ast.records.*;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.TypedClass; import de.maishai.typedast.typedclass.TypedClass;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,7 +1,5 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.records.Class;
import de.maishai.ast.records.*;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,8 +1,6 @@
package testResources.TypedAST.TypedASTFeatures; package FeatureTestResources.TypedAST;
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.Class;
import de.maishai.ast.records.*;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
import de.maishai.typedast.typedclass.*; import de.maishai.typedast.typedclass.*;

View File

@ -1,4 +1,4 @@
package HelpFiles; package HelpClasses;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -1,16 +1,4 @@
package testResources.AST.ASTMore;//public class ClassWithConstructor { package MoreTestResources.AST;
// int x;
// public classWithConstructor() {
// this.x = 10;
// int i;
// for (i = 0; i < 6; i = i + 1) {
// int j;
// for (j = 0; j < this.x; j += 1) {
// this.x = this.x * this.x;
// }
// }
// }
//}
import de.maishai.ast.*; import de.maishai.ast.*;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
@ -33,6 +21,7 @@ public class AbstractSyntax_ClassWithConstructor {
List.of( List.of(
new Class( new Class(
"ClassWithConstructor", "ClassWithConstructor",
null,
declarations, declarations,
methods, methods,
constructors constructors

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTMore;//public class ClassWithConstructorAndMethodCall { package MoreTestResources.AST;//public class ClassWithConstructorAndMethodCall {
// int x; // int x;
// //
// public ClassWithConstructorAndMethodCall() { // public ClassWithConstructorAndMethodCall() {

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTMore;//public class ClassWithConstructorWithCodeInComments { package MoreTestResources.AST;//public class ClassWithConstructorWithCodeInComments {
// int x; // int x;
// public ClassWithConstructorWithCodeInComments() { // public ClassWithConstructorWithCodeInComments() {
// this.x = 10; // this.x = 10;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTMore;//public class ClassWithConstructorWithParameters { package MoreTestResources.AST;//public class ClassWithConstructorWithParameters {
// int x; // int x;
// public ClassWithConstructorWithParameters(int startValue, int repetitions) { // public ClassWithConstructorWithParameters(int startValue, int repetitions) {
// this.x = startValue; // this.x = startValue;

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTMore;//public class ClassWithField { package MoreTestResources.AST;//public class ClassWithField {
// int x; // int x;
//} //}

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTMore;//public class ClassWithMethod { package MoreTestResources.AST;//public class ClassWithMethod {
// public boolean method() { // public boolean method() {
// return false; // return false;
// } // }

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTMore;//public class ClassWithMethodAndField { package MoreTestResources.AST;//public class ClassWithMethodAndField {
// char c; // char c;
// //
// public ClassWithMethodAndField(char character) { // public ClassWithMethodAndField(char character) {
@ -16,7 +16,7 @@ import de.maishai.typedast.Type;
import java.util.List; import java.util.List;
class AbstractSyntax_ClassWithMethodAndField { public class AbstractSyntax_ClassWithMethodAndField {
public static Program get() { public static Program get() {
List<Declaration> declarations = List.of( List<Declaration> declarations = List.of(
new Declaration( new Declaration(

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTMore;//public class ClassWithMoreComplexMethodAndMain { package MoreTestResources.AST;//public class ClassWithMoreComplexMethodAndMain {
// ClassWithMoreComplexMethodAndMain instance; // ClassWithMoreComplexMethodAndMain instance;
// //
// public boolean moreComplexMethod() { // public boolean moreComplexMethod() {

View File

@ -1,92 +1,4 @@
package testResources.AST.ASTMore;//public class ComplexClass { package MoreTestResources.AST;
//
// int x;
// int y;
// ComplexClass b;
// ComplexClass c;
//
// public ComplexClass() {
// this.y = 10;
// this.x = 2;
// int i;
// for (i = 0; i < (this.y + 1); i = i + 1) {
// int j;
// for (j = 0; j < this.y; j += 1) {
// this.x = this.x * this.x;
// if (this.x == 100) {
// break;
// }
// }
// }
// this.y = 2;
// do {
// this.y = this.y + 1;
// } while (this.y < 10);
//
// int k = 0;
// for (k = 0; k < 10; k = k + 1) {
// if (k == 5) {
// return;
// }
// }
//
// }
//
// public ComplexClass(int x) {
// this.b = new ComplexClass();
// this.c = new ComplexClass();
// this.x = x;
// this.b.x = 7;
// this.b.y = 13;
// this.c.x = this.b.getX() * this.b.y * this.b.getX('g');
// this.c.y = 25;
// }
//
// public ComplexClass(int x, int y) {
// this.x = x;
// this.y = y;
// }
//
// public ComplexClass initComplexClass(int x) {
// int a;
// a = 10;
// this.b = new ComplexClass(x);
// this.b.x = 10 + a;
// this.b.y = 20;
// this.b.c.x = 20 + a;
// if (methodCall()) {
// this.b.getC().b.y = this.b.x;
// }
// return this.b;
// }
//
// public ComplexClass init(int x, int y) {
// return new ComplexClass(x, y);
// }
//
// public ComplexClass(int x, int y, char z) {
// this.x = x;
// this.y = y;
// }
//
// public int getX(char z) {
// return this.x;
// }
//
// public ComplexClass getC() {
// return this.c;
// }
//
// public int getX() {
// return this.x;
// }
//
// public boolean methodCall() {
// return false;
// }
//
//}
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;
@ -710,7 +622,7 @@ public class AbstractSyntax_ComplexClass {
true, true,
new MethodCall( new MethodCall(
new FieldVarAccess( new FieldVarAccess(
false, true,
new FieldVarAccess( new FieldVarAccess(
true, true,
null, null,

View File

@ -1,4 +1,4 @@
package testResources.AST.ASTMore;//public class PublicClass { package MoreTestResources.AST;//public class PublicClass {
//} //}
import de.maishai.ast.records.Block; import de.maishai.ast.records.Block;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTMore;//public class ClassWithConstructor { package MoreTestResources.TypedAST;//public class ClassWithConstructor {
// int x; // int x;
// public classWithConstructor() { // public classWithConstructor() {
// this.x = 10; // this.x = 10;
@ -226,16 +226,7 @@ public class TypedAbstractSyntax_ClassWithConstructor {
typedParameters, typedParameters,
typedBlock, typedBlock,
Type.VOID, Type.VOID,
List.of( List.of()
new TypedLocalVariable(
"i",
Type.INT
),
new TypedLocalVariable(
"j",
Type.INT
)
)
); );
} }
} }

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTMore;//public class ClassWithConstructorAndMethodCall { package MoreTestResources.TypedAST;//public class ClassWithConstructorAndMethodCall {
// int x; // int x;
// //
// public ClassWithConstructorAndMethodCall() { // public ClassWithConstructorAndMethodCall() {

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTMore;//public class ClassWithConstructorWithCodeInComments { package MoreTestResources.TypedAST;//public class ClassWithConstructorWithCodeInComments {
// int x; // int x;
// public ClassWithConstructorWithCodeInComments() { // public ClassWithConstructorWithCodeInComments() {
// this.x = 10; // this.x = 10;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTMore;//public class ClassWithConstructorWithParameters { package MoreTestResources.TypedAST;//public class ClassWithConstructorWithParameters {
// int x; // int x;
// public classWithConstructorWithParameters(int startValue, int repetitions) { // public classWithConstructorWithParameters(int startValue, int repetitions) {
// this.x = startValue; // this.x = startValue;

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTMore;//public class ClassWithField { package MoreTestResources.TypedAST;//public class ClassWithField {
// int x; // int x;
//} //}

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTMore;//public class ClassWithMethod { package MoreTestResources.TypedAST;//public class ClassWithMethod {
// public boolean method() { // public boolean method() {
// return false; // return false;
// } // }

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTMore;//public class ClassWithMethodAndField { package MoreTestResources.TypedAST;//public class ClassWithMethodAndField {
// char c; // char c;
// //
// public ClassWithMethodAndField(char character) { // public ClassWithMethodAndField(char character) {

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTMore;//public class ClassWithMoreComplexMethodAndMain { package MoreTestResources.TypedAST;//public class ClassWithMoreComplexMethodAndMain {
// ClassWithMoreComplexMethodAndMain instance; // ClassWithMoreComplexMethodAndMain instance;
// //
// public boolean moreComplexMethod() { // public boolean moreComplexMethod() {

View File

@ -1,93 +1,4 @@
package testResources.TypedAST.TypedASTMore;//public class ComplexClass { package MoreTestResources.TypedAST;
//
// int x;
// int y;
// ComplexClass b;
// ComplexClass c;
//
// public ComplexClass() {
// this.y = 10;
// this.x = 2;
// int i;
// for (i = 0; i < (this.y + 1); i = i + 1) {
// int j;
// for (j = 0; j < this.y; j += 1) {
// this.x = this.x * this.x;
// if (this.x == 100) {
// break;
// }
// }
// }
// this.y = 2;
// do {
// this.y = this.y + 1;
// } while (this.y < 10);
//
// int k;
// k = 0;
// for (k = 0; k < 10; k = k + 1) {
// if (k == 5) {
// return this;
// }
// }
//
// }
//
// public ComplexClass(int x) {
// this.b = new ComplexClass();
// this.c = new ComplexClass();
// this.x = x;
// this.b.x = 7;
// this.b.y = 13;
// this.c.x = this.b.getX() * this.b.y * this.b.getX('g');
// this.c.y = 25;
// }
//
// public ComplexClass(int x, int y) {
// this.x = x;
// this.y = y;
// }
//
// public ComplexClass initComplexClass(int x) {
// int a;
// a = 10;
// this.b = new ComplexClass(x);
// this.b.x = 10 + a;
// this.b.y = 20;
// this.b.c.x = 20 + a;
// if (methodCall()) {
// this.b.getC().b.y = this.b.x;
// }
// return this.b;
// }
//
// public ComplexClass init(int x, int y) {
// return new ComplexClass(x, y);
// }
//
// public ComplexClass(int x, int y, char z) {
// this.x = x;
// this.y = y;
// }
//
// public int getX(char z) {
// return this.x;
// }
//
// public ComplexClass getC() {
// return this.c;
// }
//
// public int getX() {
// return this.x;
// }
//
// public boolean methodCall() {
// return false;
// }
//
//}
import de.maishai.ast.Operator; import de.maishai.ast.Operator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;
@ -251,14 +162,14 @@ public class TypedAbstractSyntax_ComplexClass {
), ),
new TypedAssignment( new TypedAssignment(
new TypedBinary( new TypedBinary(
new TypedIntLiteral(1, Type.INT),
Operator.ADD,
new TypedFieldVarAccess( new TypedFieldVarAccess(
false, false,
null, null,
"j", "j",
Type.INT Type.INT
), ),
Operator.ADD,
new TypedIntLiteral(1, Type.INT),
Type.INT Type.INT
), ),
new TypedFieldVarAccess( new TypedFieldVarAccess(
@ -454,6 +365,8 @@ public class TypedAbstractSyntax_ComplexClass {
List.of(), List.of(),
List.of( List.of(
new TypedReturn( new TypedReturn(
null,
Type.VOID
) )
), ),
Type.VOID Type.VOID
@ -477,12 +390,8 @@ public class TypedAbstractSyntax_ComplexClass {
"ComplexClass", "ComplexClass",
List.of(), List.of(),
block, block,
Type.REFERENCE("ComplexClass"), Type.VOID,
List.of( List.of()
new TypedLocalVariable("i", Type.INT),
new TypedLocalVariable("k", Type.INT),
new TypedLocalVariable("j", Type.INT)
)
); );
} }
@ -511,7 +420,7 @@ public class TypedAbstractSyntax_ComplexClass {
new TypedFieldVarAccess( new TypedFieldVarAccess(
true, true,
null, null,
"b", "c",
Type.REFERENCE("ComplexClass") Type.REFERENCE("ComplexClass")
), ),
Type.REFERENCE("ComplexClass") Type.REFERENCE("ComplexClass")
@ -532,7 +441,10 @@ public class TypedAbstractSyntax_ComplexClass {
Type.INT Type.INT
), ),
new TypedAssignment( new TypedAssignment(
new TypedIntLiteral(7, Type.INT), new TypedIntLiteral(
7,
Type.INT
),
new TypedFieldVarAccess( new TypedFieldVarAccess(
true, true,
new TypedFieldVarAccess( new TypedFieldVarAccess(
@ -656,9 +568,12 @@ public class TypedAbstractSyntax_ComplexClass {
) )
), ),
block, block,
Type.REFERENCE("ComplexClass"), Type.VOID,
List.of( List.of(
new TypedLocalVariable("x", Type.INT) new TypedLocalVariable(
"x",
Type.INT
)
) )
); );
} }
@ -713,10 +628,16 @@ public class TypedAbstractSyntax_ComplexClass {
) )
), ),
block, block,
Type.REFERENCE("ComplexClass"), Type.VOID,
List.of( List.of(
new TypedLocalVariable("x", Type.INT), new TypedLocalVariable(
new TypedLocalVariable("y", Type.INT) "x",
Type.INT
),
new TypedLocalVariable(
"y",
Type.INT
)
) )
); );
} }
@ -775,11 +696,20 @@ public class TypedAbstractSyntax_ComplexClass {
) )
), ),
block, block,
Type.REFERENCE("ComplexClass"), Type.VOID,
List.of( List.of(
new TypedLocalVariable("x", Type.INT), new TypedLocalVariable(
new TypedLocalVariable("y", Type.INT), "x",
new TypedLocalVariable("z", Type.CHAR) Type.INT
),
new TypedLocalVariable(
"y",
Type.INT
),
new TypedLocalVariable(
"z",
Type.CHAR
)
) )
); );
} }
@ -933,7 +863,7 @@ public class TypedAbstractSyntax_ComplexClass {
true, true,
new TypedMethodCall( new TypedMethodCall(
new TypedFieldVarAccess( new TypedFieldVarAccess(
false, true,
new TypedFieldVarAccess( new TypedFieldVarAccess(
true, true,
null, null,
@ -974,7 +904,7 @@ public class TypedAbstractSyntax_ComplexClass {
Type.REFERENCE("ComplexClass") Type.REFERENCE("ComplexClass")
) )
), ),
Type.REFERENCE("ComplexClass") Type.VOID
); );
return new TypedMethod( return new TypedMethod(
"initComplexClass", "initComplexClass",
@ -985,10 +915,7 @@ public class TypedAbstractSyntax_ComplexClass {
Type.INT Type.INT
) )
), ),
List.of( List.of(),
new TypedLocalVariable("x", Type.INT),
new TypedLocalVariable("a", Type.INT)
),
block block
); );
} }
@ -1018,7 +945,7 @@ public class TypedAbstractSyntax_ComplexClass {
Type.REFERENCE("ComplexClass") Type.REFERENCE("ComplexClass")
) )
), ),
Type.REFERENCE("ComplexClass") Type.VOID
); );
return new TypedMethod( return new TypedMethod(
"init", "init",
@ -1033,10 +960,7 @@ public class TypedAbstractSyntax_ComplexClass {
Type.INT Type.INT
) )
), ),
List.of( List.of(),
new TypedLocalVariable("x", Type.INT),
new TypedLocalVariable("y", Type.INT)
),
block block
); );
} }
@ -1055,7 +979,7 @@ public class TypedAbstractSyntax_ComplexClass {
Type.INT Type.INT
) )
), ),
Type.INT Type.VOID
); );
return new TypedMethod( return new TypedMethod(
"getX", "getX",
@ -1066,9 +990,7 @@ public class TypedAbstractSyntax_ComplexClass {
Type.CHAR Type.CHAR
) )
), ),
List.of( List.of(),
new TypedLocalVariable("z", Type.CHAR)
),
block block
); );
} }
@ -1087,7 +1009,7 @@ public class TypedAbstractSyntax_ComplexClass {
Type.REFERENCE("ComplexClass") Type.REFERENCE("ComplexClass")
) )
), ),
Type.REFERENCE("ComplexClass") Type.VOID
); );
return new TypedMethod( return new TypedMethod(
"getC", "getC",
@ -1112,7 +1034,7 @@ public class TypedAbstractSyntax_ComplexClass {
Type.INT Type.INT
) )
), ),
Type.INT Type.VOID
); );
return new TypedMethod( return new TypedMethod(
"getX", "getX",
@ -1135,7 +1057,7 @@ public class TypedAbstractSyntax_ComplexClass {
Type.BOOL Type.BOOL
) )
), ),
Type.BOOL Type.VOID
); );
return new TypedMethod( return new TypedMethod(
"methodCall", "methodCall",

View File

@ -1,4 +1,4 @@
package testResources.TypedAST.TypedASTMore;//public class PublicClass { package MoreTestResources.TypedAST;//public class PublicClass {
//} //}
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

Some files were not shown because too many files have changed in this diff Show More