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.label.LabelChecker;
import nl.uva.softwcons.ql.validation.label.error.DuplicateLabel;
import org.junit.Test;
public class LabelCheckerTest {
@Test
public void validateNoInitialErrors() {
final String question = "question: \"Label 1\" boolean";
final List<Error> validationErrors = getCheckerErrors(LabelChecker::check, question);
assertThat(validationErrors).isEmpty();
}
@Test
public void testDuplicateLabelsWarnings() {
final String question1 = "question1: \"Label 1\" boolean";
final String question2 = "question2: \"Label 1\" boolean";
final List<Error> validationErrors = getCheckerErrors(LabelChecker::check, question1, question2);
assertThat(validationErrors).hasSize(1);
assertThat(validationErrors).hasOnlyElementsOfType(DuplicateLabel.class);
}
@Test
public void testDuplicateLabelsProducesWarnings() {
final String question1 = "question1: \"Label 1\" boolean";
final String question2 = "question2: \"Label 1\" boolean";
final List<Error> validationErrors = getCheckerErrors(LabelChecker::check, question1, question2);
assertThat(validationErrors.get(0).isFatal()).isFalse();
}
@Test
public void testDuplicateLabelsNotSuccessive() {
final String question1 = "question: \"Label 1\" boolean";
final String question2 = "question2: \"Label 2\" boolean";
final String question3 = "question3: \"Label 1\" boolean";
final List<Error> validationErrors = getCheckerErrors(LabelChecker::check, question1, question2, question3);
assertThat(validationErrors).hasSize(1);
assertThat(validationErrors).hasOnlyElementsOfType(DuplicateLabel.class);
}
@Test
public void testDuplicateLabelsWithConditional() {
final String question = "question1: \"Label\" boolean";
final String ifStatement = " if (true) { question2: \"Label\" boolean }";
final List<Error> validationErrors = getCheckerErrors(LabelChecker::check, question, ifStatement);
assertThat(validationErrors).hasSize(1);
assertThat(validationErrors).hasOnlyElementsOfType(DuplicateLabel.class);
}
@Test
public void testMultipleDuplicateLabelsWithConditional() {
final String question1 = "question1: \"Label 1\" boolean";
final String question2 = "question2: \"Label 1\" boolean";
final String ifStatement = " if (true) { question3: \"Label 1\" boolean }";
final List<Error> validationErrors = getCheckerErrors(LabelChecker::check, question1, question2, ifStatement);
assertThat(validationErrors).hasSize(2);
assertThat(validationErrors).hasOnlyElementsOfType(DuplicateLabel.class);
}
@Test
public void testDifferentDuplicateLabels() {
final String question1 = "question1: \"test\" boolean";
final String question2 = "question2: \"go\" boolean";
final String question3 = "question3: \"test\" boolean";
final String question4 = "question4: \"go\" boolean";
final List<Error> validationErrors = getCheckerErrors(LabelChecker::check, question1, question2, question3,
question4);
assertThat(validationErrors).hasSize(2);
assertThat(validationErrors).hasOnlyElementsOfType(DuplicateLabel.class);
}
}