package org.vaadin.smartgwt.server.form.fields; import static org.junit.Assert.*; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.vaadin.smartgwt.server.form.DynamicForm; import org.vaadin.smartgwt.server.form.fields.events.FormItemClickHandler; import org.vaadin.smartgwt.server.form.fields.events.FormItemIconClickEvent; import com.google.common.collect.Maps; import com.google.web.bindery.event.shared.HandlerRegistration; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.gwt.server.JsonPaintTarget; public class FormItemIconTest { private FormItemIcon formItemIcon; @Before public void before() { formItemIcon = new FormItemIcon(); } @Test public void test_canAddFormItemIconClickHandler() { final FormItemClickHandler handler = mock(FormItemClickHandler.class); formItemIcon.addFormItemClickHandler(handler); assertTrue(formItemIcon.getFormItemClickHandlers().contains(handler)); } @Test public void test_canRemoveFormItemClickHandlerWithHandlerRegistration() { final FormItemClickHandler handler = mock(FormItemClickHandler.class); final HandlerRegistration registration = formItemIcon.addFormItemClickHandler(handler); registration.removeHandler(); assertFalse(formItemIcon.getFormItemClickHandlers().contains(handler)); } @Test public void test_paintHasFormItemClickHandlersAttributeWhenHandlersAreRegistered() throws PaintException { formItemIcon.addFormItemClickHandler(mock(FormItemClickHandler.class)); final PaintTarget paintTarget = mock(JsonPaintTarget.class); formItemIcon.paintContent(paintTarget); verify(paintTarget).addAttribute("*hasFormItemClickHandlers", true); } @Test public void test_dontPaintHasFormItemClickHandlersAttributeWhenNoHandlerRegistered() throws PaintException { final PaintTarget paintTarget = mock(JsonPaintTarget.class); formItemIcon.paintContent(paintTarget); verify(paintTarget, never()).addAttribute(eq("*hasFormItemClickHandlers"), anyBoolean()); } @Test public void test_firesEventFromChangedVariables() { final FormItemClickHandler handler = mock(FormItemClickHandler.class); formItemIcon.addFormItemClickHandler(handler); final Map<String, Object> variables = Maps.newHashMap(); variables.put("formItemIconClickEvent.form", mock(DynamicForm.class)); variables.put("formItemIconClickEvent.item", mock(FormItem.class)); variables.put("formItemIconClickEvent.icon", mock(FormItemIcon.class)); formItemIcon.changeVariables(null, variables); final ArgumentCaptor<FormItemIconClickEvent> captor = ArgumentCaptor.forClass(FormItemIconClickEvent.class); verify(handler).onFormItemClick(captor.capture()); assertEquals(variables.get("formItemIconClickEvent.form"), captor.getValue().getForm()); assertEquals(variables.get("formItemIconClickEvent.item"), captor.getValue().getItem()); assertEquals(variables.get("formItemIconClickEvent.icon"), captor.getValue().getIcon()); } @Test public void test_noEventFiredWhenNoEventInChangedVariable() { final FormItemClickHandler handler = mock(FormItemClickHandler.class); formItemIcon.addFormItemClickHandler(handler); final Map<String, Object> variables = Maps.newHashMap(); variables.put("something", 1); formItemIcon.changeVariables(null, variables); verify(handler, never()).onFormItemClick(any(FormItemIconClickEvent.class)); } }