Merge remote-tracking branch 'origin/main'

This commit is contained in:
ahmad 2024-07-05 11:41:14 +02:00
commit f63df782bc
77 changed files with 114 additions and 348 deletions

View File

@ -12,19 +12,9 @@
- Julian Kraus: Grammatik entwickeln, Generator, Syntactic Sugar auflösen, Parser Exceptions sammeln - Julian Kraus: Grammatik entwickeln, Generator, Syntactic Sugar auflösen, Parser Exceptions sammeln
- Ahmad Juha: Typcheck - Ahmad Juha: Typcheck
- Simon Wittmann: Codegen, Logging, CommandLine Nutzung - Simon Wittmann: Codegen, Logging, CommandLine Nutzung
- Jonathan Fleischmann: - Jonathan Fleischmann: Testfiles, manuelle übersetzung in AST und TypedAST, JUnit-Tests für Scanner, Parser und
- Schreiben von Tests, die die einzelnen Features abdecken Typecheck und Compiler, Testfiles für E2E-Tests, JUnit-Tests für E2E-Tests mit Reflections, Negative Testfiles und
- Umwandlung der Testfiles in AST und TypedAST Überprüfung, ob sie bei Kompilierung Fehler werfen, Dokumentation
- Implementierung der Tests, die mithilfe der umgewandelten Testfiles die korrekte Umwandlung
von java-File zu AST und AST zu TypedAST prüfen
- Schreiben von Testfiles, die die einzelnen Features abdecken und gut über Reflections testbar sind
- Implementierung eines Tools, durch das die Testfiles mithilfe von Reflections
einfacher nach gewissen Kriterien überprüfbar sind
- Implementierung von Tests, die die korrekte Umwandlung der Testfiles von java-File in class-File
durch den Compiler mithilfe des Tools prüfen
- Hinzufügen von Testfiles, die bei der Umwandlung fehlschlagen sollen
- Implementierung von Tests, die prüfen, ob der Compiler bei den fehlerhaften Testfiles tatsächlich fehlschlägt
- Dokumentation der Tests
## Besonderheiten unserer Implementierung ## Besonderheiten unserer Implementierung
@ -40,42 +30,37 @@
## Aufbau der Tests ## Aufbau der Tests
### Tests für den Scanner, Parser und Typechecker: ### Tests für den Scanner, Parser und Typecheck:
- Die Testfiles (.java), die alle Features abdecken, sind im Ordner `src/test/testFiles/ASTandTypedASTFeatures` zu finden. - Die Testfiles (.java), die alle Features abdecken, sind im Ordner `src/test/testFiles/ASTandTypedASTFeatures` zu finden.
Ihr Name gibt circa an, welches Feature / welche Features sie abdecken Der Name des jeweiligen Files gibt circa an, welches Feature / welche Features es abdeckt.
- Ihre manuell übersetzten ASTs und TypedASTs befinden sich im Ordner `src/test/testFiles/ASTandTypedASTFeatures` - Ihre manuell übersetzten ASTs befinden sich im Ordner `src/test/java/ScannerParserTests/FeaturesASTs`
- Die Klasse `src/test/java/ScannerParserTests.java` enthält die JUnit-Tests, die die korrekte Umwandlung der Testfiles in AST - Die Übereinstimmung der manuell übersetzten ASTs mit den vom Compiler generierten ASTs wird mit JUnit-Tests im File
durch den Compiler prüfen, indem sie den durch den Compiler generierten AST mit dem manuell erstellten AST vergleichen `src/test/java/ScannerParserTests/ScannerParserTests.java` überprüft
- Die Klasse `src/test/java/TypingTests.java` enthält die JUnit-Tests, die die korrekte Umwandlung der manuell erstellten ASTs - Die manuell übersetzten TypedASTs befinden sich im Ordner `src/test/java/TypeCheckTests/FeaturesTypedASTs`
in TypedASTs durch den Compiler prüfen, indem sie den durch den Compiler generierten TypedAST mit dem manuell erstellten - Die Übereinstimmung der manuell übersetzten TypedASTs mit den vom Compiler generierten TypedASTs wird mit JUnit-Tests im File
TypedAST vergleichen `src/test/java/TypeCheckTests/TypingTests.java` überprüft
- Weitere Testfiles, die nicht unbedingt auf ein bestimmtes Feature abzielen, sind im Ordner `src/test/testFiles/MoreTestFiles` - Weitere Testfiles, die nicht unbedingt auf ein bestimmtes Feature abzielen, sind im Ordner `src/test/testFiles/MoreTestFiles`
zu finden, die manuell übersetzen ASTs und TypedASTs dazu sind im Ordner `src/test/java/MoreTestResources` zu finden. zu finden, die manuell übersetzen ASTs und TypedASTs dazu sind im Ordner `src/test/java/ScannerParserTests/MoreTestsASTs`
Die korrekte Umwandlung dieser Testfiles in AST und TypedAST wird ebenfalls durch die Klassen `src/test/java/ScannerParserTests.java` und `src/test/java/TypeCheckTests/MoreTestsTypedASTs` zu finden. Die korrekte Umwandlung der Testfiles in AST und
und `src/test/java/TypingTests.java` geprüft, jedoch sind die Unit-Tests hier nicht vollständig. TypedAST wird in den gleichen Testklassen wie die Features getestet.
### Tests für den gesamten Compiler: ### Tests für den gesamten Compiler:
- Da die Kompilierung der Testfiles für den Scanner, Parser und Typechecker teilweise nicht gut mit Reflections testbar ist, - Da die Kompilierung der Testfiles für den Scanner, Parser und Typecheck teilweise nicht gut mit Reflections testbar ist,
gibt es extra Testfiles für das Testen des Compilers im Ordner `src/test/testFiles/E2EFeatures` gibt es extra Testfiles für das Testen des Compilers im Ordner `src/test/testFiles/E2EFeatures`
- Jedes der Testfiles hat eine eigene Testklasse, welche sich im Ordner `src/test/java/E2ETests/Features` befindet. Diese - Jedes der Testfiles hat eine eigene Testklasse, welche sich im Ordner `src/test/java/E2ETests/Features` befindet. Diese
Testklassen haben jeweils einen Namen, der sich aus `E2E_` und dem Namen des Testfiles zusammensetzt. Sie prüfen Testklassen haben jeweils einen Namen, der sich aus `E2E_` und dem Namen des Testfiles zusammensetzt. Sie prüfen
mithilfe der Hilfsklasse `src/test/java/E2ETests/BytecodeTestUtil.java`, ob der Compiler die Testfiles korrekt in mithilfe der Hilfsklasse `src/test/java/E2ETests/BytecodeTestUtil.java`, ob der Compiler die Testfiles korrekt in
class-Files umwandelt. Die Hilfsklasse erstellt ein Class<?>-Objekt der Klasse und implementiert Methoden, welche mit class-Files umwandelt. Die Hilfsklasse erstellt ein Class<?>-Objekt der Klasse und implementiert Methoden, welche mit
Reflections Werte aus dem Objekt auslesen und zurückgeben. Diese Werte werden dann mit den erwarteten Werten in der Reflections Werte aus einem Objekt der Klasse auslesen und zurückgeben. Diese Werte werden dann mit den erwarteten
jeweiligen Testklasse verglichen. Werten in der jeweiligen Testklasse verglichen.
- Die Klasse `src/test/java/AllE2ETests.java` führt mithilfe der Klasse `src/test/java/HelpClasses/TestFileTester.java`
alle Testklassen für die E2E-Tests der einzelnen Features aus und gibt deren Ergebnis aus. Somit muss für das E2E-Testen
der gesamten Features nur diese Klasse ausgeführt werden.
### Negative Tests: ### Negative Tests:
- Um zu überprüfen, dass der Compiler auch bei fehlerhaften Testfiles fehlschlägt, gibt es Testfiles im Ordner - Um zu überprüfen, dass der Compiler auch bei fehlerhaften Testfiles fehlschlägt, gibt es Testfiles im Ordner
`src/test/testFiles/Negative`, welche nicht korrekt kompiliert werden können. Die Testfiles sin in mehrere Kategorien `src/test/testFiles/Negative`, welche nicht korrekt kompiliert werden können. Die Testfiles sind in mehrere Kategorien
unterteilt, die durch die Ordnerstruktur in `src/test/testFiles/Negative` dargestellt werden. Für jede Kategorie gibt es unterteilt, die durch die Ordnerstruktur in `src/test/testFiles/Negative` dargestellt werden. Für jede Kategorie gibt es
eine eigene Testklasse, die sich im Ordner `src/test/java/NegativeTests` befindet und den gleichen Namen wie der Ordner eine eigene Testklasse, die sich im Ordner `src/test/java/NegativeTests` befindet und den gleichen Namen wie der Ordner
ihrer Kategorie hat. Diese Testklassen versuchen die Testfiles ihrer Kategorie zu kompilieren und erwarten, dass der ihrer Kategorie hat. Diese Testklassen versuchen die Testfiles ihrer Kategorie zu kompilieren und erwarten, dass der
Compiler fehlschlägt. Compiler fehlschlägt. Die Testfiles, die in keine Kategorie passen werden in der Testklasse
- Wie bei den E2E-Tests gibt es auch hier eine Klasse `src/test/java/AllNegativeTests.java`, die neben eigenen Tests auch `src/test/java/NegativeTests/RestOfNegativeTests.java` getestet
alle Testklassen für die negativen Tests ausführt und deren Ergebnis ausgibt. Somit muss für das Testen der negativen - Hinweis: Bitte die Ausgabe in der Konsole ignorieren, diese Fehlermeldungen sind die erwarteten Fehlermeldungen,
Tests nur diese Klasse ausgeführt werden. die der Compiler ausgeben soll, werden in diesem Test-Fall jedoch nicht unterdrückt.
- Bitte die Ausgabe in der Konsole ignorieren, diese Fehlermeldungen sind die erwarteten Fehlermeldungen, die der Compiler
ausgeben sollte, werden in diesem Test-Fall jedoch nicht unterdrückt.

