package com.vaadin.v7.tests.server.component.textfield; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Collections; import org.junit.Before; import org.junit.Test; import com.vaadin.v7.data.Property; import com.vaadin.v7.data.Property.ValueChangeEvent; import com.vaadin.v7.data.Property.ValueChangeListener; import com.vaadin.v7.data.util.ObjectProperty; import com.vaadin.v7.data.util.PropertyFormatter; import com.vaadin.v7.ui.TextField; public class TextFieldWithPropertyFormatterTest { private static final String INPUT_VALUE = "foo"; private static final String PARSED_VALUE = "BAR"; private static final String FORMATTED_VALUE = "FOOBAR"; private static final String ORIGINAL_VALUE = "Original"; private TextField field; private PropertyFormatter<String> formatter; private ObjectProperty<String> property; private ValueChangeListener listener; private int listenerCalled; private int repainted; @Before public void setUp() { field = new TextField() { @Override public void markAsDirty() { repainted++; super.markAsDirty(); } }; formatter = new PropertyFormatter<String>() { @Override public String parse(String formattedValue) throws Exception { assertEquals(INPUT_VALUE, formattedValue); return PARSED_VALUE; } @Override public String format(String value) { return FORMATTED_VALUE; } }; property = new ObjectProperty<String>(ORIGINAL_VALUE); formatter.setPropertyDataSource(property); field.setPropertyDataSource(formatter); listener = new Property.ValueChangeListener() { @Override public void valueChange(ValueChangeEvent event) { listenerCalled++; assertEquals(1, listenerCalled); assertEquals(FORMATTED_VALUE, event.getProperty().getValue()); } }; field.addListener(listener); listenerCalled = 0; repainted = 0; } @Test public void testWithServerApi() { checkInitialState(); field.setValue(INPUT_VALUE); checkEndState(); } private void checkEndState() { assertEquals(1, listenerCalled); assertTrue(repainted >= 1); assertEquals(FORMATTED_VALUE, field.getValue()); assertEquals(FORMATTED_VALUE, formatter.getValue()); assertEquals(PARSED_VALUE, property.getValue()); } private void checkInitialState() { assertEquals(ORIGINAL_VALUE, property.getValue()); assertEquals(FORMATTED_VALUE, formatter.getValue()); assertEquals(FORMATTED_VALUE, field.getValue()); } @Test public void testWithSimulatedClientSideChange() { checkInitialState(); field.changeVariables(null, Collections.singletonMap("text", (Object) INPUT_VALUE)); checkEndState(); } }