/**
* Copyright (C) 2014 BonitaSoft S.A.
* BonitaSoft, 31 rue Gustave Eiffel - 38000 Grenoble
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2.0 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.bonitasoft.forms.client.view.widget;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.util.Map;
import org.bonitasoft.forms.client.model.FormFieldValue;
import org.bonitasoft.forms.client.model.ReducedFormWidget;
import org.bonitasoft.forms.client.model.WidgetType;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwtmockito.GwtMockitoTestRunner;
/**
* @author Julien Reboul
*/
@RunWith(GwtMockitoTestRunner.class)
public class FormFieldWidgetTest {
protected FormFieldWidget formFieldWidget;
@Before
public void setUp() throws Exception {
final ReducedFormWidget reducedFormWidget = mock(ReducedFormWidget.class);
final Map contextMap = mock(Map.class);
final FormFieldValue formFieldValue = mock(FormFieldValue.class);
when(reducedFormWidget.getInitialFieldValue()).thenReturn(formFieldValue);
when(reducedFormWidget.getId()).thenReturn("id");
when(reducedFormWidget.getType()).thenReturn(WidgetType.TEXTBOX);
when(reducedFormWidget.getDisplayFormat()).thenReturn("displayFormat");
when(formFieldValue.getValueType()).thenReturn("valueType");
when(reducedFormWidget.getFieldOutputType()).thenReturn("fieldOutputValue");
formFieldWidget = new FormFieldWidget(reducedFormWidget, contextMap, "", "");
}
@Test
public void testAddValueChangeHandler_with_Null_should_Not_Break() throws Exception {
try {
formFieldWidget.addValueChangeHandler(null);
fail("NPe should have been raised");
} catch (final NullPointerException e) {
assertThat(e).hasMessage("the given ValueChangeHandler is not defined");
}
}
@Test
public void testAddValueChangeHandler_with_ValueChangeHandlerOnDifferentWidget_Should_Add_it() throws Exception {
final ValueChangeHandler valueChangeHandler = mock(ValueChangeHandler.class);
formFieldWidget.addValueChangeHandler(valueChangeHandler);
final ValueChangeEvent valueChangeEvent = mock(ValueChangeEvent.class);
formFieldWidget.onValueChange(valueChangeEvent);
verify(valueChangeHandler).onValueChange(valueChangeEvent);
}
@Test
public void testAddValueChangeHandler_with_Two_ValueChangeHandlerOnDifferentWidget_Should_Add_Them() throws Exception {
final ValueChangeHandler valueChangeHandler1 = mock(ValueChangeHandler.class);
formFieldWidget.addValueChangeHandler(valueChangeHandler1);
final ValueChangeHandler valueChangeHandler2 = mock(ValueChangeHandler.class);
formFieldWidget.addValueChangeHandler(valueChangeHandler2);
final ValueChangeEvent valueChangeEvent = mock(ValueChangeEvent.class);
formFieldWidget.onValueChange(valueChangeEvent);
verify(valueChangeHandler1).onValueChange(valueChangeEvent);
verify(valueChangeHandler2).onValueChange(valueChangeEvent);
}
@Test
public void testAddValueChangeHandler_with_Several_Times_SameValueChangeHandlerOnWidget_Should_Add_Them_Once() throws Exception {
final ValueChangeHandler valueChangeHandler1 = mock(ValueChangeHandler.class);
formFieldWidget.addValueChangeHandler(valueChangeHandler1);
formFieldWidget.addValueChangeHandler(valueChangeHandler1);
formFieldWidget.addValueChangeHandler(valueChangeHandler1);
formFieldWidget.addValueChangeHandler(valueChangeHandler1);
formFieldWidget.addValueChangeHandler(valueChangeHandler1);
final ValueChangeEvent valueChangeEvent = mock(ValueChangeEvent.class);
formFieldWidget.onValueChange(valueChangeEvent);
verify(valueChangeHandler1).onValueChange(valueChangeEvent);
}
}