package ql.parser.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.junit.Test;
import ql.ast.form.ComputedQuestion;
import ql.ast.form.Form;
import ql.ast.form.Question;
import ql.parser.antlr.FormParser;
public class TestForms {
FormParser parser = new FormParser();
@Test
public void testFormParser() throws ParseError, IOException {
assertEquals(parser.parseForm(
"form testForm {\n" +
"hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
"hasBoughtHouse: \"Have you bought a house in 2012?\" boolean\n" +
"hasMaintLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean(true)\n" +
"}\n"
).getClass(),Form.class);
assertEquals(parser.parseForm(
"form testForm {\n" +
"hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
"hasBoughtHouse: \"Have you bought a house in 2012?\" boolean\n" +
"hasMaintLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean(true)\n" +
"}\n"
).getFormItems().size(),3);
assertEquals(parser.parseForm(
"form testForm {\n" +
"hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
"hasBoughtHouse: \"Have you bought a house in 2012?\" boolean\n" +
"hasMaintLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean(true)\n" +
"}\n"
).getFormItems().get(2).getClass(),ComputedQuestion.class);
}
@Test
public void testQuestionType() throws ParseError, IOException {
Question q1 = (Question) parser.parseForm(
"form testForm {\n" +
"hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
"hasBoughtHouse: \"Have you bought a house in 2012?\" boolean\n" +
"hasMaintLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean(true)\n" +
"}\n"
).getFormItems().get(0);
Question q2 = (Question) parser.parseForm(
"form testForm {\n" +
"hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
"hasBoughtHouse: \"Have you bought a house in 2012?\" boolean\n" +
"hasMaintLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean(true)\n" +
"}\n"
).getFormItems().get(1);
assertEquals(q1.getType().getClass(),q2.getType().getClass());
}
@Test
public void testFormIdents() throws ParseError, IOException {
assertTrue(parser.parseForm(
"form testForm {\n" +
"hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
"hasBoughtHouse: \"Have you bought a house in 2012?\" boolean\n" +
"hasMaintLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean(true)\n" +
"}\n"
).validate());
assertFalse(parser.parseForm(
"form testForm {\n" +
"hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
"hasBoughtHouse: \"Have you bought a house in 2012?\" boolean\n" +
"hasSoldHouse: \"Did you enter a loan for maintenance/reconstruction?\" int\n" +
"}\n"
).validate());
assertTrue(parser.parseForm(
"form testForm {\n" +
"hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
"hasBoughtHouse: \"Have you bought a house in 2012?\" boolean(false)\n" +
"hasMaintLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean(hasSoldHouse)\n" +
"}\n"
).validate());
assertFalse(parser.parseForm(
"form testForm {\n" +
"hasSoldHouse: \"Have you sold a house in 2012?\" boolean(true)\n" +
"hasBoughtHouse: \"Have you bought a house in 2012?\" boolean(false)\n" +
"hasMaintLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean(2)\n" +
"}\n"
).validate());
}
@Test
public void testFormStatement() throws ParseError, IOException {
assertEquals(parser.parseForm(
"form testForm {\n" +
"hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
"hasBoughtHouse: \"Have you bought a house in 2012?\" boolean\n" +
"hasMaintLoan: \"Did you enter a loan for maintenance/reconstruction?\" boolean(true)\n" +
"}\n"
).getFormItems().size(),3);
assertTrue(parser.parseForm(
"form testForm {\n" +
" hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
" if (hasSoldHouse) {\n" +
" // this is a comment\n" +
" totalSoldHouseValue: \"Was house sold?\" boolean(hasSoldHouse)\n" +
" }\n" +
" else {\n" +
" totalSoldHouseValue2: \"Was house sold?\" boolean(hasSoldHouse)\n" +
" }\n" +
"}\n"
).validate());
assertFalse(parser.parseForm(
"form testForm {\n" +
" hasSoldHouse: \"Have you sold a house in 2012?\" boolean\n" +
" if (hasSoldHouse) {\n" +
" totalSoldHouseValue: \"How much money did you get for all houses in total?\" int\n" +
" if (totalSoldHouseValue) {\n" +
" yuRich: \"Do you consider yourself rich?\" boolean\n" +
" }\n" +
" }\n" +
"}\n"
).validate());
}
}