package org.richfaces.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import java.util.HashMap; import java.util.Map; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.inject.Inject; import org.ajax4jsf.javascript.JSLiteral; import org.jboss.test.faces.mockito.runner.FacesMockitoRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.Spy; import org.richfaces.application.ServicesFactory; import org.richfaces.focus.FocusManager; import org.richfaces.javascript.JavaScriptService; import org.richfaces.renderkit.focus.FocusRendererUtils; import org.richfaces.test.AbstractServicesTest; @RunWith(FacesMockitoRunner.class) public class TestFocusManagerImpl extends AbstractServicesTest { @Inject FacesContext facesContext; @Mock UIComponent viewRoot; @Mock UIComponent component; @Spy Map<Object, Object> attributes = new HashMap<Object, Object>(); @Mock JavaScriptService javaScriptService; @Before public void setUp() { when(facesContext.getAttributes()).thenReturn(attributes); viewRoot.pushComponentToEL(facesContext, viewRoot); } @Test public void test() { // having FocusManager focusManager = new FocusManagerImpl(); // when focusManager.focus(null); // then verify(attributes).put(FocusManager.FOCUS_CONTEXT_ATTRIBUTE, null); assertFalse(FocusRendererUtils.isFocusEnforced(facesContext)); verifyZeroInteractions(javaScriptService); } @Test public void test2() { // having FocusManager focusManager = new FocusManagerImpl(); String componentId = "someComponentId"; String clientId = "someClientId"; when(component.getClientId(facesContext)).thenReturn(clientId); when(viewRoot.findComponent(componentId)).thenReturn(component); // when focusManager.focus(componentId); // then // verify(attributes).put(FocusManager.FOCUS_CONTEXT_ATTRIBUTE, clientId); assertEquals(clientId, attributes.get(FocusManager.FOCUS_CONTEXT_ATTRIBUTE)); assertTrue(attributes.containsKey(FocusManager.FOCUS_CONTEXT_ATTRIBUTE)); assertTrue(FocusRendererUtils.isFocusEnforced(facesContext)); verify(javaScriptService).addPageReadyScript(Mockito.any(FacesContext.class), Mockito.any(JSLiteral.class)); } @Override protected void configureServices(ServicesFactory injector) { injector.setInstance(JavaScriptService.class, javaScriptService); } }