package nl.uva.softwcons.qls.validation; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; import nl.uva.softwcons.helper.TestHelper; import nl.uva.softwcons.ql.FormBuilder; import nl.uva.softwcons.ql.ast.form.Form; import nl.uva.softwcons.ql.validation.Error; import nl.uva.softwcons.qls.StylesheetBuilder; import nl.uva.softwcons.qls.ast.stylesheet.Stylesheet; import nl.uva.softwcons.qls.validation.widget.WidgetTypeChecker; import nl.uva.softwcons.qls.validation.widget.error.IncompatibleWidget; import org.junit.Test; public class WidgetTypeCheckerTest { @Test public void testPageStyleInconsistency() { List<Error> errors = getWidgetTypeErrors("page page1 { question q1 default boolean widget slider (10, 20, 1)} "); assertThat(errors).hasSize(1); assertThat(errors.get(0)).isExactlyInstanceOf(IncompatibleWidget.class); } @Test public void testPageStyleConsistent() { List<Error> errors = getWidgetTypeErrors("page page1 { question q1 " + "default boolean widget dropdown (\"Yes\", \"No\")} "); assertThat(errors).hasSize(0); } @Test public void testPageManyStylesInconsistency() { List<Error> errors = getWidgetTypeErrors("page page1 { question q1 " + "default boolean widget radio (\"Yes\", \"No\") \n default string widget radio (\"Yes\", \"No\")} "); assertThat(errors).hasSize(1); assertThat(errors.get(0)).isExactlyInstanceOf(IncompatibleWidget.class); } @Test public void testPageManyStylesConsistent() { List<Error> errors = getWidgetTypeErrors("page page1 { question q1 " + "default boolean widget dropdown (\"Yes\", \"No\") \n default string widget text} "); assertThat(errors).hasSize(0); } @Test public void testSectionStyleConsistent() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q1 " + "default boolean widget dropdown (\"Yes\", \"No\")} }"); assertThat(errors).hasSize(0); } @Test public void testSectionStyleInconsistency() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q1 " + "default boolean widget slider (1, 10, 1)} } "); assertThat(errors).hasSize(1); assertThat(errors.get(0)).isExactlyInstanceOf(IncompatibleWidget.class); } @Test public void testSectionManyStylesInconsistency() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q1 " + "default string widget radio (\"Yes\", \"No\") \n " + "default string widget radio (\"Yes\", \"No\")} } "); assertThat(errors).hasSize(1); assertThat(errors).hasOnlyElementsOfType(IncompatibleWidget.class); } @Test public void testSectionManyStylesConsistent() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q1 " + "default boolean widget dropdown (\"Yes\", \"No\") \n " + "default string widget text \n default date widget text } } "); assertThat(errors).hasSize(0); } @Test public void testPageSectionStyle() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q1 " + "default boolean widget dropdown (\"Yes\", \"No\") \n " + "default string widget text \n default date widget text } default string widget text } "); assertThat(errors).hasSize(0); } @Test public void testStylesheetWithoutStyles() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q1 } } "); assertThat(errors).hasSize(0); } @Test public void testQuestionWithCorrectWidget() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q1 widget radio (\"Yes\", \"No\") } } "); assertThat(errors).hasSize(0); } @Test public void testBooleanQuestionWithInCorrectWidget() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q1 widget text } } "); assertThat(errors).hasSize(1); assertThat(errors).hasOnlyElementsOfType(IncompatibleWidget.class); } @Test public void testStringQuestionWithInCorrectWidget() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q2 widget radio (\"Yes\", \"No\") } } "); assertThat(errors).hasSize(1); assertThat(errors).hasOnlyElementsOfType(IncompatibleWidget.class); } @Test public void testDateQuestionWithInCorrectWidget() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q4 widget radio (\"Yes\", \"No\") } } "); assertThat(errors).hasSize(1); assertThat(errors).hasOnlyElementsOfType(IncompatibleWidget.class); } @Test public void testNumberQuestionWithInCorrectWidget() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q3 widget radio (\"Yes\", \"No\") } } "); assertThat(errors).hasSize(1); assertThat(errors).hasOnlyElementsOfType(IncompatibleWidget.class); } @Test public void testNumberQuestionWithCorrectWidgetSlider() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q3 widget slider (10, 20, 1) } } "); assertThat(errors).hasSize(0); } @Test public void testNumberQuestionWithCorrectWidgetSpinbox() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q3 widget slider (10, 20, 1)} } "); assertThat(errors).hasSize(0); } @Test public void testNumberQuestionWithCorrectWidgetText() { List<Error> errors = getWidgetTypeErrors("page page1 { section \"section\" { question q3 widget text } } "); assertThat(errors).hasSize(0); } private static Form getForm() { final String question1 = "q1: \"Label 1\" boolean"; final String question2 = "q2: \"Label 2\" string"; final String question3 = "q3: \"Label 2\" number"; final String question4 = "q4: \"Label 2\" date"; return FormBuilder.build(TestHelper.buildForm("form1", question1, question2, question3, question4)); } private static List<Error> getWidgetTypeErrors(final String... stylesheetContents) { final Stylesheet stylesheet = StylesheetBuilder.build(TestHelper.buildStylesheet("stylesheet1", stylesheetContents)); return WidgetTypeChecker.check(stylesheet, getForm()); } }