package com.vaadin.ui; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import org.easymock.Capture; import org.easymock.EasyMock; import org.easymock.EasyMockSupport; import org.junit.Before; import org.junit.Test; import com.vaadin.data.HasValue.ValueChange; import com.vaadin.data.HasValue.ValueChangeListener; import com.vaadin.server.ClientConnector; public class AbstractFieldTest extends EasyMockSupport { class TextField extends AbstractField { String value = ""; @Override public String getValue() { return value; } @Override protected void doSetValue(String value) { this.value = value; } } TextField field; ValueChangeListener l; Capture> capture; @Before public void setUp() { field = new TextField(); l = mockListener(); capture = new Capture<>(); } @Test public void readOnlyFieldAcceptsValueChangeFromServer() { field.setReadOnly(true); field.setValue("foo"); assertEquals("foo", field.getValue()); } @Test public void readOnlyFieldIgnoresValueChangeFromClient() { field.setReadOnly(true); field.setValue("bar", true); assertEquals("", field.getValue()); } @Test public void valueChangeListenerInvoked() { l.accept(EasyMock.capture(capture)); replayAll(); field.setValue("foo"); field.addValueChangeListener(l); field.setValue("bar"); assertEventEquals(capture.getValue(), "bar", field, false); verifyAll(); } @Test public void valueChangeListenerInvokedFromClient() { l.accept(EasyMock.capture(capture)); replayAll(); field.setValue("foo"); field.addValueChangeListener(l); field.setValue("bar", true); assertEventEquals(capture.getValue(), "bar", field, true); verifyAll(); } @Test public void valueChangeListenerNotInvokedIfValueUnchanged() { // expect zero invocations of l replayAll(); field.setValue("foo"); field.addValueChangeListener(l); field.setValue("foo"); verifyAll(); } @Test public void valueChangeListenerNotInvokedAfterRemove() { // expect zero invocations of l replayAll(); field.addValueChangeListener(l).remove(); field.setValue("foo"); verifyAll(); } @SuppressWarnings("unchecked") private ValueChangeListener mockListener() { return createStrictMock(ValueChangeListener.class); } private void assertEventEquals(ValueChange e, String value, ClientConnector source, boolean userOriginated) { assertEquals("event value", value, e.getValue()); assertSame("event source", source, e.getSource()); assertSame("event source connector", source, e.getConnector()); assertEquals("event from user", userOriginated, e.isUserOriginated()); } }