From 29348724574a2247b426ecac31f69b4bf59f54e4 Mon Sep 17 00:00:00 2001 From: Lucas <89882946+notbad3500@users.noreply.github.com> Date: Thu, 4 Jul 2024 10:37:56 +0200 Subject: [PATCH] SemanticTest recovered InputFiles from Test excluded MainTest working properly Make and POM updated --- pom.xml | 29 +- src/test/Makefile | 10 +- src/test/java/main/InputFilesTest.java | 16 +- src/test/java/main/MainTest.java | 39 +- src/test/java/semantic/SemanticTest.java | 436 ++++++++++++++++++ .../AllFeaturesClassExample.class | Bin 1093 -> 0 bytes .../BooleanOperations.class | Bin 686 -> 0 bytes .../CharManipulation.class | Bin 638 -> 0 bytes .../ConditionalStatements.class | Bin 780 -> 0 bytes .../EmptyClassExample.class | Bin 208 -> 0 bytes .../combinedFeatureTests/LoopExamples.class | Bin 1004 -> 0 bytes .../MethodOverloading.class | Bin 1083 -> 0 bytes .../input/singleFeatureTests/Char.class | Bin 302 -> 0 bytes .../input/singleFeatureTests/Comments.class | Bin 206 -> 0 bytes .../ConstructorMethodCall.class | Bin 327 -> 0 bytes .../ConstructorMethodCallParameters.class | Bin 356 -> 0 bytes .../ConstructorParameter.class | Bin 226 -> 0 bytes .../ConstructorThisDot.class | Bin 256 -> 0 bytes .../input/singleFeatureTests/DoWhile.class | Bin 250 -> 0 bytes .../input/singleFeatureTests/EmptyClass.class | Bin 194 -> 0 bytes .../EmptyClassWithConstructor.class | Bin 228 -> 0 bytes .../input/singleFeatureTests/Field.class | Bin 200 -> 0 bytes .../FieldWithAccessModifier.class | Bin 236 -> 0 bytes .../input/singleFeatureTests/For.class | Bin 240 -> 0 bytes .../input/singleFeatureTests/If.class | Bin 239 -> 0 bytes .../input/singleFeatureTests/IfElse.class | Bin 258 -> 0 bytes .../singleFeatureTests/IfElseIfElse.class | Bin 290 -> 0 bytes .../input/singleFeatureTests/Increment.class | Bin 350 -> 0 bytes .../input/singleFeatureTests/MainMethod.class | Bin 265 -> 0 bytes .../singleFeatureTests/MultipleClasses.class | Bin 204 -> 0 bytes .../input/singleFeatureTests/Null.class | Bin 226 -> 0 bytes .../singleFeatureTests/SelfReference.class | Bin 466 -> 0 bytes .../input/singleFeatureTests/TestClass2.class | Bin 199 -> 0 bytes .../input/singleFeatureTests/ThisDot.class | Bin 227 -> 0 bytes .../VariableCalculation.class | Bin 723 -> 0 bytes .../singleFeatureTests/VariableCompare.class | Bin 620 -> 0 bytes .../input/singleFeatureTests/VoidMethod.class | Bin 240 -> 0 bytes .../input/singleFeatureTests/While.class | Bin 249 -> 0 bytes .../CallMethodFromObjekt$Car.class | Bin 448 -> 0 bytes .../CallMethodFromObjekt.class | Bin 461 -> 0 bytes 40 files changed, 492 insertions(+), 38 deletions(-) delete mode 100644 src/test/resources/input/combinedFeatureTests/AllFeaturesClassExample.class delete mode 100644 src/test/resources/input/combinedFeatureTests/BooleanOperations.class delete mode 100644 src/test/resources/input/combinedFeatureTests/CharManipulation.class delete mode 100644 src/test/resources/input/combinedFeatureTests/ConditionalStatements.class delete mode 100644 src/test/resources/input/combinedFeatureTests/EmptyClassExample.class delete mode 100644 src/test/resources/input/combinedFeatureTests/LoopExamples.class delete mode 100644 src/test/resources/input/combinedFeatureTests/MethodOverloading.class delete mode 100644 src/test/resources/input/singleFeatureTests/Char.class delete mode 100644 src/test/resources/input/singleFeatureTests/Comments.class delete mode 100644 src/test/resources/input/singleFeatureTests/ConstructorMethodCall.class delete mode 100644 src/test/resources/input/singleFeatureTests/ConstructorMethodCallParameters.class delete mode 100644 src/test/resources/input/singleFeatureTests/ConstructorParameter.class delete mode 100644 src/test/resources/input/singleFeatureTests/ConstructorThisDot.class delete mode 100644 src/test/resources/input/singleFeatureTests/DoWhile.class delete mode 100644 src/test/resources/input/singleFeatureTests/EmptyClass.class delete mode 100644 src/test/resources/input/singleFeatureTests/EmptyClassWithConstructor.class delete mode 100644 src/test/resources/input/singleFeatureTests/Field.class delete mode 100644 src/test/resources/input/singleFeatureTests/FieldWithAccessModifier.class delete mode 100644 src/test/resources/input/singleFeatureTests/For.class delete mode 100644 src/test/resources/input/singleFeatureTests/If.class delete mode 100644 src/test/resources/input/singleFeatureTests/IfElse.class delete mode 100644 src/test/resources/input/singleFeatureTests/IfElseIfElse.class delete mode 100644 src/test/resources/input/singleFeatureTests/Increment.class delete mode 100644 src/test/resources/input/singleFeatureTests/MainMethod.class delete mode 100644 src/test/resources/input/singleFeatureTests/MultipleClasses.class delete mode 100644 src/test/resources/input/singleFeatureTests/Null.class delete mode 100644 src/test/resources/input/singleFeatureTests/SelfReference.class delete mode 100644 src/test/resources/input/singleFeatureTests/TestClass2.class delete mode 100644 src/test/resources/input/singleFeatureTests/ThisDot.class delete mode 100644 src/test/resources/input/singleFeatureTests/VariableCalculation.class delete mode 100644 src/test/resources/input/singleFeatureTests/VariableCompare.class delete mode 100644 src/test/resources/input/singleFeatureTests/VoidMethod.class delete mode 100644 src/test/resources/input/singleFeatureTests/While.class delete mode 100644 src/test/resources/input/typedAstFeatureTests/CallMethodFromObjekt$Car.class delete mode 100644 src/test/resources/input/typedAstFeatureTests/CallMethodFromObjekt.class diff --git a/pom.xml b/pom.xml index 4712163..631896f 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,18 @@ 5.11.0-M2 test + + org.junit.platform + junit-platform-suite-engine + 1.11.0-M2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.11.0-M2 + test + org.antlr antlr4-runtime @@ -44,18 +56,18 @@ 3.26.0 test - - org.junit.jupiter - junit-jupiter-api - 5.11.0-M2 - test - org.mockito mockito-core 5.11.0 test + + junit + junit + 4.13.1 + test + @@ -65,6 +77,11 @@ org.apache.maven.plugins maven-surefire-plugin 3.0.0-M5 + + + **/*Test.java + + maven-assembly-plugin diff --git a/src/test/Makefile b/src/test/Makefile index a19508b..44aa134 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -10,7 +10,7 @@ compile-javac: compile-raupenpiler: cd ../.. ; mvn -DskipTests install cd ../.. ; mvn exec:java -DgenJar=true -DgenClass=true -Dexec.mainClass="main.Main" -Dexec.args="'src/main/resources/input/CompilerInput.java' 'src/main/resources/output'" - cp ../main/resources/output/CompilerInput.class .java/resources/output/raupenpiler + # cp ../main/resources/output/CompilerInput.class .java/resources/output/raupenpiler test: compile-javac compile-raupenpiler test-javac test-raupenpiler @@ -38,8 +38,8 @@ clean: rm -f ../main/resources/logs/*.log # clean test/java/main folders from .class files for End-to-End tests rm -f ./java/main/*.class - # clean javac output from combinedFeatureTests - rm -f ./resources/input/combinedFeatureTests/*.class - rm -f ./resources/input/singleFeatureTests/*.class - rm -f ./resources/input/typedAstFeatureTests/*.class + # clean javac output from every folder + rm -f ./resources/input/*/*.class + # clean test results from maven surefire plugin + rm -f ../../target/surefire-reports/*.txt diff --git a/src/test/java/main/InputFilesTest.java b/src/test/java/main/InputFilesTest.java index 4529c9d..5d5e4a4 100644 --- a/src/test/java/main/InputFilesTest.java +++ b/src/test/java/main/InputFilesTest.java @@ -26,13 +26,17 @@ public class InputFilesTest { // Assert that the compiler is available assertNotNull(javac, "Java Compiler is not available"); - File folder1 = new File("src/test/resources/input/combinedFeatureTests"); - File folder2 = new File("src/test/resources/input/singleFeatureTests"); - File folder3 = new File("src/test/resources/input/typedAstFeatureTests"); + File combinedFeatureTests = new File("src/test/resources/input/combinedFeatureTests"); + File endabgabeTests = new File("src/test/resources/input/endabgabeTests"); + File singleFeatureSemanticTests = new File("src/test/resources/input/singleFeatureSemanticTests"); + File singleFeatureTests = new File("src/test/resources/input/singleFeatureTests"); + File typedAstFeatureTests = new File("src/test/resources/input/typedAstFeatureTests"); - List files = getJavaFilesFromDirectory(folder1); - files.addAll(getJavaFilesFromDirectory(folder2)); - files.addAll(getJavaFilesFromDirectory(folder3)); + List files = getJavaFilesFromDirectory(combinedFeatureTests); + // files.addAll(getJavaFilesFromDirectory(endabgabeTests)); + // files.addAll(getJavaFilesFromDirectory(singleFeatureSemanticTests)); + files.addAll(getJavaFilesFromDirectory(singleFeatureTests)); + // files.addAll(getJavaFilesFromDirectory(typedAstFeatureTests)); if (!files.isEmpty()) { for (File file : files) { diff --git a/src/test/java/main/MainTest.java b/src/test/java/main/MainTest.java index 24389bc..890f4cd 100644 --- a/src/test/java/main/MainTest.java +++ b/src/test/java/main/MainTest.java @@ -1,28 +1,25 @@ package main; -import org.junit.jupiter.api.Test; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.CharStreams; - -import java.io.IOException; -import java.nio.file.Paths; - +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import parser.ParserTest; +import parser.ScannerTest; +import semantic.EndToTypedAstTest; +import semantic.SemanticTest; /** - * run every test: mvn test - * Nutzen dieser Klasse: Eigentlich nicht vorhanden, in der Main gibts nichts zu testen + * This class is a test suite that runs all the test classes in the project. + *