View File

@ -1,125 +0,0 @@
import E2ETests.Features.*;
import org.junit.jupiter.api.Test;
import static HelpClasses.TestFileTester.run;
/**
* This class runs all the E2E test classes.
*/
class AllE2ETests {
@Test
void runE2EBreakTests() {
run(E2E_Break.class);
}
@Test
void runE2EClassTests() {
run(E2E_Class.class);
}
@Test
void runE2EClassObjectsTests() {
run(E2E_ClassObjects.class);
}
@Test
void runE2ECommentTests() {
run(E2E_Comment.class);
}
@Test
void runE2ECompAssignTests() {
run(E2E_CompAssign.class);
}
@Test
void runE2EComplexCallsTests() {
run(E2E_ComplexCalls.class);
}
@Test
void runE2EConstructorTests() {
run(E2E_Constructor.class);
}
@Test
void runE2EContinueTests() {
run(E2E_Continue.class);
}
@Test
void runE2EDataTypesTests() {
run(E2E_DataTypes.class);
}
@Test
void runE2EFieldTests() {
run(E2E_Field.class);
}
@Test
void runE2EForTests() {
run(E2E_For.class);
}
@Test
void runE2EIfTests() {
run(E2E_If.class);
}
@Test
void runE2ELogicExprTests() {
run(E2E_LogicExpr.class);
}
@Test
void runE2EMainTests() {
run(E2E_Main.class);
}
@Test
void runE2EMethodTests() {
run(E2E_Method.class);
}
@Test
void runE2EMethodCallTests() {
run(E2E_MethodCall.class);
}
@Test
void runE2EOperatorsTests() {
run(E2E_Operators.class);
}
@Test
void runE2EOverloadedTests() {
run(E2E_Overloaded.class);
}
@Test
void runE2EPrintTests() {
run(E2E_Print.class);
}
@Test
void runE2EReturnTests() {
run(E2E_Return.class);
}
@Test
void runE2EUnaryTests() {
run(E2E_Unary.class);
}
@Test
void runE2EVariableDefWithDeclTests() {
run(E2E_VariableDefWithDecl.class);
}
@Test
void runE2EWhileTests() {
run(E2E_While.class);
}
}

