package org.richfaces.javascript;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.junit.Assert.assertSame;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import org.jboss.test.faces.mock.Mock;
import org.jboss.test.faces.mock.MockTestRunner;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.richfaces.ValidatorTestBase;
import org.richfaces.component.UIScripts;
import com.google.common.collect.Lists;
@RunWith(MockTestRunner.class)
public class ServiceGetOrCreateResourceTest extends ValidatorTestBase {
@Mock
private UIViewRoot viewRoot;
private UIScripts scriptResource;
private JavaScriptServiceImpl serviceImpl;
@Before
public void setUpResource() {
serviceImpl = new JavaScriptServiceImpl();
scriptResource = new UIScripts();
}
@After
public void cleanUpResource() {
scriptResource = null;
}
/**
* <p class="changed_added_4_0">
* No resource exist in view, create a new one and store in "form" target.
* </p>
*/
@Test
public void testCreateValidatorScriptResource() {
FacesContext facesContext = recordResources(null, null);
expect(environment.getApplication().createComponent(UIScripts.COMPONENT_TYPE)).andReturn(scriptResource);
viewRoot.addComponentResource(facesContext, scriptResource);
expectLastCall();
verifyResult(facesContext);
}
private FacesContext recordResources(UIComponent formResource, UIComponent bodyResource) {
FacesContext facesContext = recordViewRoot();
recordViewResources("form", formResource);
if (null == formResource || null != bodyResource) {
recordViewResources("body", bodyResource);
}
return facesContext;
}
private void verifyResult(FacesContext facesContext) {
controller.replay();
assertSame(scriptResource, serviceImpl.getOrCreateScriptResource(facesContext));
controller.verify();
}
/**
* <p class="changed_added_4_0">
* Resource already exists in "form" target
* </p>
*/
@Test
public void testGetValidatorScriptResourceForm() {
FacesContext facesContext = recordResources(scriptResource, null);
verifyResult(facesContext);
}
/**
* <p class="changed_added_4_0">
* Resource already exists in "body" target
* </p>
*/
@Test
public void testGetValidatorScriptResourceBody() {
FacesContext facesContext = recordResources(null, scriptResource);
verifyResult(facesContext);
}
private void recordViewResources(String target, UIComponent resource) {
FacesContext facesContext = environment.getFacesContext();
List<UIComponent> resources = Lists.newArrayList();
if (null != resource) {
resources.add(resource);
}
expect(viewRoot.getComponentResources(facesContext, target)).andReturn(resources);
}
private FacesContext recordViewRoot() {
FacesContext facesContext = environment.getFacesContext();
expect(facesContext.getViewRoot()).andStubReturn(viewRoot);
return facesContext;
}
}