run: mvn test + *

check results in console or target/surefire-reports */ +@RunWith(Suite.class) +@Suite.SuiteClasses({ + InputFilesTest.class, + ScannerTest.class, + ParserTest.class, + SemanticTest.class, + EndToTypedAstTest.class +}) public class MainTest { - @Test - void test() { - CharStream codeCharStream = null; - try { - codeCharStream = CharStreams.fromPath(Paths.get("src/main/test/resources/CompilerInput.java")); - Main.compileFile(codeCharStream, "src/main/test/resources/output"); - } catch (IOException e) { - System.err.println("Error reading the file: " + e.getMessage()); - } - } + // This class remains empty, it is used only as a holder for the above annotations } - - diff --git a/src/test/java/semantic/SemanticTest.java b/src/test/java/semantic/SemanticTest.java index f406580..ac7393f 100644 --- a/src/test/java/semantic/SemanticTest.java +++ b/src/test/java/semantic/SemanticTest.java @@ -1,5 +1,441 @@ package semantic; +import ast.ASTNode; +import ast.ClassNode; +import ast.ProgramNode; +import ast.expressions.IExpressionNode; +import ast.expressions.unaryexpressions.MemberAccessNode; +import ast.expressions.unaryexpressions.UnaryNode; +import ast.members.ConstructorNode; +import ast.members.FieldNode; +import ast.members.MethodNode; +import ast.parameters.ParameterNode; +import ast.statementexpressions.AssignNode; +import ast.statementexpressions.AssignableNode; +import ast.statementexpressions.methodcallstatementnexpressions.MethodCallNode; +import ast.statements.BlockNode; +import ast.statements.ReturnNode; +import ast.type.AccessModifierNode; +import ast.type.EnumValueNode; +import ast.type.ValueNode; +import ast.type.type.BaseType; +import ast.type.type.TypeEnum; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import parser.Helper; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + public class SemanticTest { + @BeforeEach + public void setUp() { + SemanticAnalyzer.clearAnalyzer(); + } + + @Test + @DisplayName("Empty Class Test") + public void emptyClassTest() { + ClassNode emptyClass = Helper.generateEmptyClass("EmptyClass"); + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(emptyClass); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + + @Test + @DisplayName("Multiple Empty Classes Test") + public void multipleEmptyClassesTest() { + ClassNode class1 = Helper.generateEmptyClass("MultipleClasses"); + ClassNode class2 = Helper.generateEmptyClass("TestClass2"); + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + abstractSyntaxTree.addClass(class2); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + + @Test + @DisplayName("Empty Class Test with Constructor") + public void emptyClassWithConstructorTest() { + ClassNode class1 = Helper.generateEmptyClass("EmptyClassWithConstructor"); + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Field Test") + public void fieldTest() { + ClassNode class1 = Helper.generateEmptyClass("Field"); + class1.addMember(new FieldNode(new AccessModifierNode("public"), new BaseType(TypeEnum.INT), "a")); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Field Test with Accessmodifier") + public void fieldTestWithModifier() { + ClassNode class1 = Helper.generateEmptyClass("FieldWithAccessModifier"); + class1.addMember(new FieldNode(new AccessModifierNode("public"), new BaseType(TypeEnum.INT), "a")); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Comments Ignore Test") + public void commentsIgnoreTest() { + ClassNode class1 = Helper.generateEmptyClass("Comments"); + class1.addMember(new FieldNode(new AccessModifierNode("private"), new BaseType(TypeEnum.INT), "a")); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Constructor Parameter Test") + public void constructorParameterTest() { + BlockNode block = new BlockNode(); + block.addStatement(new ReturnNode(null)); + ConstructorNode constructor = new ConstructorNode("public", "ConstructorParameter", block); + constructor.addParameter(new ParameterNode(new BaseType(TypeEnum.INT), "a")); + constructor.addParameter(new ParameterNode(new BaseType(TypeEnum.INT), "b")); + + ClassNode class1 = new ClassNode("public", "ConstructorParameter"); + class1.addMember(constructor); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("This Dot Test") + public void thisDotTest() { + BlockNode block = new BlockNode(); + MemberAccessNode memberAccess = new MemberAccessNode(true); + memberAccess.addIdentifier("a"); + + AssignableNode assignable = new AssignableNode(memberAccess); + + ValueNode value = new ValueNode(EnumValueNode.INT_VALUE, "1"); + IExpressionNode expression = new UnaryNode(value); + + block.addStatement(new AssignNode(assignable, expression)); + block.addStatement(new ReturnNode(null)); + ConstructorNode constructor = new ConstructorNode("public", "ThisDot", block); + + ClassNode class1 = new ClassNode("public", "ThisDot"); + class1.addMember(new FieldNode(new AccessModifierNode("public"), new BaseType(TypeEnum.INT), "a")); + class1.addMember(constructor); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Constructor This Dot Test") + public void constructorThisDotTest() { + BlockNode block = new BlockNode(); + MemberAccessNode memberAccess = new MemberAccessNode(true); + memberAccess.addIdentifier("a"); + + AssignableNode assignable = new AssignableNode(memberAccess); + + IExpressionNode expression = new UnaryNode("a"); + + block.addStatement(new AssignNode(assignable, expression)); + block.addStatement(new ReturnNode(null)); + ConstructorNode constructor = new ConstructorNode("public", "ConstructorThisDot", block); + constructor.addParameter(new ParameterNode(new BaseType(TypeEnum.INT), "a")); + + ClassNode class1 = new ClassNode("public", "ConstructorThisDot"); + class1.addMember(new FieldNode(new AccessModifierNode("private"), new BaseType(TypeEnum.INT), "a")); + class1.addMember(constructor); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Void Methoden Test") + public void voidMethodenTest() { + ClassNode class1 = Helper.generateEmptyClass("VoidMethod"); + BlockNode block = new BlockNode(); + block.addStatement(new ReturnNode(null)); + class1.addMember(new MethodNode("public", null, true, "test", block)); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Constructor Method call Test") + public void constructorMethodCallTest() { + BlockNode blockCon = new BlockNode(); + MemberAccessNode memberAccess = new MemberAccessNode(true); + memberAccess.addIdentifier("a"); + + AssignableNode assignable = new AssignableNode(memberAccess); + + IExpressionNode expression = new UnaryNode(new MethodCallNode(null, "testMethod")); + + blockCon.addStatement(new AssignNode(assignable, expression)); + blockCon.addStatement(new ReturnNode(null)); + ConstructorNode constructor = new ConstructorNode("public", "ConstructorMethodCall", blockCon); + + BlockNode blockMethod = new BlockNode(); + blockMethod.addStatement(new ReturnNode(new UnaryNode(new ValueNode(EnumValueNode.INT_VALUE, "1")))); + MethodNode method = new MethodNode("public", new BaseType(TypeEnum.INT), false, "testMethod", blockMethod); + + ClassNode class1 = new ClassNode("public", "ConstructorMethodCall"); + class1.addMember(new FieldNode(new AccessModifierNode("public"), new BaseType(TypeEnum.INT), "a")); + class1.addMember(constructor); + class1.addMember(method); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Constructor Method call Parameters Test") + public void constructorMethodCallParametersTest() { + BlockNode blockCon = new BlockNode(); + MemberAccessNode memberAccess = new MemberAccessNode(true); + memberAccess.addIdentifier("a"); + + AssignableNode assignable = new AssignableNode(memberAccess); + + MethodCallNode methodCall = new MethodCallNode(null, "testMethod"); + methodCall.addExpression(new UnaryNode("a")); + IExpressionNode expression = new UnaryNode(methodCall); + + blockCon.addStatement(new AssignNode(assignable, expression)); + blockCon.addStatement(new ReturnNode(null)); + ConstructorNode constructor = new ConstructorNode("public", "ConstructorMethodCallParameters", blockCon); + constructor.addParameter(new ParameterNode(new BaseType(TypeEnum.INT), "a")); + + BlockNode blockMethod = new BlockNode(); + blockMethod.addStatement(new ReturnNode(new UnaryNode("a"))); + MethodNode method = new MethodNode("public", new BaseType(TypeEnum.INT), false, "testMethod", blockMethod); + method.addParameter(new ParameterNode(new BaseType(TypeEnum.INT), "a")); + + ClassNode class1 = new ClassNode("public", "ConstructorMethodCallParameters"); + class1.addMember(new FieldNode(new AccessModifierNode("public"), new BaseType(TypeEnum.INT), "a")); + class1.addMember(constructor); + class1.addMember(method); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Char Test") + public void charTest() { + BlockNode blockCon = new BlockNode(); + MemberAccessNode memberAccess = new MemberAccessNode(true); + memberAccess.addIdentifier("a"); + + AssignableNode assignable = new AssignableNode(memberAccess); + + MethodCallNode methodCall = new MethodCallNode(null, "testMethod"); + methodCall.addExpression(new UnaryNode("a")); + IExpressionNode expression = new UnaryNode(methodCall); + + blockCon.addStatement(new AssignNode(assignable, expression)); + blockCon.addStatement(new ReturnNode(null)); + ConstructorNode constructor = new ConstructorNode("public", "Char", blockCon); + constructor.addParameter(new ParameterNode(new BaseType(TypeEnum.CHAR), "a")); + + BlockNode blockMethod = new BlockNode(); + blockMethod.addStatement(new ReturnNode(new UnaryNode("a"))); + MethodNode method = new MethodNode("public", new BaseType(TypeEnum.CHAR), false, "testMethod", blockMethod); + method.addParameter(new ParameterNode(new BaseType(TypeEnum.CHAR), "a")); + + ClassNode class1 = new ClassNode("public", "Char"); + class1.addMember(new FieldNode(new AccessModifierNode("public"), new BaseType(TypeEnum.CHAR), "a")); + class1.addMember(constructor); + class1.addMember(method); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Null Test") + public void nullTest() { + BlockNode blockCon = new BlockNode(); + MemberAccessNode memberAccess = new MemberAccessNode(true); + memberAccess.addIdentifier("a"); + + AssignableNode assignable = new AssignableNode(memberAccess); + + blockCon.addStatement(new AssignNode(assignable, new UnaryNode(new ValueNode(EnumValueNode.NULL_VALUE, "null")))); + blockCon.addStatement(new ReturnNode(null)); + ConstructorNode constructor = new ConstructorNode("public", "Null", blockCon); + + ClassNode class1 = new ClassNode("public", "Null"); + class1.addMember(new FieldNode(new AccessModifierNode("public"), new BaseType(TypeEnum.INT), "a")); + class1.addMember(constructor); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(class1); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } + + @Test + @DisplayName("Self Reference Test") + public void selfReferenceTest() { + + } + + @Test + @DisplayName("Variable Compare Test") + public void variableCompareTest() { + + } + + @Test + @DisplayName("Variable Calculation Test") + public void variableCalculationTest() { + + } + + @Test + @DisplayName("Main Method Test") + public void mainMethodTest() { + + } + + @Test + @DisplayName("While Test") + public void whileTest() { + + } + + @Test + @DisplayName("Do While Test") + public void doWhileTest() { + + } + + @Test + @DisplayName("For Test") + public void forTest() { + + } + + @Test + @DisplayName("Increment Test") + public void incrementTest() { + ClassNode classNode = Helper.generateEmptyClass("Increment"); + classNode.addMember(new FieldNode(new AccessModifierNode("public"), new BaseType(TypeEnum.INT), "a")); + + ProgramNode abstractSyntaxTree = new ProgramNode(); + abstractSyntaxTree.addClass(classNode); + + ASTNode typedAst = SemanticAnalyzer.generateTast(abstractSyntaxTree); + for (Exception runtimeException : SemanticAnalyzer.errors) { + runtimeException.printStackTrace(); + } + assertTrue(SemanticAnalyzer.errors.isEmpty()); + assertNotNull(typedAst); + } } \ No newline at end of file diff --git a/src/test/resources/input/combinedFeatureTests/AllFeaturesClassExample.class b/src/test/resources/input/combinedFeatureTests/AllFeaturesClassExample.class deleted file mode 100644 index b59adc2b7e01f158236a1ad77e723a9172711fe4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmZ`%O-~b16g{sq(64DJUj=Cq0fn|8uyA3t8nl9Gg0jGnfE!=iNg14Wn(372o zmTd|MNh>RO(!dZ>j4HH!l^HQGiZMo2S}Dd%TFFmPD_7nx<#$!;nt>@*(Qwsidah&d zcy6ca3#qSJ1JnLj+o@YsX>YeoS9+GyYzycmr^X6~wydW4ywj+d?h9E_H6?aDS$+LX zwt`rbwVJ>{u3XNS1tRTE#dD=m^MJ|mopokCN8J|I=tqt|PsKD+#>6}1Q1$O(*NA&x`h?DCgV3Hd5>WCv@FVw`81 zOPXYU3Jb^}Pru5FZxCTXkB_Cp(IIWF&EHgNvm4ZGuc-k>AOQwqQEk3z8|vIi(Dh}W2`d9G7V~vthF-^jG`= zUwl!t1qDCAk5bR1!6M4A_s+d@?>XmQ_Q%h!-vR8R6Tm}3!VghINuYMDPE|KiHty~Z zj`c7XC_OUPrS&$@Pd7>6DDk-b{r_yDu|i^M0ObHQI4-DuN z=bfvf-Cz{))x8JN1w^#^1@a>!flb;46li^(A}S~`%bm>o*61B(G5QSo;ZKVz0*i$k zoYql1C4tMokpHO>nj@CJD(%rd=uI6cR4$2_T5*j=!D3<6--2f20OR zpzu-0+I$koHJXPWitt?c0p<~q-Z_@(fsFM@7D=O%nDj^)qf!CU@kuUO;Y9(b(XrJp zu;ii=U>Vha%zEdiMvdu_WVEbyAKTDL`&+7G(=(}(<6SHFGQbL633x+gx>F)8Z+-)8T_`M`c2kNu7Xt;kUWf-h%BbokHN5H}fx%-Xyk-a>?H zH*hZ*32YHd$Ppbrd3Y#rl|z`;t@CR&^Winzi>DGx0?EQ|lV~kArxt~0^7ak@3luN0 zqK@q;|A4kOv;7OjALYGUEOf6>ZcR{|V6|1=pI~Da&$_Kq2s~*YOFZWaR*7{~Df*u4 HbJ+OR=|(Sh3MEvQIh;9X&i6ZWW`F(p{u96})RKrGYQu67LtG$pPh>=!bG3bvR~?o($S@Bp^-` zNMqSX#>EP0?)XZ~=$w+6mq zn``B(MSTh+o55t%k*}30E-jq=kr@GY*h_@ZE4cVfv{Cx(mG(JzRc1{-S$%-0ZhV9N znLB|!+BDAs7QYx0h%?G7&Fi|XGMb0gudqKN{RK3hnG-MBjm1>u2b@di0Z$sn$^52wX1pk! m^MiXlt#KW4{kzCEIY5qbtF(D+q5u!;Bo+xM5m045f`h-jQ=H!b diff --git a/src/test/resources/input/combinedFeatureTests/EmptyClassExample.class b/src/test/resources/input/combinedFeatureTests/EmptyClassExample.class deleted file mode 100644 index a6a129d83eb7b7fa699093038b18c5956b9ac7cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmX^0Z`VEs1_mbvUM>bE24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc20_={f|5$-oW$Z{*NVj4f}B)F1{UZ16d=X#lbM(5SDKrYS`?C) z1d`wi&Mz%WPIb!!al|lm>VYg|P-I{Sx&s6lfe`2tAjt{j$%6R|46It)85lQ$rMZA4 ONE)J)8%Q%T@BjcvAt~Pg diff --git a/src/test/resources/input/combinedFeatureTests/LoopExamples.class b/src/test/resources/input/combinedFeatureTests/LoopExamples.class deleted file mode 100644 index 2a398c6e58dba159bd89b9357647b2657cb08f32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1004 zcmaJ=L2nX46#fP%3+onI5GtY-D^;jkwBDrgP$IEOt0pwvpX~rul@+n zUOekTlOFs5{uY0MY1FqsA_U?dW@h(&?|a|-=IxK)7vBNwVaG%SQ3EjxONcY9obhvB zbGSUMy=tF{j%JAO+S1m~7^0QxaS{n64VV_Lz?y-#hJh9?q11qqat9+KTh(6sw$v@{ z3+~o4R5N8EjTMG9m-j_O$qv^iw(ij>&|K<(ax44Qar#IH<=XPJZX$!MfvXmB$TMUY z@G}@*Sj~|k$vj2%I0J^1fdYedpp^IgEq6UfP|a9Fbp=EEz?S0Wz-LiRtaF^t5jMg$`f;bo+ JqK3yP`~|8~{Zs$| diff --git a/src/test/resources/input/combinedFeatureTests/MethodOverloading.class b/src/test/resources/input/combinedFeatureTests/MethodOverloading.class deleted file mode 100644 index 2357744da74e54140524878508a87dd6fe8f3e92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1083 zcmaJ=T~8B16g@+?-L@>>0wM)g1#M}i0)E%{Koeq89(PmmwPA0 zgZi0hD2Bvq$8*#hhFCUtY$C}p^G>K!**rKGzAJgt@lMh(5ldklmWc@qlbE_eRqF*x zw247>iEzFeHgRO}(04plQ@-HslBSrkFpD|D@n(}Do~=}Jm08j`Z(#w842x~v5@qQ% zxccCzQ(6UzdnzE#Y$X@bhT4gfR1xPA?wDA%kiiPW+=#vmW=E@VJxwx9kvrDH*0eC2 zydX)TCIT}UW!V%AQ&q!@A;qEmu79#CFa+Qz< zArgdK8N!-KVI3QN>>-KK!U{iOe!N7g`UB~FJaK{PE8GGua9bA)U0J=NF?8ix=WN(# q97$O8I3|#%#~Q-};v2(5WGPS5>JjzIg)xs^s-@}s37+8vmi_{y1Na&M diff --git a/src/test/resources/input/singleFeatureTests/Char.class b/src/test/resources/input/singleFeatureTests/Char.class deleted file mode 100644 index 8e9c65e698b9692fda17bc8083d5cfb7c515b6c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmXX=yHdhH6g@WyiCIHHd=%1HLJIf+$HL4|p%yyy8`zOBn9Rh*ucEOKXDs{xKg#he zSln|T=P~!^_v;(LEiM#1_z{8xErf#ZO26sxT365Ghhk;sRuEp7RcUVo{$My$I6@pj zB{)VR2=b+F1j?FMduQyjUhp=^hj~n0nxKQOKr|~q5Hshg7e>&TmX*2RycDK+(#4t= z^;mD3xtWx1iCyx@eS<4zdHhyb3?zD-TR0*1xQ*cN`84~4WLbZQ=mYKdz2lUak_Ytx dLbMTa=I{UBOLmv-^|wTU(}(PUBAz)0=YLd8Dh&Vt diff --git a/src/test/resources/input/singleFeatureTests/Comments.class b/src/test/resources/input/singleFeatureTests/Comments.class deleted file mode 100644 index 8d74444c8006241940352d7c5197335aab576a17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmXv|I|{;35S-25m>4f0SgM7&fLIt11kpmVe~AxyAs>i|_p%Z!Jb;H1HxY}S*_mOP zeSe-W04oG8H0U-A4<;)+`#6G!Jh_MH^+tB{OPM_6?nV8Ml R19b0VkFkw^=rd~=d;y@sBZvS1 diff --git a/src/test/resources/input/singleFeatureTests/ConstructorMethodCall.class b/src/test/resources/input/singleFeatureTests/ConstructorMethodCall.class deleted file mode 100644 index 009c42373cb5456168563ddc4036ca8f43968486..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcmZusyH3ME5S+E0m>ib}k2LA%z!KyKPzo#|MdDF_=+Djx92r}3&U_UO1t3xI0elo< z&QMb9+|J(4+|Aeb$0vX@OcerzF(Qo~`hv;YJehfEs{8qMwzjzw^iPYba0@|rcyy<* zg+UCZu?;PlrggP(O`E&AxwP(~UZtii1$ m=>)sP5kg`Q5d|7CdxrXx&Ukv;AbKVW{JysZ6mierVE+exEH=pi diff --git a/src/test/resources/input/singleFeatureTests/ConstructorMethodCallParameters.class b/src/test/resources/input/singleFeatureTests/ConstructorMethodCallParameters.class deleted file mode 100644 index 6c01775e5811edc75a952be0e4de8cb02bcaae7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmah^yH3ME5S+Cgn;ec4o&_nOph#RKKY%E(gk*`A1WJE)PTAu4YK(4kQ|nu0Ug~)w%kn{Lxl~5!h9Hb;%vK_Jqja2h`9u_=j{$)s zN4gbeOi4Xgg#JxYsk?TWDg7j~k~`wDZgsA%3tOE3V>+=v;EZh?{*gG?i_zh{gFVK5 zt|o9ddK9lfaXkD)@PXd@X5)Y{VjVp1!AB1P=lt>C?g_KK?F`=-33lFR1_a}wRdDnR D!^=R8 diff --git a/src/test/resources/input/singleFeatureTests/ConstructorParameter.class b/src/test/resources/input/singleFeatureTests/ConstructorParameter.class deleted file mode 100644 index eabb195ade30d8262acbc7736868b9210682e4a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmZusI|{-;5Pf5^Mq~UGHg?(>3%!6?CqFP1Pc$~p~OjQ=P~o< z&A@y<-`5+!94#LeI3C;p0#!oiBJXmN$n-qfMi&)ZLUpQBZD#~$7#=;;2;D`N-mJ-E zo0*+7@~W&d1TkE#!Xv?5WG6*vuXU<6`887JAftpU{yxi1td_bEy?;Z-#d`GN@l}Np eL!i#lXEk7Un8oM`dX()3$KnOBy9`25=FJ~72QDiB diff --git a/src/test/resources/input/singleFeatureTests/ConstructorThisDot.class b/src/test/resources/input/singleFeatureTests/ConstructorThisDot.class deleted file mode 100644 index 1a1c4c38599720fe9b6c9abdea71dad319ee7e12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmZWj%MQU%5IxgYt5wg9g^eX$@B?CjNSX)>Vt-pVT%k9q)_+-u#KH&oC^5CQm@{+E zyw3acd;yrC<-vgI!17UoO=uj&RSZue*$-FIQN|g;9;rlSV}jZ1Z(Wq(I`Di{;1gO? zom{dsk29Ta4(c+~yg-5@Bv`$$zvVR5J4vW7R3ex8Ig;r{L?>3fwa(L6&Q(F$|Ca`Z y7j*ff!Cr}xfBq_BvsG4V%mUVnz85?|LFW$V_M53Q)?hN0V8Mn9hc_C`4K%-pd@f=D diff --git a/src/test/resources/input/singleFeatureTests/DoWhile.class b/src/test/resources/input/singleFeatureTests/DoWhile.class deleted file mode 100644 index d7f8c194c4d92b228c0fd34d35d1e3abd3d67c37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmXYrJ#NB45QX2^#tV)OuF}v@28wV2l!8Pw{1uL%UOOu=0UIHc6L1lZkP0b94v-^J z1fCH)(i^>R=k3nl|IaUgKI$GU*b0u13S2?B(qFo}*4d&vjaMcq1a2?Q(&9y6KecBH zRe^fT=gV|$1kP*z!PXe1nVIZ2vDv-rxV#9WLMNYNy}f%c%J;j(3~nj^o_{VsLko&K zlt)bE24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc1}@j!f|5$-oW$Z{Mg|t={FGEi27aH+yi~u^+@#c^ki?`Mpa@rR zerZv1s#_+A!;jFS2eN`efq@-pGYBvOG0<)x%?V`50%@>_)^-NQjbLdmAPJHNDP?5f J2GUFnJOHXMBsTy6 diff --git a/src/test/resources/input/singleFeatureTests/EmptyClassWithConstructor.class b/src/test/resources/input/singleFeatureTests/EmptyClassWithConstructor.class deleted file mode 100644 index 664bf33beed4dcaa368c76f472c1260ce5efbe9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmZ`!!4APt5S-Ogig0z2^o9dJAPyQ%!hvvptruQXt-QWUe3p~M!3X##vF+VXcCxdR zY-T^-*BihbZ5I_-4(t}Hs1dr6xQR(DlG9`pL^3pl+EgXV%m~(CxOY$|^cI(^x%;um zvV$^bKTR^D^U$Q4VEgG&5;`lD$aQ`Rq~3`j=8d~ea~;a1Dn$S9g>ex89vse96frm% bbAy#vYM?rLf*z&qG8a#P+h!1&<=pxK$pSF# diff --git a/src/test/resources/input/singleFeatureTests/Field.class b/src/test/resources/input/singleFeatureTests/Field.class deleted file mode 100644 index e06f2cf103c1789c64fb00719460e1234458f36d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmXX=I|{;35S-2LX^h4T2$pJLE+7^P0YS7->|c_Hybu!ziTAP+EIfdR688m*+1Z(4 z*!_H8ZvY#FJ}lS*P5>7kVVujmj0#y^qhpe*v>|vaUFv2{uxIm&K#$O(B2YNpJh_8JVB2x O4tSc_ln6s+3!@+I=peTM diff --git a/src/test/resources/input/singleFeatureTests/FieldWithAccessModifier.class b/src/test/resources/input/singleFeatureTests/FieldWithAccessModifier.class deleted file mode 100644 index a322f456660163581e52d48955bdb5799b09bb7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmZ{e%?`m(5QWd6N|oB#u&~2IUqB>Cnn?UC2nNDeP$bj?aS?VXqP@Lz1L>uN;y^_z9TM`L?nXz6&~TIt{jEw5 zBhQnk(>(UoPRWEof@?}BOk!UWteJ}B;(T;vvKDU07h@Hl6HhuS6U{$4{R{$a=*$Li gBFZp+8&k5buxfoAKP5}ZIDWP2mSReS0N%1a2@jvx9-m!Q`h3jvdpK@<~= zeza7C(#Q|hWWRM)JeTfPH`$D1B-Kh3XtOW$;?ajE6q(xEec6Y$^nY-2A3ozXZt1= zK>1w3`K3k4scxAdNp6UCJ&;uliVW;P7k~gG5CYu*Bsqb+P@pJCTvTg210#oxG{*u4 z&KAc1%Nf{O7#TMLC72kvfTR>q1BlJSzzk%uFmMBn5Cj@20yKmhD8t9V^dBg|#LmFZ N2vWz$zyns#3jlwFD`Wrw diff --git a/src/test/resources/input/singleFeatureTests/IfElseIfElse.class b/src/test/resources/input/singleFeatureTests/IfElseIfElse.class deleted file mode 100644 index 680b310cab6113151f97dcd998d86843760f9889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290 zcmYjL%TB^j6r9u6-cpLtjT=l*SL#B3fVhA_V&Y?gVSih%=3*@d3tzy8xMS_g#04MV zM+wvF!h4g+oH^&robR8n4S+uOLpX31ya;>n1+A%G>TagEfYI ex0vjJ35WFTP^ojG33tneqo4!`9R^0#Vq*u~{xWO; diff --git a/src/test/resources/input/singleFeatureTests/Increment.class b/src/test/resources/input/singleFeatureTests/Increment.class deleted file mode 100644 index 75faed58501bcdc4dc2deeb3a0cbc606d5fd7aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmYjL%Syvg6r6LLHo0lq#s{LP3wLc7_6M{J1tH)ID%~gXBB^aEHT4VnCoWvO5W$5X z;QzQ0QRmhoa^al0=ggd$x38C100&t0p-^(+1Sq2-2nX?9+!@CCRp%@jn6wa7_Od)H zx`I-()z|Q#UHAd22n0IH(}@|GoIIy6w`>v-9*!@KpmCh#=5#tr%;X|YhMef^AHNy3 z`hr@oh|}wn_+~-zd*kUOHAk7{*Z=PC+F;nBy<%|M*Z@R|h{;)N{B6%SK)L-4d7KmL ztakk?Y9L%t&na~{-Dq#lM4sR}`&*%ZkE++5DS7yQw{it5U!#LP;_-#hSY}_R{}QJf O>Jz?v&|bK(l9eBg(mC${ diff --git a/src/test/resources/input/singleFeatureTests/MainMethod.class b/src/test/resources/input/singleFeatureTests/MainMethod.class deleted file mode 100644 index 0470c083d8f0041792c4ae9f2158848bbefb809e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmZ9Gy$ZrW5QJw<+UZ!@S;)Cx9vZ8cMJn*dEHL5L!oZ72!$feYlQ~GARg^vC^uT5UijdIj9n9OQG~q z7Kbb)*t0B^1b?BlTwTtw%(o&wv16Z^BD90u;upFpa;5j9e#9x8?2;#Pt_WjK!DZFuOU4=8K{pm0#M``$c2S4-y+G&du=|hM3^e#zLh}QtM=oyw diff --git a/src/test/resources/input/singleFeatureTests/MultipleClasses.class b/src/test/resources/input/singleFeatureTests/MultipleClasses.class deleted file mode 100644 index 4585bf0309a0781a1a7b4e841df2df39cb83717c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmX^0Z`VEs1_mbvUM>bE24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc27cetoRZ9foK)wW#Ny)AVnzlQ=lqmZpoC9mUaDVdZc=JdNMceB zP=qTuzqBYh)h!dm5kb?Z2eOPofq@<91`uEbVxTL4G$)WH3#7p!TH6^IH-e?PfFwv7 Oq?D0?8%Q%T@BjcwkSJ>a diff --git a/src/test/resources/input/singleFeatureTests/Null.class b/src/test/resources/input/singleFeatureTests/Null.class deleted file mode 100644 index 47a87ef6879c6b87b3646e09ec1003666d088f1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmW-bJr06U5QJy>6-2-rSSp1aKx3ha6~RJd|G*amK}ZOAFAHO0;Q>69aUaEQc4oiK z?)Ufp0N7&cLW6F@@L<9sgr&HPxDxd>K4hiLJA$Z02a^!eiKUtPI!V5EIj z5lAqWsCmWSuDM7;kQB8{`&%a4lgKJ|++)+Xx!e~@IEr4XYnXAS#@`SZrw$XTci5S* gig>GbZuA00^o0Ew7@xZjox2HxX$LlQ0c#E6A4iWPasU7T diff --git a/src/test/resources/input/singleFeatureTests/SelfReference.class b/src/test/resources/input/singleFeatureTests/SelfReference.class deleted file mode 100644 index 413157a7ba2c818270f0daae9225110cbac90597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmZ8e%Syvg5Ir|ZlQvD8Sl|4(j5!8p!(T*LL_l+H)@A>~&=n3SvTDcId?lt*+DOR7~8-1F#J#a!hK^x9PC-q6^Ok;~ZN5c7Gp2DiM;Cu_ iTily;=e?qOGeN`Od`5GO)*nm03~0(uS#e1;vHS@cn@I5h diff --git a/src/test/resources/input/singleFeatureTests/TestClass2.class b/src/test/resources/input/singleFeatureTests/TestClass2.class deleted file mode 100644 index 85b51363ba1e568002e8b72e1b88048e396b7e0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmW+wy9&ZU5S%kH(HPOfROjL$MX#H-|_b_Jm^)Tu5;1hd!QI%vWXa6Po(5ya-G zuhWcGBst~;Ym)61Az0{CEz3)y@{LT++;P`gneWt0SH!FL2Gu!q+0@{7*rBqmEB=Rh in_0wD;_OCGP-HzI?thKX=)+{RVX@kQU|qo6K==cXSR>{D diff --git a/src/test/resources/input/singleFeatureTests/VariableCalculation.class b/src/test/resources/input/singleFeatureTests/VariableCalculation.class deleted file mode 100644 index 131a2e6b75de3abf21e6521ad4ab0cea94218e30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmZ{g%TB^j5QhH)g>qFCFC^52CA!cTFvftFka$ZVEL=I16Fqt;T3h1d7-QnbjVluu zK7bEpoI_9%OOtk{GvEK8IrH)P_70$iQU)=^ZCE)ZkQ69f(ttKJdFLC)olEHk0?AF~ zsbEVWUR`b5NC_0%|FJ=nre=?{mj1W+R3P6B$h|tG>ydk!_I*jg zkV(<*O-S0Dm1*`v-<5mHOi+p#c-`C-71+E0^Q8IZ6@X9WY=xsRm9^Lu&pOpabq7FTSEy&t|SmkZ<~!QL}?$VXq~^>#VGCl6m4Z( KE3h;iYxxUZeqFBs diff --git a/src/test/resources/input/singleFeatureTests/VariableCompare.class b/src/test/resources/input/singleFeatureTests/VariableCompare.class deleted file mode 100644 index bf2b598420363d648239a9e90f5d6f4454e81cd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcma*j!A^rf5C-6X3zkYzXp4z4ns`(X_63ZIHt9*_VAF%QrL0Or!K~1y^5V(FgAd?C z8E1&m(!EFmv&?=wv%8;P?;ijzvE!lz%Yp4-18sp|E|+qc$^2m$#d9?)1=?q6o|fkV z*3t3QK}W!!N}b9$Q=?+>B()N-M@2%xze;m;Q!QepCp<6Umby~cs(dVxy1<=4_g-et zzquZRi#(aExc*OWyb1^PGLnsKz%1_@_uHK4PZ+@F0J?PN2p}{W^?8zJ c#y8NF0UzS7WsQN>*V_9qe>Q`SE{g`*Z_&Oc*8l(j diff --git a/src/test/resources/input/singleFeatureTests/While.class b/src/test/resources/input/singleFeatureTests/While.class deleted file mode 100644 index 3fbdb4f503cb162e7e0a86cadb65fd33720b2cb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249 zcmX^0Z`VEs1_mbvJ}w3(24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc2G;P5%$!t41{UZ16d=X#lbM(5SDKrYS`?C)1d`wlE=f$z_Dw8+ z^0|WZON)|I-N3rIz`FH77BMI=umkM}0Y)GMx&TOW0(pKw8YC{HwVi=cfXhaD9s_3! z$1_ovZ79eB?>f{EJf|Gu(`o&&XhJn6C7MyHPG^Y};{>8xrM!Gjp3} z#>FwAx{XQjdr87Nj8&GgY_r7&&cv`Kry@bIESV*_gI$SxQk||}0H^&4dS4SOf<1!a3eH;k>t8#+V{($=?i5x(1qY7Z-P$~;m9Iaywb%~y^N~oa$`U82FSONe5 diff --git a/src/test/resources/input/typedAstFeatureTests/CallMethodFromObjekt.class b/src/test/resources/input/typedAstFeatureTests/CallMethodFromObjekt.class deleted file mode 100644 index 4fee59341e764ff0ae786b9ad56c3223cc8e5682..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmZ`#!A`IN#DcdsT3o~DGtxgYxJ1;IQ% zxhcX%(SqZm1eZ|vR1gd~y^ChOI9h7Uy;zK?BD4nUnn#|B&m5Fdu~2ofi5j8tpO9eB zIUPSR&$97-A#VLRN&BHpA%QtBnlYg=@IxN0mJ^Pz)g%xmpZvI-akPr3-19ZrTsP=c zuS_V7I7x@BpGXL9KMXnc0+l2z(3D@}P