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.

TransactionalPropertyWrapperTest.java 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package com.vaadin.v7.data.util;
  2. import static org.junit.Assert.assertTrue;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import org.junit.Test;
  6. import com.vaadin.v7.data.fieldgroup.FieldGroup;
  7. import com.vaadin.v7.ui.TextField;
  8. /**
  9. * Test verifying that TransactionalPropertyWrapper removes it's listener from
  10. * wrapped Property
  11. *
  12. * @since 7.1.15
  13. * @author Vaadin Ltd
  14. */
  15. public class TransactionalPropertyWrapperTest {
  16. @SuppressWarnings("serial")
  17. public class TestingProperty<T extends Object>
  18. extends ObjectProperty<Object> {
  19. private List<ValueChangeListener> listeners = new ArrayList<ValueChangeListener>();
  20. public TestingProperty(Object value) {
  21. super(value);
  22. }
  23. @Override
  24. public void addValueChangeListener(ValueChangeListener listener) {
  25. super.addValueChangeListener(listener);
  26. listeners.add(listener);
  27. }
  28. @Override
  29. public void removeValueChangeListener(ValueChangeListener listener) {
  30. super.removeValueChangeListener(listener);
  31. if (listeners.contains(listener)) {
  32. listeners.remove(listener);
  33. }
  34. }
  35. public boolean hasListeners() {
  36. return !listeners.isEmpty();
  37. }
  38. }
  39. private final TextField nameField = new TextField("Name");
  40. private final TextField ageField = new TextField("Age");
  41. private final TextField unboundField = new TextField("No FieldGroup");
  42. private final TestingProperty<String> unboundProp = new TestingProperty<String>(
  43. "Hello World");
  44. private final PropertysetItem item = new PropertysetItem();
  45. @Test
  46. public void fieldGroupBindAndUnbind() {
  47. item.addItemProperty("name",
  48. new TestingProperty<String>("Just some text"));
  49. item.addItemProperty("age", new TestingProperty<String>("42"));
  50. final FieldGroup binder = new FieldGroup(item);
  51. binder.setBuffered(false);
  52. for (int i = 0; i < 2; ++i) {
  53. binder.bind(nameField, "name");
  54. binder.bind(ageField, "age");
  55. unboundField.setPropertyDataSource(unboundProp);
  56. assertTrue("No listeners in Properties", fieldsHaveListeners(true));
  57. binder.unbind(nameField);
  58. binder.unbind(ageField);
  59. unboundField.setPropertyDataSource(null);
  60. assertTrue("Listeners in Properties after unbinding",
  61. fieldsHaveListeners(false));
  62. }
  63. }
  64. /**
  65. * Check that all listeners have same hasListeners() response
  66. *
  67. * @param expected
  68. * expected response
  69. * @return true if all are the same as expected. false if not
  70. */
  71. private boolean fieldsHaveListeners(boolean expected) {
  72. for (Object id : item.getItemPropertyIds()) {
  73. TestingProperty<?> itemProperty = (TestingProperty<?>) item
  74. .getItemProperty(id);
  75. if (itemProperty.hasListeners() != expected) {
  76. return false;
  77. }
  78. }
  79. return unboundProp.hasListeners() == expected;
  80. }
  81. }