View File

@ -1,77 +0,0 @@
package HelpClasses;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.platform.commons.support.HierarchyTraversalMode;
import org.junit.platform.commons.support.ReflectionSupport;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class TestFileTester {
/**
* Execute all methods annotated with @Test in the given class.
*
* @param testClass The class containing the test methods.
*/
public static void run(Class<?> testClass) {
List<String> failedTests = new ArrayList<>();
// Find all methods annotated with @Test in the given class and save them in a list
List<Method> testMethods = ReflectionSupport.findMethods(
testClass,
method -> method.isAnnotationPresent(Test.class),
HierarchyTraversalMode.TOP_DOWN
);
// Execute for all test methods found
for (Method testMethod : testMethods) {
try {
// Create an instance of the test class
Object testInstance = ReflectionSupport.newInstance(testClass);
// Execute all methods annotated with @BeforeEach in the given class
List<Method>beforeEachMethods = ReflectionSupport.findMethods(
testClass,
method -> method.isAnnotationPresent(BeforeEach.class),
HierarchyTraversalMode.TOP_DOWN
);
for (Method beforeEachMethod : beforeEachMethods) {
beforeEachMethod.invoke(testInstance);
}
// Execute the test method
testMethod.invoke(testInstance);
// Execute all methods annotated with @AfterEach in the given class
List<Method> afterEachMethods = ReflectionSupport.findMethods(
testClass,
method -> method.isAnnotationPresent(AfterEach.class),
HierarchyTraversalMode.TOP_DOWN
);
for (Method afterEachMethod : afterEachMethods) {
afterEachMethod.invoke(testInstance);
}
} catch (Exception e) {
// If the test method throws an exception, save the exception message in the failedTests list
if (e.getCause() != null) {
failedTests.add(testMethod.getName() + ": " + e.getCause().getMessage());
} else {
failedTests.add(testMethod.getName() + ": " + e.getMessage());
}
}
}
// If there are failed tests, print them and fail the test class, otherwise print a success message
if (!failedTests.isEmpty()) {
failedTests.forEach(System.err::println);
Assertions.fail("Ein oder mehrere Tests sind fehlgeschlagen.");
} else {
System.out.println("Alle Tests sind erfolgreich.");
}
}
}

