package edu.uva.softwarecons.test;
import edu.uva.softwarecons.util.ParserBuilder;
import org.antlr.v4.runtime.tree.ParseTree;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* Falconlabs
*
* @author Santiago Carrillo
* Date: 3/6/14
*/
public class QuestionnaireParserTest
{
private ParserBuilder parserBuilder;
@Before
public void setUp()
{
parserBuilder = new ParserBuilder();
}
@Test
public void basicQuestionTest()
{
String input = "form Box1HouseOwning {hasSoldHouse: \"Did you sell a house in 2010?\" boolean}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form Box1HouseOwning { (question hasSoldHouse : \"Did you sell a house in 2010?\" (type boolean)) })" );
}
@Test
public void conditionalIfFormTest()
{
String input = "form Box1HouseOwning {if(a==b){hasSoldHouse: \"Did you sell a house in 2010?\" boolean}}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form Box1HouseOwning { (question if ( (expr (expr a) == (expr b)) ) { (question hasSoldHouse : \"Did you sell a house in 2010?\" (type boolean)) }) })" );
}
@Test
public void conditionalIfElseFormTest()
{
String input =
"form Box1HouseOwning {if(a==b){hasSoldHouse: \"text\" boolean} else { hasSoldHouse: \"text\" money }}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form Box1HouseOwning { (question if ( (expr (expr a) == (expr b)) ) { (question hasSoldHouse : \"text\" (type boolean)) } (elsestat else { (question hasSoldHouse : \"text\" (type money)) })) })" );
}
@Test
public void booleansAndFormTest()
{
String input = "form Box1HouseOwning {if(a==b && a<b){hasSoldHouse: \"t\" date}}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form Box1HouseOwning { (question if ( (expr (expr (expr a) == (expr b)) && (expr (expr a) < (expr b))) ) { (question hasSoldHouse : \"t\" (type date)) }) })" );
}
@Test
public void booleansOrFormTest()
{
String input = "form Box1HouseOwning {if(a==b || a<b){hasSoldHouse: \"t\" date}}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form Box1HouseOwning { (question if ( (expr (expr (expr a) == (expr b)) || (expr (expr a) < (expr b))) ) { (question hasSoldHouse : \"t\" (type date)) }) })" );
}
@Test
public void expressionComputedQuestionTest()
{
String input = "form Box1HouseOwning { h: \"text\" money(1+5*5)}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form Box1HouseOwning { (question h : \"text\" (type money) ( (expr (expr 1) + (expr (expr 5) * (expr 5))) )) })" );
}
@Test
public void booleanTypeQuestionTest()
{
String input = "form testForm {testQuestion: \"label\" boolean}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form testForm { (question testQuestion : \"label\" (type boolean)) })" );
}
@Test
public void dateTypeQuestionTest()
{
String input = "form testForm {testQuestion: \"label\" date}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form testForm { (question testQuestion : \"label\" (type date)) })" );
}
@Test
public void decimalTypeQuestionTest()
{
String input = "form testForm {testQuestion: \"label\" decimal}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form testForm { (question testQuestion : \"label\" (type decimal)) })" );
}
@Test
public void integerTypeQuestionTest()
{
String input = "form testForm {testQuestion: \"label\" integer}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form testForm { (question testQuestion : \"label\" (type integer)) })" );
}
@Test
public void moneyTypeQuestionTest()
{
String input = "form testForm {testQuestion: \"label\" money}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form testForm { (question testQuestion : \"label\" (type money)) })" );
}
@Test
public void stringTypeQuestionTest()
{
String input = "form testForm {testQuestion: \"label\" string}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form testForm { (question testQuestion : \"label\" (type string)) })" );
}
@Test
public void arithmeticAddExpressionTest()
{
String input = "form testForm {testQuestion: \"label\" money(a+b)}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form testForm { (question testQuestion : \"label\" (type money) ( (expr (expr a) + (expr b)) )) })" );
}
@Test
public void arithmeticSubExpressionTest()
{
String input = "form testForm {testQuestion: \"label\" money(a-b)}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form testForm { (question testQuestion : \"label\" (type money) ( (expr (expr a) - (expr b)) )) })" );
}
@Test
public void arithmeticMulExpressionTest()
{
String input = "form testForm {testQuestion: \"label\" money(a*b)}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form testForm { (question testQuestion : \"label\" (type money) ( (expr (expr a) * (expr b)) )) })" );
}
@Test
public void arithmeticDivExpressionTest()
{
String input = "form testForm {testQuestion: \"label\" money(a/b)}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form testForm { (question testQuestion : \"label\" (type money) ( (expr (expr a) / (expr b)) )) })" );
}
@Test
public void comparisonFormTest()
{
String input = "form Box1HouseOwning {if(1<=2){hasSoldHouse: \"Did you sell a house in 2010?\" boolean}}";
ParseTree tree = parserBuilder.buildParseTree( input );
assertEquals( tree.toStringTree( parserBuilder.getParser() ),
"(questionnaire form Box1HouseOwning { (question if ( (expr (expr 1) <= (expr 2)) ) { (question hasSoldHouse : \"Did you sell a house in 2010?\" (type boolean)) }) })" );
}
}