You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EmptyFieldErrorIndicators.java 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package com.vaadin.tests.validation;
  2. import java.util.Date;
  3. import com.vaadin.data.Validator.InvalidValueException;
  4. import com.vaadin.tests.components.TestBase;
  5. import com.vaadin.tests.util.AlwaysFailValidator;
  6. import com.vaadin.ui.Button;
  7. import com.vaadin.ui.Button.ClickEvent;
  8. import com.vaadin.ui.Button.ClickListener;
  9. import com.vaadin.ui.ComponentContainer;
  10. import com.vaadin.ui.DateField;
  11. import com.vaadin.ui.Field;
  12. import com.vaadin.ui.Form;
  13. import com.vaadin.ui.HorizontalLayout;
  14. import com.vaadin.ui.NativeSelect;
  15. import com.vaadin.ui.OptionGroup;
  16. import com.vaadin.ui.Panel;
  17. import com.vaadin.ui.Select;
  18. import com.vaadin.ui.TextField;
  19. import com.vaadin.ui.VerticalLayout;
  20. import com.vaadin.ui.themes.Reindeer;
  21. public class EmptyFieldErrorIndicators extends TestBase {
  22. @Override
  23. protected void setup() {
  24. getLayout().setSizeFull();
  25. HorizontalLayout hl = new HorizontalLayout();
  26. hl.setSizeFull();
  27. hl.setSpacing(true);
  28. ComponentContainer part1 = createPart(
  29. "Empty required fields validation", true, false);
  30. part1.setDebugId("emptyFieldPart");
  31. hl.addComponent(part1);
  32. ComponentContainer part2 = createPart(
  33. "Empty required fields with failing validator", true, true);
  34. part1.setDebugId("validatedFieldPart");
  35. hl.addComponent(part2);
  36. Panel panel = new Panel();
  37. panel.setSizeFull();
  38. panel.setStyleName(Reindeer.PANEL_LIGHT);
  39. panel.addComponent(hl);
  40. addComponent(panel);
  41. }
  42. private ComponentContainer createPart(String caption, boolean required,
  43. boolean failValidator) {
  44. VerticalLayout part = new VerticalLayout();
  45. part.setMargin(true);
  46. final Form form = createForm(required, failValidator);
  47. part.addComponent(form);
  48. Button validate = new Button("Validate fields");
  49. validate.addListener(new ClickListener() {
  50. public void buttonClick(ClickEvent event) {
  51. try {
  52. form.validate();
  53. } catch (InvalidValueException e) {
  54. }
  55. }
  56. });
  57. part.addComponent(validate);
  58. Panel panel = new Panel(caption, part);
  59. panel.setHeight("100%");
  60. return panel;
  61. }
  62. private Form createForm(final boolean required, final boolean failValidator) {
  63. // hand-crafted form, not using form field factory
  64. final Form form = new Form() {
  65. @Override
  66. public void addField(Object propertyId, Field<?> field) {
  67. super.addField(propertyId, field);
  68. field.setRequired(required);
  69. field.setRequiredError("Missing required value!");
  70. if (failValidator && !(field instanceof Button)) {
  71. field.addValidator(new AlwaysFailValidator());
  72. }
  73. }
  74. };
  75. form.addField("Field", new TextField("Text"));
  76. form.addField("Date", new DateField("Date"));
  77. // not good for automated testing with screenshots when null
  78. // form.addField("Inline Date", new InlineDateField("Date"));
  79. // same as basic DateField
  80. // form.addField("Popup Date", new PopupDateField("Date"));
  81. Button setDateButton = new Button("Set date");
  82. form.getLayout().addComponent(setDateButton);
  83. // form.addField("Set Date", setDateButton);
  84. setDateButton.addListener(new ClickListener() {
  85. public void buttonClick(ClickEvent event) {
  86. form.getField("Date").setValue(new Date(0));
  87. }
  88. });
  89. NativeSelect nativeSelect = new NativeSelect("NativeSelect");
  90. form.addField("Native Select", nativeSelect);
  91. nativeSelect.addItem("Value 1");
  92. // in #4103, the Select component was behaving differently from others
  93. form.addField("Select", new Select("Select"));
  94. Select select2 = new Select("Select 2");
  95. select2.addItem("Value 1");
  96. form.addField("Select 2", select2);
  97. OptionGroup optionGroup = new OptionGroup("OptionGroup");
  98. optionGroup.setMultiSelect(false);
  99. optionGroup.addItem("Option 1");
  100. optionGroup.addItem("Option 2");
  101. form.addField("Option Group 1", optionGroup);
  102. OptionGroup optionGroup2 = new OptionGroup("OptionGroup");
  103. optionGroup2.setMultiSelect(true);
  104. optionGroup2.addItem("Option 1");
  105. optionGroup2.addItem("Option 2");
  106. form.addField("Option Group 2", optionGroup2);
  107. // TODO could add more different fields
  108. return form;
  109. }
  110. @Override
  111. protected String getDescription() {
  112. return "Fields on a form should not show the error indicator if required and empty";
  113. }
  114. @Override
  115. protected Integer getTicketNumber() {
  116. return 4013;
  117. }
  118. }