/** * License Agreement. * * Rich Faces - Natural Ajax for Java Server Faces (JSF) * * Copyright (C) 2007 Exadel, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1 as published by the Free Software Foundation. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package org.richfaces.renderkit.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.faces.component.UIComponent; import javax.faces.component.UIForm; import javax.faces.component.UIViewRoot; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.inject.Inject; import org.jboss.test.faces.mockito.runner.FacesMockitoRunner; import org.junit.Test; import org.junit.runner.RunWith; /** * @author Nick Belaevski * @since 3.3.2 */ @RunWith(FacesMockitoRunner.class) public class RendererUtilsTest { private RendererUtils utils = RendererUtils.getInstance(); @Inject private FacesContext facesContext; @Inject private ExternalContext externalContext; @Test public void testIsEmpty() throws Exception { assertTrue(utils.isEmpty(null)); assertFalse(utils.isEmpty(new Object())); assertFalse(utils.isEmpty(Boolean.FALSE)); assertFalse(utils.isEmpty(Long.valueOf(0))); assertFalse(utils.isEmpty(Integer.valueOf(0))); assertFalse(utils.isEmpty(Short.valueOf((short) 0))); assertFalse(utils.isEmpty(Byte.valueOf((byte) 0))); assertTrue(utils.isEmpty("")); assertFalse(utils.isEmpty("s")); assertTrue(utils.isEmpty(new ArrayList<Object>())); assertTrue(utils.isEmpty(Collections.EMPTY_LIST)); List<Object> testList = new ArrayList<Object>(); testList.add("x"); assertFalse(utils.isEmpty(testList)); assertTrue(utils.isEmpty(new HashMap<String, Object>())); assertTrue(utils.isEmpty(Collections.EMPTY_MAP)); Map<String, Object> testMap = new HashMap<String, Object>(); testMap.put("x", "y"); assertFalse(utils.isEmpty(testMap)); assertTrue(utils.isEmpty(new Object[0])); assertTrue(utils.isEmpty(new int[0])); assertFalse(utils.isEmpty(new Object[1])); assertFalse(utils.isEmpty(new int[1])); } @Test public void when_getNestingForm_provided_with_form_then_it_is_returned_as_result() { // given RendererUtils rendererUtils = RendererUtils.getInstance(); UIComponent form = mock(UIForm.class); // when UIComponent result = rendererUtils.getNestingForm(form); // then assertEquals(form, result); } @Test public void when_getNestingForm_is_provided_with_component_which_has_form_ancestor_then_it_is_returned() { // given UIComponent form = mock(UIForm.class); UIComponent component1 = mock(UIComponent.class); UIComponent component2 = mock(UIComponent.class); when(component1.getParent()).thenReturn(component2); when(component2.getParent()).thenReturn(form); // when UIComponent result = utils.getNestingForm(component1); // then assertEquals(form, result); } @Test public void when_getNestingForm_is_provided_with_component_which_hasnt_form_ancestor_then_null_is_returned() { // given UIComponent viewRoot = mock(UIViewRoot.class); UIComponent component1 = mock(UIComponent.class); UIComponent component2 = mock(UIComponent.class); when(component1.getParent()).thenReturn(component2); when(component2.getParent()).thenReturn(viewRoot); // when UIComponent result = utils.getNestingForm(component1); // then assertNull(result); } @Test public void when_getSubmittedForm_is_called_on_initial_request_then_null_is_returned() { // given initializeRequestParameterMap(new HashMap<String, String>() { }); when(facesContext.isPostback()).thenReturn(false); // when UIComponent result = utils.getSubmittedForm(facesContext); // then assertNull(result); } @Test public void when_getSubmittedForm_is_called_on_postback_and_no_matching_component_is_found_then_null_is_returned() { // given initializeRequestParameterMap(new HashMap<String, String>() { { put("same_but_no_clientId", "same_but_no_clientId"); } }); UIViewRoot viewRoot = mock(UIViewRoot.class); when(facesContext.getViewRoot()).thenReturn(viewRoot); when(viewRoot.getFacetsAndChildren()).thenReturn(Arrays.asList(new UIComponent[] {}).iterator()); when(facesContext.isPostback()).thenReturn(true); // when UIComponent result = utils.getSubmittedForm(facesContext); // then assertNull(result); } @Test public void when_getSubmittedForm_is_called_with_form_details_provided_then_form_is_returned() { // given initializeRequestParameterMap(new HashMap<String, String>() { { put("form", "form"); } }); UIForm form = mock(UIForm.class); UIViewRoot viewRoot = mock(UIViewRoot.class); when(facesContext.getViewRoot()).thenReturn(viewRoot); when(facesContext.getViewRoot().findComponent("form")).thenReturn(form); when(facesContext.isPostback()).thenReturn(true); // when UIComponent result = utils.getSubmittedForm(facesContext); // then assertEquals(form, result); } @Test public void when_getSubmittedForm_is_called_with_component_in_form_details_provided_then_form_is_returned() { // given initializeRequestParameterMap(new HashMap<String, String>() { { put("component", "component"); } }); UIForm form = mock(UIForm.class); UIComponent component = mock(UIComponent.class); UIViewRoot viewRoot = mock(UIViewRoot.class); when(facesContext.getViewRoot()).thenReturn(viewRoot); when(facesContext.getViewRoot().findComponent("component")).thenReturn(component); when(component.getParent()).thenReturn(form); when(facesContext.isPostback()).thenReturn(true); // when UIComponent result = utils.getSubmittedForm(facesContext); // then assertEquals(form, result); } @Test public void when_isFormSubbmited_is_called_with_form() { // given initializeRequestParameterMap(new HashMap<String, String>() { { put("form", "form"); } }); UIForm form = mock(UIForm.class); when(form.getClientId(facesContext)).thenReturn("form"); // when boolean result = utils.isFormSubmitted(facesContext, form); // then assertTrue(result); } @Test public void when_isFormSubbmited_is_called_with_form_which_does_not_have_request_parameter_equal_to_its_clientId_then_false_is_returned() { // given initializeRequestParameterMap(new HashMap<String, String>() { { put("form", ""); } }); UIForm form = mock(UIForm.class); when(form.getClientId(facesContext)).thenReturn("form"); // when boolean result = utils.isFormSubmitted(facesContext, form); // then assertFalse(result); } @Test public void when_isFormSubbmited_is_called_with_form_which_does_not_have_corresponding_request_parameter_then_false_is_returned() { // given initializeRequestParameterMap(new HashMap<String, String>() { }); UIForm form = mock(UIForm.class); when(form.getClientId(facesContext)).thenReturn("form"); // when boolean result = utils.isFormSubmitted(facesContext, form); // then assertFalse(result); } private void initializeRequestParameterMap(Map<String, String> map) { when(externalContext.getRequestParameterMap()).thenReturn(map); } }