package tests;
import static org.junit.Assert.*;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
import org.junit.Test;
import configuration.Settings;
import externaltools.DLVSolver;
import externaltools.ExternalSolver;
import parser.ASTprogram;
import parser.ASTprogramRules;
import parser.ParseException;
import parser.SimpleNode;
import parser.SparcTranslator;
import translating.InstanceGenerator;
import translating.Translator;
import typechecking.TypeChecker;
public class TestWarning {
@Test
public void testArithm1() throws FileNotFoundException {
assertEquals("Warning message was wrong",
"%WARNINGS %WARNING: Rule p(f(2,X)). at line 14, column 1 is an empty rule",
getError("../test/warnings/arithm1.sp"));
}
@Test
public void testArithm2() throws FileNotFoundException {
assertEquals("Warning message was wrong",
"%WARNINGS %WARNING: Rule p(X+1):-p(X+7). at line 11, column 1 is an empty rule",
getError("../test/warnings/arithm2.sp"));
}
@Test
public void testDisjArg() throws FileNotFoundException {
assertEquals("Error message was wrong",
"%WARNINGS %WARNING: Rule p(X,Y):-q(X). at line 18, column 1 is an empty rule",
getError("../test/warnings/disjarg.sp"));
}
@Test
public void testDisjoint2() throws FileNotFoundException {
assertEquals("Error message was wrong",
"%WARNINGS %WARNING: Rule :-p(X),#count{V:p(V+1),q(V+1)}>0. at line 9, column 2 is an empty rule",
getError("../test/warnings/disjoint_2.sp"));
}
@Test
public void testWarning() throws FileNotFoundException {
assertEquals("Error message was wrong",
"%WARNINGS %WARNING: Rule p(f(X)):-q(X). at line 11, column 1 is an empty rule",
getError("../test/warnings/warning.sp"));
}
@Test
public void testTwoWarning() throws FileNotFoundException {
assertEquals("Error message was wrong",
"%WARNINGS %WARNING: Rule p(X+10):-q(X). at line 7, column 1 is an empty rule %WARNING: Rule p(X+20):-p(X). at line 8, column 1 is an empty rule",
getError("../test/warnings/twoWarnings.sp"));
}
private String getError(String filePath) throws FileNotFoundException {
Reader sr = null;
try {
sr = new FileReader(filePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
SparcTranslator p = new SparcTranslator(sr);
try {
SimpleNode e = p.program();
InstanceGenerator gen = new InstanceGenerator(
p.sortNameToExpression);
TypeChecker tc = new TypeChecker(p.sortNameToExpression,
p.predicateArgumentSorts, p.constantsMapping,
p.curlyBracketTerms, p.definedRecordNames, gen);
Translator tr = new Translator(null, p, gen, true, true);
tc.checkRules((ASTprogramRules) e.jjtGetChild(2));
StringBuilder translatedProgram = new StringBuilder();
translatedProgram.append(tr.translateProgram((ASTprogram) e,
p.generatingSorts, p.sortRenaming, false));
System.out.println(translatedProgram);
ExternalSolver solver = new DLVSolver(translatedProgram.toString());
Settings.getSingletonInstance().setOptions(" -n=1 ");
System.out.println(solver.run(false));
} catch (ParseException ex) {
return ex.getMessage();
}
return null;
}
}