package ro.isdc.wro.http;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import java.util.Collection;
import java.util.Properties;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import ro.isdc.wro.config.Context;
import ro.isdc.wro.extensions.processor.js.RhinoCoffeeScriptProcessor;
import ro.isdc.wro.manager.WroManager;
import ro.isdc.wro.manager.factory.WroManagerFactory;
import ro.isdc.wro.model.resource.processor.ResourcePostProcessor;
import ro.isdc.wro.model.resource.processor.factory.ConfigurableProcessorsFactory;
import ro.isdc.wro.model.resource.processor.factory.ProcessorsFactory;
/**
* Proves that the code responsible for populating configurableWroManagerFactory with extensions processors does its job
* correctly (using reflection) when extension module is available.
*
* @author Simon van der Sluis
* @created Created on May 14, 2012
*/
public class TestConfigurableWroFilterWithExtensions {
@Mock
private HttpServletRequest mockRequest;
@Mock
private HttpServletResponse mockResponse;
@Mock
private FilterConfig mockFilterConfig;
@Mock
private ServletContext mockServletContext;
@Mock
private ServletOutputStream mockServletOutputStream;
@BeforeClass
public static void onBeforeClass() {
assertEquals(0, Context.countActive());
}
@AfterClass
public static void onAfterClass() {
assertEquals(0, Context.countActive());
}
@Before
public void setUp()
throws Exception {
MockitoAnnotations.initMocks(this);
when(mockRequest.getRequestURI()).thenReturn("/some.js");
when(mockResponse.getOutputStream()).thenReturn(mockServletOutputStream);
when(mockFilterConfig.getServletContext()).thenReturn(mockServletContext);
Context.set(Context.webContext(mockRequest, mockResponse, mockFilterConfig));
}
@After
public void tearDown() {
Context.unset();
}
@Test
public void extensionProcessorsShouldBeAvailable()
throws Exception {
final ConfigurableWroFilter filter = new ConfigurableWroFilter();
final Properties properties = new Properties();
properties.setProperty(ConfigurableProcessorsFactory.PARAM_POST_PROCESSORS, RhinoCoffeeScriptProcessor.ALIAS);
filter.setProperties(properties);
filter.init(mockFilterConfig);
final WroManagerFactory factory = filter.newWroManagerFactory();
final WroManager wroManager = factory.create();
final ProcessorsFactory processorsFactory = wroManager.getProcessorsFactory();
final Collection<ResourcePostProcessor> postProcessors = processorsFactory.getPostProcessors();
assertEquals(1, postProcessors.size());
}
}