package test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.antlr.v4.runtime.ANTLRInputStream; import org.antlr.v4.runtime.CommonTokenStream; import org.junit.Test; import typecheck.Typecheck; import antlr4.QLLexer; import antlr4.QLParser; import ast.ASTNode; import ast.type.Type; import expr.Ident; import ast.form.Form; import ast.errormsg.Error; public class TypeCheckTest { public void test(boolean expected, String str){ Map<Ident,Type> mapvalue= new HashMap<Ident,Type>(); Error errors= new Error(); ANTLRInputStream input = new ANTLRInputStream(str); QLLexer lexer = new QLLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); QLParser parser = new QLParser(tokens); ASTNode tree = parser.forms().result; Typecheck visitor = new Typecheck(mapvalue, errors); boolean result = ((Form)tree).accept(visitor); if(result==true) {int i=1; System.out.println("The given input is correct!!!"); System.out.println(" "); } System.out.print(visitor.get_errorList()); System.out.println(" "); System.out.println(expected + "=" + result); assert(expected == result); } @Test public void Formtest() { System.out.println("######## Testing the Form ############"); System.out.println("FORM TEST 1"); test(true, "form Box1HouseOwning {"+ "hasSoldHouse: \"Did you sell a house in 2010?\" boolean"+"\n"+ "hasBoughtHouse: \"Did you buy a house in 2010?\" boolean"+"\n"+ "hasMainLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean"+"\n"+ "if(hasSoldHouse == true) {"+"\n"+ "sellingPrice: \"Price the house was sold for:\" integer"+ "\n"+ "privateDebt: \"Private debts for the sold house:\" integer"+"\n"+ "valueResidue: \"Value residue:\" integer(sellingPrice - privateDebt)"+"\n"+ "}"+ "\n"+ "else{"+"\n"+ "if(hasBoughtHouse == True) {"+"\n"+ "buyingPrice: \"Price the house was bought for:\" integer"+"\n"+ " privateDebt1: \"Private debts for the sold house:\" integer"+"\n"+ " valueResidue1: \"Value residue:\" integer(buyingPrice + privateDebt)"+"\n"+ "}"+ "}"+ "}"); System.out.println("FORM TEST 2"); test(false , "form Box1HouseOwning {"+ "hasSoldHouse: \"Did you sell a house in 2010?\" boolean"+"\n"+ "hasBoughtHouse: \"Did you buy a house in 2010?\" boolean"+"\n"+ "hasMainLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean"+"\n"+ "if(hasSoldHouse == 10) {"+"\n"+ "sellingPrice: \"Price the house was sold for:\" integer"+ "\n"+ "privateDebt: \"Private debts for the sold house:\" integer"+"\n"+ "valueResidue: \"Value residue:\" integer(sellingPrice - privateDebt)"+"\n"+ "}"+ "}"); // System.out.println("FORM TEST 3"); // test(false , "form Box1HouseOwning {"+ // " hasSoldHouse: \"Did you sell a house in 2010?\" boolean"+"\n"+ // "hasBoughtHouse: \"Did you buy a house in 2010?\" boolean"+"\n"+ // "hasMainLoan: \"Did you buy a house in 2010?\" boolean"+"\n"+ // "if(hasBoughtHouse == true) {"+"\n"+ // "sellingPrice: \"Price the house was sold for:\" integer"+ "\n"+ // "privateDebt: \"Private debts for the sold house:\" integer"+"\n"+ // "valueResidue: \"Value residue:\" integer(sellingPrice - privateDebt)"+"\n"+ // "}"+ // // "}"); System.out.println("FORM TEST 4"); test(false, "form form1 { sellingPrice: \"Price the house was sold for:\" integer" + "\n"+ "if(sellingPrice > 1000){" +"\n"+ "sellingPrice: \"Private debts for the sold house:\" integer }"+"\n"+ "}"); } @Test public void Literaltest(){ System.out.println("############ Testing the Literals ##############"); System.out.println(""); System.out.println("LITERAL TEST 1"); test(false, "form form1 {\n " + "q1 : \"Is it a Boolean literal?\" boolean(12) \n"+ "}"); System.out.println("LITERAL TEST 2"); test(true, "form form1 { q2 : \"Is it a Boolean literal\" boolean(false) }"); System.out.println("LITERAL TEST 3"); test(true, "form form1 { q3 : \"Is it a Integer literal?\" integer(12) }"); System.out.println("LITERAL TEST 4"); test(true, "form form1 { q4: \"Is it a String literal?\" string(\"abc\") }"); System.out.println("LITERAL TEST 5"); test(false, "form form1 { q5: \"Is it a String literal?\" string(123) }"); } @Test public void UnExprtest(){ System.out.println("############ Testing the Unary Expression ############"); System.out.println("UNEXPR TEST 1"); test(true, "form form1 { q1 : \"a question\" boolean(!q1)}"); System.out.println("UNEXPR TEST 2"); test(false, "form form1 { q1 : \"a question\" boolean(!1)}"); } @Test public void BinExprtest(){ System.out.println("########### Testing the Binary Expression ###########"); System.out.println("BINEXPR TEST 1"); test(true, "form form1 { q1 : \"a question\" integer(4-2) }"); System.out.println("BINEXPR TEST 2"); test(false, "form form1 { q1 : \"a question\" integer(17 / false)}"); } @Test public void Ifstatementtest(){ System.out.println("############## Testing the If statement #############"); System.out.println("IFSTATE TEST 1"); test(true, "form form1 { x : \"a question\" boolean"+"\n"+ "if(x == true) {q1 : \"a question\" boolean(true)}}"); System.out.println("IFSTATE TEST 2"); test(false, "form form1 { x : \"a question\" boolean"+"\n"+ "if(x == 1) {q1 : \"a question\" boolean(true)}}"); } @Test public void IfElsetest(){ System.out.println("############## Testing the IfElse statement #############"); System.out.println("IFELSE TEST 1"); test(true, "form part1 { x : \"Is it a ifelse statement\" boolean"+ "\n"+ "if(x == false) {q1 : \"a question\" boolean(true)}"+"\n"+ "else{q2 : \"a question2\" boolean" + "\n" + "}"+ "}"); System.out.println("IFELSE TEST 2"); test(false, "form part2 { x : \"a question\" boolean"+"\n"+ "if(x == true) {q1 : \"a question\" boolean(true)}" + "\n" + "else{q1 : \"a question2\" boolean(true)" + "\n" + "}"+ "}"); System.out.println("IFELSE TEST 3"); test(false, "form part3 { x : \"a question\" boolean"+"\n"+ "if(x > 5) {q1 : \"a question\" boolean(true)}"+"\n"+ "else{q2 : \"a question2\" boolean" + "\n" + "}"+ "}"); } }