View File

@ -1,41 +1,17 @@
import NegativeTests.*; package NegativeTests;
import de.maishai.Compiler; import de.maishai.Compiler;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.util.List; import java.util.List;
import static HelpClasses.TestFileTester.run;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;
/** /**
* This class runs all negative tests plus some additional tests that did not fit into any of the categories. * Tests for rest of testfiles which did not fit in any Category
* see src/test/testFiles/Negative for the test files.
*/ */
class AllNegativeTests { public class RestOfNegativeTests {
@Test
void runCallVariableOutsideScopeTests() {
run(CallVariableOutsideScope.class);
}
@Test
void runForbiddenParticularitiesInImplementationTests() {
run(ForbiddenParticularitiesInImplementation.class);
}
@Test
void runMissingComponentsTests() {
run(MissingComponents.class);
}
@Test
void runUsingSameNameTests() {
run(UsingSameName.class);
}
@Test
void runWrongTypeTests() {
run(WrongType.class);
}
// A value is assigned to a field outside a method // A value is assigned to a field outside a method
@Test @Test

View File

@ -1,4 +1,4 @@
package FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 FeatureTestResources.AST; package ScannerParserTests.FeaturesASTs;
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 MoreTestResources.AST; package ScannerParserTests.MoreTestsASTs;
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 MoreTestResources.AST; package ScannerParserTests.MoreTestsASTs;
import de.maishai.ast.*; import de.maishai.ast.*;
import de.maishai.ast.records.*; import de.maishai.ast.records.*;

View File

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

View File

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

View File

@ -1,4 +1,4 @@
package MoreTestResources.AST;//public class ClassWithConstructorWithParameters { package ScannerParserTests.MoreTestsASTs;//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 MoreTestResources.AST;//public class ClassWithField { package ScannerParserTests.MoreTestsASTs;//public class ClassWithField {
// int x; // int x;
//} //}

View File

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

View File

@ -1,4 +1,4 @@
package MoreTestResources.AST;//public class ClassWithMethodAndField { package ScannerParserTests.MoreTestsASTs;//public class ClassWithMethodAndField {
// char c; // char c;
// //
// public ClassWithMethodAndField(char character) { // public ClassWithMethodAndField(char character) {

View File

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

View File

@ -1,4 +1,4 @@
package MoreTestResources.AST; package ScannerParserTests.MoreTestsASTs;
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 MoreTestResources.AST;//public class PublicClass { package ScannerParserTests.MoreTestsASTs;//public class PublicClass {
//} //}
import de.maishai.ast.records.Block; import de.maishai.ast.records.Block;

View File

@ -1,11 +1,11 @@
package ScannerParserTests;
import ScannerParserTests.FeaturesASTs.*;
import ScannerParserTests.MoreTestsASTs.*;
import de.maishai.Compiler; import de.maishai.Compiler;
import de.maishai.ast.records.Program; import de.maishai.ast.records.Program;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import FeatureTestResources.AST.*;
import MoreTestResources.AST.*;
import java.util.List; import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;

View File

@ -1,4 +1,4 @@
package FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
import de.maishai.ast.UnaryOperator; import de.maishai.ast.UnaryOperator;
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

View File

@ -1,4 +1,4 @@
package FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 FeatureTestResources.TypedAST; package TypeCheckTests.FeaturesTypedASTs;
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 MoreTestResources.TypedAST;//public class ClassWithConstructor { package TypeCheckTests.MoreTestsTypedASTs;//public class ClassWithConstructor {
// int x; // int x;
// public classWithConstructor() { // public classWithConstructor() {
// this.x = 10; // this.x = 10;

View File

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

View File

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

View File

@ -1,4 +1,4 @@
package MoreTestResources.TypedAST;//public class ClassWithConstructorWithParameters { package TypeCheckTests.MoreTestsTypedASTs;//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 MoreTestResources.TypedAST;//public class ClassWithField { package TypeCheckTests.MoreTestsTypedASTs;//public class ClassWithField {
// int x; // int x;
//} //}

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
package MoreTestResources.TypedAST; package TypeCheckTests.MoreTestsTypedASTs;
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 MoreTestResources.TypedAST;//public class PublicClass { package TypeCheckTests.MoreTestsTypedASTs;//public class PublicClass {
//} //}
import de.maishai.typedast.Type; import de.maishai.typedast.Type;

View File

@ -1,12 +1,19 @@
package TypeCheckTests;
import ScannerParserTests.MoreTestsASTs.AbstractSyntax_ClassWithConstructor;
import ScannerParserTests.MoreTestsASTs.AbstractSyntax_ClassWithField;
import ScannerParserTests.MoreTestsASTs.AbstractSyntax_ComplexClass;
import ScannerParserTests.MoreTestsASTs.AbstractSyntax_PublicClass;
import TypeCheckTests.MoreTestsTypedASTs.TypedAbstractSyntax_ClassWithConstructor;
import TypeCheckTests.MoreTestsTypedASTs.TypedAbstractSyntax_ClassWithField;
import TypeCheckTests.MoreTestsTypedASTs.TypedAbstractSyntax_ComplexClass;
import TypeCheckTests.MoreTestsTypedASTs.TypedAbstractSyntax_PublicClass;
import ScannerParserTests.FeaturesASTs.*;
import de.maishai.Compiler; import de.maishai.Compiler;
import de.maishai.typedast.typedclass.TypedProgram; import de.maishai.typedast.typedclass.TypedProgram;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import FeatureTestResources.AST.*; import TypeCheckTests.FeaturesTypedASTs.*;
import FeatureTestResources.TypedAST.*;
import MoreTestResources.AST.*;
import MoreTestResources.TypedAST.*;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
/** /**