package nl.uva.softwcons.ql.validation; import static nl.uva.softwcons.helper.TestHelper.getCheckerErrors; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; import nl.uva.softwcons.ql.validation.dependency.CyclicDependencyChecker; import nl.uva.softwcons.ql.validation.dependency.error.CyclicQuestionsDependency; import org.junit.Test; public class CyclicDependencyCheckerTest { @Test public void validateNoInitialCyclicDependencyErrors() { final String question = "question: \"Label 1\" boolean"; final List<Error> validationErrors = getCheckerErrors(CyclicDependencyChecker::check, question); assertThat(validationErrors).isEmpty(); } @Test public void testCyclicQuestionDependencyError() { final String question1 = "question1: \"Label 1\" boolean(question1)"; final List<Error> validationErrors = getCheckerErrors(CyclicDependencyChecker::check, question1); assertThat(validationErrors).hasSize(1); assertThat(validationErrors).hasOnlyElementsOfType(CyclicQuestionsDependency.class); } @Test public void testCyclicQuestionDependencyInNestedExpression() { final String question1 = "question1: \"Label 1\" boolean(true != (false || x || question1))"; final List<Error> validationErrors = getCheckerErrors(CyclicDependencyChecker::check, question1); assertThat(validationErrors).hasSize(1); assertThat(validationErrors).hasOnlyElementsOfType(CyclicQuestionsDependency.class); } @Test public void testCyclicQuestionDependencyInConditional() { final String question1 = "if (true) { question1: \"Label 1\" boolean(question1) }"; final List<Error> validationErrors = getCheckerErrors(CyclicDependencyChecker::check, question1); assertThat(validationErrors).hasSize(1); assertThat(validationErrors).hasOnlyElementsOfType(CyclicQuestionsDependency.class); } @Test public void testReferenceToQuestionWithCyclicDependencyDoesNotProduceError() { final String question1 = "question1: \"Label 1\" boolean(question1)"; final String question2 = "question2: \"Label 2\" boolean(question1)"; final List<Error> validationErrors = getCheckerErrors(CyclicDependencyChecker::check, question1, question2); assertThat(validationErrors).hasSize(1); assertThat(validationErrors).hasOnlyElementsOfType(CyclicQuestionsDependency.class); } @Test public void testCyclicQuestionDependencyErrorFoundOnceForEachVariable() { final String question1 = "question1: \"Label 1\" boolean(question1 != (question1 && question1 || question1))"; final List<Error> validationErrors = getCheckerErrors(CyclicDependencyChecker::check, question1); assertThat(validationErrors).hasSize(1); assertThat(validationErrors).hasOnlyElementsOfType(CyclicQuestionsDependency.class); } @Test public void testMultipleCyclicQuestionDependencyErrors() { final String question1 = "question1: \"Label 1\" boolean(true != (false || x || question1))"; final String question2 = "question2: \"Label 1\" boolean(question2 != false)"; final String question3 = "question3: \"Label 1\" boolean(question3 != true)"; final List<Error> validationErrors = getCheckerErrors(CyclicDependencyChecker::check, question1, question2, question3); assertThat(validationErrors).hasSize(3); assertThat(validationErrors).hasOnlyElementsOfType(CyclicQuestionsDependency.class); } }