package com.vaadin.v7.tests.server.component.abstractfield; import static org.junit.Assert.assertEquals; import org.junit.Test; import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinSession; import com.vaadin.tests.util.AlwaysLockedVaadinSession; import com.vaadin.ui.UI; import com.vaadin.v7.data.Property; import com.vaadin.v7.data.util.AbstractProperty; import com.vaadin.v7.data.util.converter.Converter.ConversionException; import com.vaadin.v7.ui.AbstractField; public class RemoveListenersOnDetachTest { int numValueChanges = 0; int numReadOnlyChanges = 0; AbstractField field = new AbstractField() { final private VaadinSession application = new AlwaysLockedVaadinSession( null); private UI uI = new UI() { @Override protected void init(VaadinRequest request) { } @Override public VaadinSession getSession() { return application; } }; @Override public Class<?> getType() { return String.class; } @Override public void valueChange(Property.ValueChangeEvent event) { super.valueChange(event); numValueChanges++; } @Override public void readOnlyStatusChange( Property.ReadOnlyStatusChangeEvent event) { super.readOnlyStatusChange(event); numReadOnlyChanges++; } @Override public com.vaadin.ui.UI getUI() { return uI; } @Override public VaadinSession getSession() { return application; } }; Property<String> property = new AbstractProperty<String>() { @Override public String getValue() { return null; } @Override public void setValue(String newValue) throws ReadOnlyException, ConversionException { fireValueChange(); } @Override public Class<String> getType() { return String.class; } }; @Test public void testAttachDetach() { field.setPropertyDataSource(property); property.setValue(null); property.setReadOnly(true); assertEquals(1, numValueChanges); assertEquals(1, numReadOnlyChanges); field.attach(); property.setValue(null); property.setReadOnly(false); assertEquals(2, numValueChanges); assertEquals(2, numReadOnlyChanges); field.detach(); property.setValue(null); property.setReadOnly(true); assertEquals(2, numValueChanges); assertEquals(2, numReadOnlyChanges); } }