package nl.uva.sc.encoders.qls.validation; import static nl.uva.sc.encoders.ql.ast.QuestionnaireBuilder.aQuestionnaire; import static nl.uva.sc.encoders.ql.ast.TextLocationBuilder.aTextLocation; import static nl.uva.sc.encoders.qls.ast.StylesheetBuilder.aStylesheet; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import nl.uva.sc.encoders.ql.ast.Questionnaire; import nl.uva.sc.encoders.ql.validation.TypeValidation; import nl.uva.sc.encoders.ql.validation.ValidationMessage; import nl.uva.sc.encoders.qls.ast.Page; import nl.uva.sc.encoders.qls.ast.PageBuilder; import nl.uva.sc.encoders.qls.ast.Question; import nl.uva.sc.encoders.qls.ast.Section; import nl.uva.sc.encoders.qls.ast.SectionBuilder; import nl.uva.sc.encoders.qls.ast.Stylesheet; import org.junit.Test; public class TypeCheckerTest { @Test public void testCheckTypes_referencedQuestionDoesNotExistInQLIsInvalid() { String questionLabel = "thisQuestionDoesNotExistInQL"; Questionnaire questionnaire = aQuestionnaire().build(); List<Page> pages = new ArrayList<>(); List<Section> sections = new ArrayList<>(); Question question = new Question(aTextLocation().build(), questionLabel, null); List<Question> questionNames = Arrays.asList(question); sections.add(SectionBuilder.aSection().withQuestions(questionNames).build()); pages.add(PageBuilder.aPage().withSections(sections).build()); Stylesheet stylesheet = aStylesheet().withPages(pages).build(); TypeChecker typeChecker = new TypeChecker(stylesheet, questionnaire); List<TypeValidation> validations = typeChecker.checkTypes(); assertThat(validations.toString(), validations.size(), is(1)); ValidationMessage validationMessage = validations.get(0); assertThat(validationMessage.getValidationMessage(), is("Question 'thisQuestionDoesNotExistInQL' does not exist in questionnaire")); } }