diff --git a/src/test/java/AST/testAll.java b/src/test/java/AST/testAll.java index c8dffbc..7b9c41c 100644 --- a/src/test/java/AST/testAll.java +++ b/src/test/java/AST/testAll.java @@ -3,24 +3,25 @@ import ASTs.emptyClassAST; import abstractSyntaxTree.Program; import org.junit.Test; -import java.io.File; - public class testAll { AstComparer astComparer; public testAll() { - this.astComparer = new AstComparer("src/test/resources"); + this.astComparer = new AstComparer("test/resources"); } @Test - public void TestEmptyClass() + public void TestEmptyClass(){ + Program ast = emptyClassAST.getEmptyProgramm(); + String pathToCode = "basicClasses/emptyClass.java"; + testAst(ast, pathToCode); + } + public void testAst(Program ast, String pathToCode) { - System.out.println("Current working directory: " + new File(".").getAbsolutePath()); - Program testEmptyClassAST = emptyClassAST.getEmptyProgramm(); try { - astComparer.astComparison("basicClasses/emptyClass.java", testEmptyClassAST); + astComparer.astComparison(pathToCode, ast); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/src/test/java/Typecheck/TestAll.java b/src/test/java/Typecheck/TestAll.java index 0f2627d..4f879f7 100644 --- a/src/test/java/Typecheck/TestAll.java +++ b/src/test/java/Typecheck/TestAll.java @@ -2,15 +2,82 @@ package Typecheck; import ASTs.emptyClassAST; import abstractSyntaxTree.Program; +import astGenerator.ASTGenerator; +import gen.DecafLexer; +import gen.DecafParser; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.ParseTree; import org.junit.Test; +import java.io.IOException; import java.lang.reflect.Type; +import java.nio.file.Files; +import java.nio.file.Path; + +import static org.junit.Assert.fail; public class TestAll { @Test - public void TestEmptyClass() throws Exception { - Program emptyAst = emptyClassAST.getEmptyProgramm(); - TypeChecker.assertTypeCheckResult(emptyAst, true); + public void testEmptyClass() { + Program emptyClassAst = emptyClassAST.getEmptyProgramm(); + testTypeCheck(emptyClassAst, true); + + } + + @Test + public void testEmptyClassWithConstructor(){ + Program abstractSyntaxTree = getAst("test/resources/basicClasses/EmptyClassWithConstructor.java"); + boolean expectedResult = true; + testTypeCheck(abstractSyntaxTree, expectedResult); + } + + @Test + public void testFourClasses(){ + Program abstractSyntaxTree = getAst("test/resources/basicClasses/FourClasses.java"); + boolean expectedResult = true; + testTypeCheck(abstractSyntaxTree, expectedResult); + } + + @Test + public void testFail(){ + Program assignWrongType = getAst("test/resources/FailTests/AssignWrongType.java"); + testTypeCheck(assignWrongType, false); + } + + public void testTypeCheck(Program abstractSyntaxTree, boolean expectedResult){ + try { + TypeChecker.assertTypeCheckResult(abstractSyntaxTree, expectedResult); + } catch (Exception e) { + fail(); + } + } + + private Program getAst (String pathToCode){ + String content = ""; + try { + System.out.println("Classpath: " + Path.of(pathToCode)); + content = Files.readString(Path.of(pathToCode)); + } catch (IOException e) { + System.out.println("File not found!"); + fail(); + } + + CharStream codeCharStream = CharStreams.fromString(content); + DecafLexer lexer = new DecafLexer(codeCharStream); + CommonTokenStream tokens = new CommonTokenStream(lexer); + + tokens.fill(); + + DecafParser parser = new DecafParser(tokens); + + ParseTree tree = parser.program(); + + ASTGenerator generator = new ASTGenerator(); + Program abstractSyntaxTree = (Program) generator.visit(tree); + + return abstractSyntaxTree; } } diff --git a/src/test/resources/basicClasses/FourClasses.tokens b/src/test/resources/basicClasses/FourClasses.tokens index 62fbdb4..6b9be23 100644 --- a/src/test/resources/basicClasses/FourClasses.tokens +++ b/src/test/resources/basicClasses/FourClasses.tokens @@ -106,10 +106,11 @@ Int: "int" Identifier: "getX" OpenRoundBracket: "(" ClosedRoundBracket: ")" +OpenCurlyBracket: "{" Return: "return" This: "this" Dot: "." -identifier: "x" +Identifier: "x" Semicolon: ";" ClosedCurlyBracket: "}" ClosedCurlyBracket: "}" @@ -130,17 +131,15 @@ OpenCurlyBracket: "{" This: "this" Dot: "." Identifier: "test" -Assign: "new" +Assign: "=" +New: "new" Identifier: "Test" OpenRoundBracket: "(" Identifier: "i" ClosedRoundBracket: ")" Semicolon: ";" ClosedCurlyBracket: "}" - - - - +ClosedCurlyBracket: "}" Class: "class" Identifier: "Test3" OpenCurlyBracket: "{" @@ -154,11 +153,11 @@ Identifier: "y" Semicolon: ";" AccessModifierPublic: "public" Identifier: "Test3" -OpenRoundBrackets: "(" +OpenRoundBracket: "(" Int: "int" Identifier: "i" -ClosedRoundBrackets: ")" -OpenCurlyBrackets: "{" +ClosedRoundBracket: ")" +OpenCurlyBracket: "{" This: "this" Dot: "." Identifier: "x" @@ -168,9 +167,9 @@ Semicolon: ";" ClosedCurlyBracket: "}" AccessModifierPublic: "public" Int: "int" -Identifier: "getC" -OpenRoundBrackets: "(" -ClosedRoundBrackets: ")" +Identifier: "getX" +OpenRoundBracket: "(" +ClosedRoundBracket: ")" OpenCurlyBracket: "{" Return: "return" This: "this"