Projects >> wro4j >>563a2bfc3b7ebdc05ba3dfa390d2fb01379788dc

Chunk
Conflicting content
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

<<<<<<< HEAD:wro4j-core/src/main/java/ro/isdc/wro/model/resource/locator/support/ClasspathResourceLocator.java
import ro.isdc.wro.model.resource.locator.ResourceLocator;
=======
import ro.isdc.wro.model.resource.locator.support.LocatorProvider;
import ro.isdc.wro.model.resource.locator.wildcard.DefaultWildcardStreamLocator;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8:wro4j-core/src/main/java/ro/isdc/wro/model/resource/locator/ClasspathUriLocator.java
import ro.isdc.wro.model.resource.locator.wildcard.JarWildcardStreamLocator;
import ro.isdc.wro.model.resource.locator.wildcard.WildcardStreamLocator;
import ro.isdc.wro.model.transformer.WildcardExpanderModelTransformer.NoMoreAttemptsIOException;
Solution content
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.wildcard.DefaultWildcardStreamLocator;
import ro.isdc.wro.model.resource.locator.wildcard.JarWildcardStreamLocator;
import ro.isdc.wro.model.resource.locator.wildcard.WildcardStreamLocator;
import ro.isdc.wro.model.transformer.WildcardExpanderModelTransformer.NoMoreAttemptsIOException;
File
ClasspathResourceLocator.java
Developer's decision
Combination
Kind of conflict
Import
Chunk
Conflicting content
    notNull(path);
    return PREFIX + path;
  }
<<<<<<< HEAD:wro4j-core/src/main/java/ro/isdc/wro/model/resource/locator/support/ClasspathResourceLocator.java
=======

>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8:wro4j-core/src/main/java/ro/isdc/wro/model/resource/locator/ClasspathUriLocator.java
  /**
   * Classpath location. This value is expected to be prefixed with "classpath:" value.
   */
Solution content
    notNull(path);
    return PREFIX + path;
  }

  /**
   * Classpath location. This value is expected to be prefixed with "classpath:" value.
   */
File
ClasspathResourceLocator.java
Developer's decision
Version 1
Kind of conflict
Blank
Chunk
Conflicting content
  }

  /**
<<<<<<< HEAD:wro4j-core/src/main/java/ro/isdc/wro/model/resource/locator/support/ClasspathResourceLocator.java
   * {@inheritDoc}
=======
   * Check if a uri is a classpath resource.
   *
   * @param uri
   *          to check.
   * @return true if the uri is a classpath resource.
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8:wro4j-core/src/main/java/ro/isdc/wro/model/resource/locator/ClasspathUriLocator.java
   */
  @Override
  public long lastModified() {
Solution content
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public long lastModified() {
File
ClasspathResourceLocator.java
Developer's decision
Version 1
Kind of conflict
Comment
Chunk
Conflicting content
    if (getWildcardStreamLocator().hasWildcard(location)) {
   */
  public InputStream getInputStream()
      throws IOException {
<<<<<<< HEAD:wro4j-core/src/main/java/ro/isdc/wro/model/resource/locator/support/ClasspathResourceLocator.java
    LOG.debug("Reading uri: {}", path);

    if (getWildcardStreamLocator().hasWildcard(location)) {
      return locateWildcardStream(path, location);
=======
    Validate.notNull(uri, "URI cannot be NULL!");
    // replace prefix & clean path by removing '..' characters if exists and
    // normalizing the location to use.
    String location = StringUtils.cleanPath(uri.replaceFirst(PREFIX, "")).trim();

      try {
        return locateWildcardStream(uri, location);
    final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(location);
    if (is == null) {
      } catch (final IOException e) {
        if (location.contains("?")) {
          location = DefaultWildcardStreamLocator.stripQueryPath(location);
          LOG.debug("Trying fallback location: {}", location);
        }
      }
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8:wro4j-core/src/main/java/ro/isdc/wro/model/resource/locator/ClasspathUriLocator.java
    }
Solution content
   */
  public InputStream getInputStream()
      throws IOException {
    LOG.debug("Reading uri: {}", path);

    if (getWildcardStreamLocator().hasWildcard(location)) {
      try {
        return locateWildcardStream(uri, location);
      } catch (final IOException e) {
        if (location.contains("?")) {
          location = DefaultWildcardStreamLocator.stripQueryPath(location);
          LOG.debug("Trying fallback location: {}", location);
        }
      }
    }
    final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(location);
    if (is == null) {
File
ClasspathResourceLocator.java
Developer's decision
Combination
Kind of conflict
Comment
If statement
Method invocation
Return statement
Try statement
Variable
Chunk
Conflicting content
    return is;
  }

<<<<<<< HEAD:wro4j-core/src/main/java/ro/isdc/wro/model/resource/locator/support/ClasspathResourceLocator.java

=======
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8:wro4j-core/src/main/java/ro/isdc/wro/model/resource/locator/ClasspathUriLocator.java
  /**
   * @return an input stream for an uri containing a wildcard for a given location.
   */
Solution content
    return is;
  }

  /**
   * @return an input stream for an uri containing a wildcard for a given location.
   */
File
ClasspathResourceLocator.java
Developer's decision
Version 1
Kind of conflict
Blank
Chunk
Conflicting content
  @Mock
  private MBeanServer mockMBeanServer;
  @Mock
<<<<<<< HEAD
  private ResourceLocator mockLocator;

=======
  private UriLocator mockUriLocator;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Before
  public void setUp()
      throws Exception {
Solution content
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  @Mock
  private MBeanServer mockMBeanServer;
  @Mock
  private ResourceLocator mockLocator;
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp()
      throws Exception {
File
TestWroFilter.java
Developer's decision
Combination
Kind of conflict
Annotation
Attribute
Method declaration
Chunk
Conflicting content
      throws Exception {
    Context.set(Context.standaloneContext());
    MockitoAnnotations.initMocks(this);
<<<<<<< HEAD

    when(mockLocatorFactory.getLocator(Mockito.anyString())).thenReturn(mockLocator);
    when(mockLocatorFactory.locate(Mockito.anyString())).thenReturn(WroUtil.EMPTY_STREAM);
    when(mockLocator.getInputStream()).thenReturn(WroUtil.EMPTY_STREAM);

=======
    
    when(mockUriLocatorFactory.getInstance(Mockito.anyString())).thenReturn(mockUriLocator);
    when(mockUriLocator.locate(Mockito.anyString())).thenReturn(WroUtil.EMPTY_STREAM);
    when(mockUriLocatorFactory.locate(Mockito.anyString())).thenReturn(WroUtil.EMPTY_STREAM);
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    when(mockRequest.getAttribute(Mockito.anyString())).thenReturn(null);
    when(mockManagerFactory.create()).thenReturn(new BaseWroManagerFactory().create());
    when(mockFilterConfig.getServletContext()).thenReturn(mockServletContext);
Solution content
      throws Exception {
    Context.set(Context.standaloneContext());
    MockitoAnnotations.initMocks(this);
    
    when(mockLocatorFactory.getLocator(Mockito.anyString())).thenReturn(mockLocator);
    when(mockLocatorFactory.locate(Mockito.anyString())).thenReturn(WroUtil.EMPTY_STREAM);
    when(mockLocator.getInputStream()).thenReturn(WroUtil.EMPTY_STREAM);
    
    when(mockRequest.getAttribute(Mockito.anyString())).thenReturn(null);
    when(mockManagerFactory.create()).thenReturn(new BaseWroManagerFactory().create());
    when(mockFilterConfig.getServletContext()).thenReturn(mockServletContext);
File
TestWroFilter.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
  @Mock
  private ResourceLocatorFactory mockLocatorFactory;
  @Mock
<<<<<<< HEAD
  private ResourceLocator mockLocator;

=======
  private UriLocator mockUriLocator;
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  private OutputStream outputStream;
  
  private ServletOutputStream servletOutputStream;
Solution content
  @Mock
  private ResourceLocatorFactory mockLocatorFactory;
  @Mock
  private ResourceLocator mockLocator;
  
  private OutputStream outputStream;
  
  private ServletOutputStream servletOutputStream;
File
TestResourceProxyRequestHandler.java
Developer's decision
Version 1
Kind of conflict
Attribute
Chunk
Conflicting content
    Mockito.when(filterConfig.getServletContext()).thenReturn(servletContext);
    Context.set(Context.webContext(request, response, filterConfig));
    // a more elaborate way to build injector, used to instruct it use a different instance of authorizationManager
<<<<<<< HEAD
    final Injector injector = new InjectorBuilder(
        new BaseWroManagerFactory().setLocatorFactory(mockLocatorFactory).setResourceAuthorizationManager(
        mockAuthorizationManager)).build();
    injector.inject(victim);

    when(mockLocatorFactory.getLocator(anyString())).thenReturn(mockLocator);
    when(mockLocatorFactory.locate(anyString())).thenAnswer(new Answer() {
=======
    final Injector injector = new InjectorBuilder(new BaseWroManagerFactory().setUriLocatorFactory(
        mockUriLocatorFactory).setResourceAuthorizationManager(mockAuthorizationManager)).build();
    injector.inject(victim);
    
    when(mockUriLocatorFactory.getInstance(anyString())).thenReturn(mockUriLocator);
    when(mockUriLocatorFactory.locate(anyString())).then(new Answer() {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
      public InputStream answer(final InvocationOnMock invocation)
          throws Throwable {
        return mockLocator.getInputStream();
Solution content
    Mockito.when(filterConfig.getServletContext()).thenReturn(servletContext);
    Context.set(Context.webContext(request, response, filterConfig));
    // a more elaborate way to build injector, used to instruct it use a different instance of authorizationManager
    final Injector injector = new InjectorBuilder(
        new BaseWroManagerFactory().setLocatorFactory(mockLocatorFactory).setResourceAuthorizationManager(
        mockAuthorizationManager)).build();
    injector.inject(victim);
    
    when(mockLocatorFactory.getLocator(anyString())).thenReturn(mockLocator);
    when(mockLocatorFactory.locate(anyString())).thenAnswer(new Answer() {
      public InputStream answer(final InvocationOnMock invocation)
          throws Throwable {
        return mockLocator.getInputStream();
File
TestResourceProxyRequestHandler.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
        return mockLocator.getInputStream();
      }
    });
<<<<<<< HEAD
    when(mockLocator.getInputStream()).thenReturn(WroUtil.EMPTY_STREAM);

=======
    when(mockUriLocator.locate(anyString())).thenReturn(WroUtil.EMPTY_STREAM);
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    packagePath = WroUtil.toPackageAsFolder(this.getClass());
    
    // Setup response writer
Solution content
        return mockLocator.getInputStream();
      }
    });
    when(mockLocator.getInputStream()).thenReturn(WroUtil.EMPTY_STREAM);
    
    packagePath = WroUtil.toPackageAsFolder(this.getClass());
    
    // Setup response writer
File
TestResourceProxyRequestHandler.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
    final String resourceUri = "classpath:" + packagePath + "/" + "test.css";
    when(mockAuthorizationManager.isAuthorized(resourceUri)).thenReturn(true);
    when(request.getParameter(ResourceProxyRequestHandler.PARAM_RESOURCE_ID)).thenReturn(resourceUri);
<<<<<<< HEAD
    when(mockLocator.getInputStream()).thenReturn(new ClasspathResourceLocator(resourceUri).getInputStream());

=======
    when(mockUriLocator.locate(anyString())).thenReturn(new ClasspathUriLocator().locate(resourceUri));
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    victim.handle(request, response);
    
    final String body = outputStream.toString();
Solution content
    final String resourceUri = "classpath:" + packagePath + "/" + "test.css";
    when(mockAuthorizationManager.isAuthorized(resourceUri)).thenReturn(true);
    when(request.getParameter(ResourceProxyRequestHandler.PARAM_RESOURCE_ID)).thenReturn(resourceUri);
    when(mockLocator.getInputStream()).thenReturn(new ClasspathResourceLocator(resourceUri).getInputStream());
    
    victim.handle(request, response);
    
    final String body = outputStream.toString();
File
TestResourceProxyRequestHandler.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
    final String resourceUri = "classpath:" + packagePath + "/" + "test.css";
    when(mockAuthorizationManager.isAuthorized(resourceUri)).thenReturn(false);
    when(request.getParameter(ResourceProxyRequestHandler.PARAM_RESOURCE_ID)).thenReturn(resourceUri);
<<<<<<< HEAD
    when(mockLocator.getInputStream()).thenReturn(new ClasspathResourceLocator(resourceUri).getInputStream());

=======
    when(mockUriLocator.locate(anyString())).thenReturn(new ClasspathUriLocator().locate(resourceUri));
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    victim.handle(request, response);
  }
  
Solution content
    final String resourceUri = "classpath:" + packagePath + "/" + "test.css";
    when(mockAuthorizationManager.isAuthorized(resourceUri)).thenReturn(false);
    when(request.getParameter(ResourceProxyRequestHandler.PARAM_RESOURCE_ID)).thenReturn(resourceUri);
    when(mockLocator.getInputStream()).thenReturn(new ClasspathResourceLocator(resourceUri).getInputStream());
    
    victim.handle(request, response);
  }
  
File
TestResourceProxyRequestHandler.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
  }
  
    victim.handle(request, response);
    final String body = outputStream.toString();
    final String expectedBody = IOUtils.toString(getInputStream("test.css"));
<<<<<<< HEAD

    verify(mockLocator, times(1)).getInputStream();
=======
    
    verify(mockUriLocator, times(1)).locate(resourceUri);
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    assertEquals(expectedBody, body);
Solution content
    victim.handle(request, response);
    final String body = outputStream.toString();
    final String expectedBody = IOUtils.toString(getInputStream("test.css"));
    
    verify(mockLocator, times(1)).getInputStream();
    assertEquals(expectedBody, body);
  }
  
File
TestResourceProxyRequestHandler.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
    final String resourceUri = "classpath:" + packagePath + "/" + "test.css";
    when(mockAuthorizationManager.isAuthorized(resourceUri)).thenReturn(true);
    when(request.getParameter(ResourceProxyRequestHandler.PARAM_RESOURCE_ID)).thenReturn(resourceUri);
<<<<<<< HEAD
    when(mockLocator.getInputStream()).thenReturn(new ClasspathResourceLocator(resourceUri).getInputStream());

=======
    when(mockUriLocator.locate(anyString())).thenReturn(new ClasspathUriLocator().locate(resourceUri));
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    victim.handle(request, response);
    final int expectedLength = IOUtils.toString(getInputStream("test.css")).length();
    
Solution content
    final String resourceUri = "classpath:" + packagePath + "/" + "test.css";
    when(mockAuthorizationManager.isAuthorized(resourceUri)).thenReturn(true);
    when(request.getParameter(ResourceProxyRequestHandler.PARAM_RESOURCE_ID)).thenReturn(resourceUri);
    when(mockLocator.getInputStream()).thenReturn(new ClasspathResourceLocator(resourceUri).getInputStream());
    
    victim.handle(request, response);
    final int expectedLength = IOUtils.toString(getInputStream("test.css")).length();
    
File
TestResourceProxyRequestHandler.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
  }
  
  @Test
<<<<<<< HEAD
  public void shouldDoNothingWhenNoProcessorProvided() throws Exception {
    doFilterWithProcessors(Collections.emptyList());
=======
  public void shouldDoNothingWhenNoProcessorProvided()
      throws Exception {
    doFilterWithProcessors(Collections. emptyList());
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    Assert.assertEquals(0, outputStream.size());
  }
  
Solution content
    doFilterWithProcessors(Collections.emptyList());
    Assert.assertEquals(0, outputStream.size());
  }
  
  }
  
  @Test
  public void shouldDoNothingWhenNoProcessorProvided() throws Exception {
File
TestAbstractProcessorsFilter.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Method signature
Chunk
Conflicting content
    });
    doFilterWithProcessors(processors);
  }
<<<<<<< HEAD

  private void doFilterWithProcessors(final List processors)
=======
  
  private void doFilterWithProcessors(final List processors)
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
      throws Exception {
    victim = new AbstractProcessorsFilter() {
      @Override
Solution content
  
    });
    doFilterWithProcessors(processors);
  }
  private void doFilterWithProcessors(final List processors)
      throws Exception {
    victim = new AbstractProcessorsFilter() {
      @Override
File
TestAbstractProcessorsFilter.java
Developer's decision
Version 1
Kind of conflict
Method signature
Chunk
Conflicting content
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

<<<<<<< HEAD
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;
=======
import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.locator.ClasspathUriLocator;
import ro.isdc.wro.model.resource.locator.UriLocator;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8

/**
 * @author Alex Objelean
Solution content
import ro.isdc.wro.config.Context;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;

/**
 * @author Alex Objelean
File
TestRedirectedStreamServletResponseWrapper.java
Developer's decision
Combination
Kind of conflict
Import
Chunk
Conflicting content
   * resource is the pre processed resource of this processor.
   */
  private static final class WroManagerProcessor
<<<<<<< HEAD
    implements ResourceProcessor {
=======
      implements ResourcePreProcessor {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    
    private BaseWroManagerFactory createManagerFactory(final Resource resource) {
      return new BaseWroManagerFactory() {
Solution content
   * resource is the pre processed resource of this processor.
   */
  private static final class WroManagerProcessor
    implements ResourceProcessor {
    
    private BaseWroManagerFactory createManagerFactory(final Resource resource) {
      return new BaseWroManagerFactory() {
File
TestWroManager.java
Developer's decision
Version 1
Kind of conflict
Other
Chunk
Conflicting content
    createManager();
    
    assertEquals(1, uriLocatorFactory.getConfiguredStrategies().size());
<<<<<<< HEAD
    assertSame(ServletContextResourceLocatorFactory.class,
        uriLocatorFactory.getConfiguredStrategies().iterator().next().getClass());
=======
    assertSame(ServletContextUriLocator.class, uriLocatorFactory.getConfiguredStrategies().iterator().next().getClass());
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  }
  
  @Test
Solution content
    createManager();
    
    assertEquals(1, uriLocatorFactory.getConfiguredStrategies().size());
    assertSame(ServletContextResourceLocatorFactory.class,
        uriLocatorFactory.getConfiguredStrategies().iterator().next().getClass());
  }
  
  @Test
File
TestConfigurableWroManagerFactory.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
  public void testProcessorsExecutionOrder() {
    createManager();
    
<<<<<<< HEAD
=======
    configureValidUriLocators(mockFilterConfig);
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_PRE_PROCESSORS)).thenReturn(
        AbstractConfigurableMultipleStrategy.createItemsAsString(JSMinProcessor.ALIAS, CssImportPreProcessor.ALIAS,
            CssVariablesProcessor.ALIAS));
Solution content
  public void testProcessorsExecutionOrder() {
    createManager();
    
    configureValidUriLocators(mockFilterConfig);
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_PRE_PROCESSORS)).thenReturn(
        AbstractConfigurableMultipleStrategy.createItemsAsString(JSMinProcessor.ALIAS, CssImportPreProcessor.ALIAS,
            CssVariablesProcessor.ALIAS));
File
TestConfigurableWroManagerFactory.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
  public void testWithEmptyPreProcessors() {
    createManager();
    
<<<<<<< HEAD
=======
    configureValidUriLocators(mockFilterConfig);
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_PRE_PROCESSORS)).thenReturn("");
    assertTrue(processorsFactory.getPreProcessors().isEmpty());
  }
Solution content
  public void testWithEmptyPreProcessors() {
    createManager();
    
    configureValidUriLocators(mockFilterConfig);
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_PRE_PROCESSORS)).thenReturn("");
    assertTrue(processorsFactory.getPreProcessors().isEmpty());
  }
File
TestConfigurableWroManagerFactory.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
  @Test(expected = WroRuntimeException.class)
  
  public void cannotUseInvalidPreProcessorsSet() {
<<<<<<< HEAD
    
=======
    createManager();
    
    configureValidUriLocators(mockFilterConfig);
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_PRE_PROCESSORS)).thenReturn(
        "INVALID1,INVALID2");
    
Solution content
  
  @Test(expected = WroRuntimeException.class)
  public void cannotUseInvalidPreProcessorsSet() {
    createManager();
    
    configureValidUriLocators(mockFilterConfig);
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_PRE_PROCESSORS)).thenReturn(
        "INVALID1,INVALID2");
File
TestConfigurableWroManagerFactory.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
  public void testWhenValidPreProcessorsSet() {
    createManager();
    
<<<<<<< HEAD
=======
    configureValidUriLocators(mockFilterConfig);
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_PRE_PROCESSORS)).thenReturn(
        "cssUrlRewriting");
    assertEquals(1, processorsFactory.getPreProcessors().size());
Solution content
  public void testWhenValidPreProcessorsSet() {
    createManager();
    
    configureValidUriLocators(mockFilterConfig);
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_PRE_PROCESSORS)).thenReturn(
        "cssUrlRewriting");
    assertEquals(1, processorsFactory.getPreProcessors().size());
File
TestConfigurableWroManagerFactory.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
  public void testWithEmptyPostProcessors() {
    createManager();
    
<<<<<<< HEAD
=======
    configureValidUriLocators(mockFilterConfig);
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_POST_PROCESSORS)).thenReturn("");
    assertTrue(processorsFactory.getPostProcessors().isEmpty());
  }
Solution content
  public void testWithEmptyPostProcessors() {
    createManager();
    
    configureValidUriLocators(mockFilterConfig);
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_POST_PROCESSORS)).thenReturn("");
    assertTrue(processorsFactory.getPostProcessors().isEmpty());
  }
File
TestConfigurableWroManagerFactory.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
  public void cannotUseInvalidPostProcessorsSet() {
    createManager();
    
<<<<<<< HEAD
=======
    configureValidUriLocators(mockFilterConfig);
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_POST_PROCESSORS)).thenReturn(
        "INVALID1,INVALID2");
    processorsFactory.getPostProcessors();
Solution content
  public void cannotUseInvalidPostProcessorsSet() {
    createManager();
    
    configureValidUriLocators(mockFilterConfig);
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_POST_PROCESSORS)).thenReturn(
        "INVALID1,INVALID2");
    processorsFactory.getPostProcessors();
File
TestConfigurableWroManagerFactory.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
  public void testWhenValidPostProcessorsSet() {
    createManager();
    
<<<<<<< HEAD
=======
    configureValidUriLocators(mockFilterConfig);
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_POST_PROCESSORS)).thenReturn(
        "cssMinJawr, jsMin, cssVariables");
    assertEquals(3, processorsFactory.getPostProcessors().size());
Solution content
  public void testWhenValidPostProcessorsSet() {
    createManager();
    
    configureValidUriLocators(mockFilterConfig);
    Mockito.when(mockFilterConfig.getInitParameter(ConfigurableProcessorsFactory.PARAM_POST_PROCESSORS)).thenReturn(
        "cssMinJawr, jsMin, cssVariables");
    assertEquals(3, processorsFactory.getPostProcessors().size());
File
TestConfigurableWroManagerFactory.java
Developer's decision
Version 2
Kind of conflict
Method invocation
Chunk
Conflicting content
    
    createManager();
    
<<<<<<< HEAD
    Collection list = processorsFactory.getPreProcessors();
=======
    final Collection list = processorsFactory.getPreProcessors();
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    assertEquals(1, list.size());
    assertEquals(CssMinProcessor.class, list.iterator().next().getClass());
  }
Solution content
    createManager();
    
    Collection list = processorsFactory.getPreProcessors();
    assertEquals(1, list.size());
    assertEquals(CssMinProcessor.class, list.iterator().next().getClass());
  }
File
TestConfigurableWroManagerFactory.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
    createManager();
    
    assertEquals(2, processorsFactory.getPostProcessors().size());
<<<<<<< HEAD
    assertEquals(JSMinProcessor.class, processorsFactory.getPostProcessors().iterator().next().getClass());
=======
    assertEquals(JSMinProcessor.class,
        ((ProcessorDecorator) processorsFactory.getPostProcessors().iterator().next()).getDecoratedObject().getClass());
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  }
  
  @Test(expected = WroRuntimeException.class)
Solution content
    createManager();
    
    assertEquals(2, processorsFactory.getPostProcessors().size());
    assertEquals(JSMinProcessor.class, processorsFactory.getPostProcessors().iterator().next().getClass());
  }
  
  @Test(expected = WroRuntimeException.class)
File
TestConfigurableWroManagerFactory.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
package ro.isdc.wro.model.factory;

<<<<<<< HEAD
=======
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.io.InputStream;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Solution content
import java.util.List;
package ro.isdc.wro.model.factory;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.Collections;
File
TestDefaultWroModelFactory.java
Developer's decision
Combination
Kind of conflict
Import
Chunk
Conflicting content
  /**
   * Used to simulate that a resource stream used to build the model is not available.
   */
<<<<<<< HEAD
  private boolean isModelAvailable;

=======
  private boolean flag = false;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Before
  public void setUp() {
    isModelAvailable = true;
Solution content
  /**
   * Used to simulate that a resource stream used to build the model is not available.
   */
  private boolean isModelAvailable;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  @Before
  public void setUp() {
    isModelAvailable = true;
File
TestFallbackAwareWroModelFactory.java
Developer's decision
Combination
Kind of conflict
Annotation
Attribute
Method declaration
Chunk
Conflicting content
    Context.set(Context.standaloneContext());
    final ResourceLocator locator = new UrlResourceLocator(TestFallbackAwareWroModelFactory.class.getResource("wro.xml")) {
      @Override
<<<<<<< HEAD
      public InputStream getInputStream() throws IOException {
        if (isModelAvailable) {
          return super.getInputStream();
=======
      protected InputStream getModelResourceAsStream()
          throws IOException {
        flag = !flag;
        if (flag) {
          return TestXmlModelFactory.class.getResourceAsStream("wro.xml");
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
        }
        isModelAvailable = !isModelAvailable;
        return null;
Solution content
    Context.set(Context.standaloneContext());
    final ResourceLocator locator = new UrlResourceLocator(TestFallbackAwareWroModelFactory.class.getResource("wro.xml")) {
      @Override
      public InputStream getInputStream() throws IOException {
        if (isModelAvailable) {
          return super.getInputStream();
        }
        isModelAvailable = !isModelAvailable;
        return null;
File
TestFallbackAwareWroModelFactory.java
Developer's decision
Version 1
Kind of conflict
Attribute
If statement
Method invocation
Method signature
Return statement
Chunk
Conflicting content
    });
    xmlModelFactory = new XmlModelFactory() {
      @Override
<<<<<<< HEAD
      protected ResourceLocator getModelResourceLocator() {
        return locator;
      }
    };
  }

=======
      protected InputStream getModelResourceAsStream()
          throws IOException {
        if (flag) {
          return super.getModelResourceAsStream();
        }
        flag = !flag;
        return null;
      }
    };
  }
  
  @After
  public void tearDown() {
    Context.unset();
    fallbackAwareModelFactory.destroy();
    xmlModelFactory.destroy();
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Test
  public void testLastValidIsOK() {
    Assert.assertNotNull(fallbackAwareModelFactory.create());
Solution content
    });
    xmlModelFactory = new XmlModelFactory() {
      @Override
      protected ResourceLocator getModelResourceLocator() {
        return locator;
      }
    };
  }

  @Test
  public void testLastValidIsOK() {
    Assert.assertNotNull(fallbackAwareModelFactory.create());
File
TestFallbackAwareWroModelFactory.java
Developer's decision
Version 1
Kind of conflict
Annotation
Method declaration
Chunk
Conflicting content
    fallbackAwareModelFactory.destroy();
    Assert.assertNotNull(fallbackAwareModelFactory.create());
  }
<<<<<<< HEAD

=======
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Test(expected = WroRuntimeException.class)
  public void testWithoutLastValidThrowsException() {
    isModelAvailable = false;
Solution content
    fallbackAwareModelFactory.destroy();
    Assert.assertNotNull(fallbackAwareModelFactory.create());
  }

  @Test(expected = WroRuntimeException.class)
  public void testWithoutLastValidThrowsException() {
    isModelAvailable = false;
File
TestFallbackAwareWroModelFactory.java
Developer's decision
Version 1
Kind of conflict
Blank
Chunk
Conflicting content
    
    final WroModel changedModel = transformer.transform(model);
    LOG.debug("model: {}", changedModel);
<<<<<<< HEAD

    final String resultPathPrefix = String.format("%s%s/expander/subfolder", ClasspathResourceLocator.PREFIX, WroUtil.toPackageAsFolder(getClass()));

=======
    
    final String resultPathPrefix = String.format("%s%s/expander/subfolder", ClasspathUriLocator.PREFIX,
        WroUtil.toPackageAsFolder(getClass()));
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    Assert.assertEquals(2, changedModel.getGroupByName("group").getResources().size());
    Assert.assertEquals(resultPathPrefix + "/folder1/script1.js",
        changedModel.getGroupByName("group").getResources().get(0).getUri());
Solution content
    
    final WroModel changedModel = transformer.transform(model);
    LOG.debug("model: {}", changedModel);
    
    final String resultPathPrefix = String.format("%s%s/expander/subfolder", ClasspathResourceLocator.PREFIX, WroUtil.toPackageAsFolder(getClass()));
    
    Assert.assertEquals(2, changedModel.getGroupByName("group").getResources().size());
    Assert.assertEquals(resultPathPrefix + "/folder1/script1.js",
        changedModel.getGroupByName("group").getResources().get(0).getUri());
File
TestWildcardExpanderModelTransformer.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
    factory.create();
  }
      }
    };
  public void recursiveGroupThrowsException() {
    factory = new XmlModelFactory() {
      @Override
<<<<<<< HEAD
      protected ResourceLocator getModelResourceLocator() {
        return new UrlResourceLocator(Thread.currentThread().getContextClassLoader().getResource("recursive.xml"));
      };
		};
		factory.create();
	}

=======
      protected InputStream getModelResourceAsStream() {
        return Thread.currentThread().getContextClassLoader().getResourceAsStream("recursive.xml");
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Test
  public void testWithUpdatePeriodSet() {
    Context.get().getConfig().setCacheUpdatePeriod(1);
Solution content
  public void recursiveGroupThrowsException() {
    factory = new XmlModelFactory() {
      @Override
      protected ResourceLocator getModelResourceLocator() {
        return new UrlResourceLocator(Thread.currentThread().getContextClassLoader().getResource("recursive.xml"));
      };
		};
		factory.create();
	}
  
  @Test
  public void testWithUpdatePeriodSet() {
    Context.get().getConfig().setCacheUpdatePeriod(1);
File
TestXmlModelFactory.java
Developer's decision
Version 1
Kind of conflict
Method declaration
Method invocation
Chunk
Conflicting content
    // will create an empty model
    assertEquals(new WroModel(), factory.create());
  }
<<<<<<< HEAD

  /**
   * When a wildcard uri is used to import wro.xml, the resulted xml to parse won't be valid, because it will contain
   * merged content.
   */
=======
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Test(expected = SAXParseException.class)
  public void testWildcardImports() throws Throwable {
    try {
Solution content
    // will create an empty model
    assertEquals(new WroModel(), factory.create());
  }
  
  /**
   * When a wildcard uri is used to import wro.xml, the resulted xml to parse won't be valid, because it will contain
   * merged content.
   */
  @Test(expected = SAXParseException.class)
  public void testWildcardImports() throws Throwable {
    try {
File
TestXmlModelFactory.java
Developer's decision
Version 1
Kind of conflict
Comment
Chunk
Conflicting content
/**

<<<<<<< HEAD
/**
 * Copyright Alex Objelean
 */
package ro.isdc.wro.model.group;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;

import org.junit.Assert;
import org.junit.Test;

import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.util.WroTestUtils;

 * Test class for {@link Group}.
 *
 * @author Alex Objelean
 */
public class TestGroup {
  @Test(expected = NullPointerException.class)
  public void cannotCreateGroupWithNullName() {
    new Group(null);
  }

  @Test
  public void shouldReturnSameGroupWhenGroupHasNoResources() {
    final Group group = new Group("group");
    
    Group newGroup = group.collectResourcesOfType(ResourceType.CSS);
    Assert.assertEquals(group, newGroup);
    
    newGroup = group.collectResourcesOfType(ResourceType.JS);
    Assert.assertEquals(group, newGroup);
  }
  
  @Test
  public void shouldCollectSearchedResources() {
    final Group group = new Group("group");
    group.addResource(Resource.create("1", ResourceType.CSS));
    group.addResource(Resource.create("2", ResourceType.JS));
    group.addResource(Resource.create("3", ResourceType.JS));
    
    Group newGroup = group.collectResourcesOfType(ResourceType.CSS);
    Assert.assertEquals(1, newGroup.getResources().size());
    
    newGroup = group.collectResourcesOfType(ResourceType.JS);
    Assert.assertEquals(2, newGroup.getResources().size());
  }
  
  @Test(expected = NullPointerException.class)
  public void cannotPassNullResourceType() {
    final Group group = new Group("group");
    group.hasResourcesOfType(null);
  }

  @Test
  public void testNoResorucesOfTypeFound() {
    final Group group = new Group("group");
    Assert.assertEquals(false, group.hasResourcesOfType(ResourceType.CSS));
    Assert.assertEquals(false, group.hasResourcesOfType(ResourceType.JS));
  }

  @Test
  public void testResoruceOfTypeFound() {
    final Group group = new Group("group");
    final List resources = new ArrayList();
    resources.add(Resource.create("/some.css", ResourceType.CSS));
    group.setResources(resources);
    Assert.assertEquals(true, group.hasResourcesOfType(ResourceType.CSS));
    Assert.assertEquals(false, group.hasResourcesOfType(ResourceType.JS));
  }

  @Test(expected = IllegalArgumentException.class)
  public void cannotReplaceMissingResource() {
    final Group group = new Group("group");
    group.replace(Resource.create("/path", ResourceType.JS), Arrays.asList(Resource.create("", ResourceType.JS)));
  }

  @SuppressWarnings("unchecked")
  @Test
  public void testReplaceWithEmptyCollection() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/path", ResourceType.JS);
    group.addResource(resource);
    group.replace(resource, Collections.EMPTY_LIST);
    Assert.assertTrue(group.getResources().isEmpty());
  }

  @Test
  public void testReplaceWithFewResources() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/static/*", ResourceType.JS);
    resource.setMinimize(false);
    group.addResource(resource);
    group.replace(
        resource,
        Arrays.asList(Resource.create("/static/one.js", ResourceType.JS),
            Resource.create("/static/two.js", ResourceType.JS)));
    Assert.assertEquals(2, group.getResources().size());
    Assert.assertEquals(resource.isMinimize(), group.getResources().get(0).isMinimize());
  }

  @Test
  public void shouldReplaceAResourceWithSameResource() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/path.js");
    group.addResource(resource);

    final List resourceList = new ArrayList();
    resourceList.add(resource);

    group.replace(resource, resourceList);
    Assert.assertFalse(group.getResources().isEmpty());
  }

  @Test
  public void shouldReplaceOnlyOneAndPreserveOtherResources() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/static/*", ResourceType.JS);

    final Resource r0 = Resource.create("/asset/1.js", ResourceType.JS);
    group.addResource(r0);

    final Resource r1 = Resource.create("/asset/2.js", ResourceType.JS);
    group.addResource(r1);

    group.addResource(resource);
    group.replace(
        resource,
        Arrays.asList(Resource.create("/static/one.js", ResourceType.JS),
            Resource.create("/static/two.js", ResourceType.JS)));
    Assert.assertEquals(4, group.getResources().size());
    Assert.assertEquals(r0, group.getResources().get(0));
    Assert.assertEquals(r1, group.getResources().get(1));
  }

  @Test(expected = NullPointerException.class)
  public void cannotCollectResourcesWithNullType() {
    final Group group = new Group("group");
    group.collectResourcesOfType(null);
  }

  @Test
  public void shouldCollectCorrectNumberOfResourcesByType() {
    final Group group = new Group("group");
    group.addResource(Resource.create("1.js"));
    group.addResource(Resource.create("2.js"));
    group.addResource(Resource.create("3.js"));
    group.addResource(Resource.create("4.js"));
    group.addResource(Resource.create("5.js"));
    group.addResource(Resource.create("6.js"));
    group.addResource(Resource.create("1.css"));

    Assert.assertEquals(6, group.collectResourcesOfType(ResourceType.JS).getResources().size());
    Assert.assertEquals(1, group.collectResourcesOfType(ResourceType.CSS).getResources().size());
  }

  @Test
  public void shouldBeThreadSafeWhenMutated()
      throws Exception {
    final Group group = new Group("group");
    final List resources = new ArrayList();
    final Resource r1 = Resource.create("/some.css", ResourceType.CSS);
    resources.add(r1);

    WroTestUtils.runConcurrently(new Callable() {
      public Void call()
          throws Exception {
        if (new Random().nextBoolean()) {
          group.setResources(resources);
        } else {
          group.addResource(r1);
          group.replace(r1, resources);
        }
        return null;
      }
    });
  }
}
=======
/**
 * Copyright Alex Objelean
 */
package ro.isdc.wro.model.group;

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.util.WroTestUtils;


/**
 * Test class for {@link Group}.
 *
 * @author Alex Objelean
 */
public class TestGroup {
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Test(expected = NullPointerException.class)
  public void cannotCreateGroupWithNullName() {
    new Group(null);
  }

  @Test(expected = NullPointerException.class)
  public void cannotPassNullResourceType() {
    final Group group = new Group("group");
    group.hasResourcesOfType(null);
  }

  @Test
  public void testNoResorucesOfTypeFound() {
    final Group group = new Group("group");
    Assert.assertEquals(false, group.hasResourcesOfType(ResourceType.CSS));
    Assert.assertEquals(false, group.hasResourcesOfType(ResourceType.JS));
  }

  @Test
  public void testResoruceOfTypeFound() {
    final Group group = new Group("group");
    final List resources = new ArrayList();
    resources.add(Resource.create("/some.css", ResourceType.CSS));
    group.setResources(resources);
    Assert.assertEquals(true, group.hasResourcesOfType(ResourceType.CSS));
    Assert.assertEquals(false, group.hasResourcesOfType(ResourceType.JS));
  }

  @Test(expected = IllegalArgumentException.class)
  public void cannotReplaceMissingResource() {
    final Group group = new Group("group");
    group.replace(Resource.create("/path", ResourceType.JS), Arrays.asList(Resource.create("", ResourceType.JS)));
  }

  @SuppressWarnings("unchecked")
  @Test
  public void testReplaceWithEmptyCollection() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/path", ResourceType.JS);
    group.addResource(resource);
    group.replace(resource, Collections.EMPTY_LIST);
    Assert.assertTrue(group.getResources().isEmpty());
  }

  @Test
  public void testReplaceWithFewResources() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/static/*", ResourceType.JS);
    resource.setMinimize(false);
    group.addResource(resource);
    group.replace(
        resource,
        Arrays.asList(Resource.create("/static/one.js", ResourceType.JS),
            Resource.create("/static/two.js", ResourceType.JS)));
    Assert.assertEquals(2, group.getResources().size());
    Assert.assertEquals(resource.isMinimize(), group.getResources().get(0).isMinimize());
  }

  @Test
  public void shouldReplaceAResourceWithSameResource() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/path.js");
    group.addResource(resource);

    final List resourceList = new ArrayList();
    resourceList.add(resource);

    group.replace(resource, resourceList);
    Assert.assertFalse(group.getResources().isEmpty());
  }

  @Test
  public void shouldReplaceOnlyOneAndPreserveOtherResources() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/static/*", ResourceType.JS);

    final Resource r0 = Resource.create("/asset/1.js", ResourceType.JS);
    group.addResource(r0);

    final Resource r1 = Resource.create("/asset/2.js", ResourceType.JS);
    group.addResource(r1);

    group.addResource(resource);
    group.replace(
        resource,
        Arrays.asList(Resource.create("/static/one.js", ResourceType.JS),
            Resource.create("/static/two.js", ResourceType.JS)));
    Assert.assertEquals(4, group.getResources().size());
    Assert.assertEquals(r0, group.getResources().get(0));
    Assert.assertEquals(r1, group.getResources().get(1));
  }

  @Test(expected = NullPointerException.class)
  public void cannotCollectResourcesWithNullType() {
    final Group group = new Group("group");
    group.collectResourcesOfType(null);
  }

  @Test
  public void shouldCollectCorrectNumberOfResourcesByType() {
    final Group group = new Group("group");
    group.addResource(Resource.create("1.js"));
    group.addResource(Resource.create("2.js"));
    group.addResource(Resource.create("3.js"));
    group.addResource(Resource.create("4.js"));
    group.addResource(Resource.create("5.js"));
    group.addResource(Resource.create("6.js"));
    group.addResource(Resource.create("1.css"));

    Assert.assertEquals(6, group.collectResourcesOfType(ResourceType.JS).getResources().size());
    Assert.assertEquals(1, group.collectResourcesOfType(ResourceType.CSS).getResources().size());
  }

  @Test
  public void shouldBeThreadSafeWhenMutated()
      throws Exception {
    final Group group = new Group("group");
    final List resources = new ArrayList();
    final Resource r1 = Resource.create("/some.css", ResourceType.CSS);
    resources.add(r1);

    WroTestUtils.runConcurrently(new Callable() {
      public Void call()
          throws Exception {
        if (new Random().nextBoolean()) {
          group.setResources(resources);
        } else {
          group.addResource(r1);
          group.replace(r1, resources);
        }
        return null;
      }
    });
  }
}
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
Solution content
/**
 * Copyright Alex Objelean
 */
package ro.isdc.wro.model.group;

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.util.WroTestUtils;


/**
 * Test class for {@link Group}.
 *
 * @author Alex Objelean
 */
public class TestGroup {
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Test(expected = NullPointerException.class)
  public void cannotCreateGroupWithNullName() {
    new Group(null);
  }

  @Test
  public void shouldReturnSameGroupWhenGroupHasNoResources() {
    final Group group = new Group("group");
    
    Group newGroup = group.collectResourcesOfType(ResourceType.CSS);
    Assert.assertEquals(group, newGroup);
    
    newGroup = group.collectResourcesOfType(ResourceType.JS);
    Assert.assertEquals(group, newGroup);
  }
  
  @Test
  public void shouldCollectSearchedResources() {
    final Group group = new Group("group");
    group.addResource(Resource.create("1", ResourceType.CSS));
    group.addResource(Resource.create("2", ResourceType.JS));
    group.addResource(Resource.create("3", ResourceType.JS));
    
    Group newGroup = group.collectResourcesOfType(ResourceType.CSS);
    Assert.assertEquals(1, newGroup.getResources().size());
    
    newGroup = group.collectResourcesOfType(ResourceType.JS);
    Assert.assertEquals(2, newGroup.getResources().size());
  }
  
  @Test(expected = NullPointerException.class)
  public void cannotPassNullResourceType() {
    final Group group = new Group("group");
    group.hasResourcesOfType(null);
  }

  @Test
  public void testNoResorucesOfTypeFound() {
    final Group group = new Group("group");
    Assert.assertEquals(false, group.hasResourcesOfType(ResourceType.CSS));
    Assert.assertEquals(false, group.hasResourcesOfType(ResourceType.JS));
  }

  @Test
  public void testResoruceOfTypeFound() {
    final Group group = new Group("group");
    final List resources = new ArrayList();
    resources.add(Resource.create("/some.css", ResourceType.CSS));
    group.setResources(resources);
    Assert.assertEquals(true, group.hasResourcesOfType(ResourceType.CSS));
    Assert.assertEquals(false, group.hasResourcesOfType(ResourceType.JS));
  }

  @Test(expected = IllegalArgumentException.class)
  public void cannotReplaceMissingResource() {
    final Group group = new Group("group");
    group.replace(Resource.create("/path", ResourceType.JS), Arrays.asList(Resource.create("", ResourceType.JS)));
  }

  @SuppressWarnings("unchecked")
  @Test
  public void testReplaceWithEmptyCollection() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/path", ResourceType.JS);
    group.addResource(resource);
    group.replace(resource, Collections.EMPTY_LIST);
    Assert.assertTrue(group.getResources().isEmpty());
  }

  @Test
  public void testReplaceWithFewResources() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/static/*", ResourceType.JS);
    resource.setMinimize(false);
    group.addResource(resource);
    group.replace(
        resource,
        Arrays.asList(Resource.create("/static/one.js", ResourceType.JS),
            Resource.create("/static/two.js", ResourceType.JS)));
    Assert.assertEquals(2, group.getResources().size());
    Assert.assertEquals(resource.isMinimize(), group.getResources().get(0).isMinimize());
  }

  @Test
  public void shouldReplaceAResourceWithSameResource() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/path.js");
    group.addResource(resource);

    final List resourceList = new ArrayList();
    resourceList.add(resource);

    group.replace(resource, resourceList);
    Assert.assertFalse(group.getResources().isEmpty());
  }

  @Test
  public void shouldReplaceOnlyOneAndPreserveOtherResources() {
    final Group group = new Group("group");
    final Resource resource = Resource.create("/static/*", ResourceType.JS);

    final Resource r0 = Resource.create("/asset/1.js", ResourceType.JS);
    group.addResource(r0);

    final Resource r1 = Resource.create("/asset/2.js", ResourceType.JS);
    group.addResource(r1);

    group.addResource(resource);
    group.replace(
        resource,
        Arrays.asList(Resource.create("/static/one.js", ResourceType.JS),
            Resource.create("/static/two.js", ResourceType.JS)));
    Assert.assertEquals(4, group.getResources().size());
    Assert.assertEquals(r0, group.getResources().get(0));
    Assert.assertEquals(r1, group.getResources().get(1));
  }

  @Test(expected = NullPointerException.class)
  public void cannotCollectResourcesWithNullType() {
    final Group group = new Group("group");
    group.collectResourcesOfType(null);
  }

  @Test
  public void shouldCollectCorrectNumberOfResourcesByType() {
    final Group group = new Group("group");
    group.addResource(Resource.create("1.js"));
    group.addResource(Resource.create("2.js"));
    group.addResource(Resource.create("3.js"));
    group.addResource(Resource.create("4.js"));
    group.addResource(Resource.create("5.js"));
    group.addResource(Resource.create("6.js"));
    group.addResource(Resource.create("1.css"));

    Assert.assertEquals(6, group.collectResourcesOfType(ResourceType.JS).getResources().size());
    Assert.assertEquals(1, group.collectResourcesOfType(ResourceType.CSS).getResources().size());
  }

  @Test
  public void shouldBeThreadSafeWhenMutated()
      throws Exception {
    final Group group = new Group("group");
    final List resources = new ArrayList();
    final Resource r1 = Resource.create("/some.css", ResourceType.CSS);
    resources.add(r1);

    WroTestUtils.runConcurrently(new Callable() {
      public Void call()
          throws Exception {
        if (new Random().nextBoolean()) {
          group.setResources(resources);
        } else {
          group.addResource(r1);
          group.replace(r1, resources);
        }
        return null;
      }
    });
  }
}
File
TestGroup.java
Developer's decision
Combination
Kind of conflict
Class declaration
Comment
Import
Package declaration
Chunk
Conflicting content
 */
package ro.isdc.wro.model.group.processor;

<<<<<<< HEAD
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

import java.io.ByteArrayInputStream;
=======
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
Solution content
 */
package ro.isdc.wro.model.group.processor;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
File
TestGroupsProcessor.java
Developer's decision
Version 2
Kind of conflict
Import
Chunk
Conflicting content
import ro.isdc.wro.model.group.Group;
import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.ResourceType;
<<<<<<< HEAD
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.factory.AbstractResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.factory.ResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.support.AbstractResourceLocator;
import ro.isdc.wro.model.resource.processor.ResourceProcessor;
=======
import ro.isdc.wro.model.resource.locator.factory.SimpleUriLocatorFactory;
import ro.isdc.wro.model.resource.locator.factory.UriLocatorFactory;
import ro.isdc.wro.model.resource.processor.ResourcePreProcessor;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
import ro.isdc.wro.model.resource.processor.decorator.ProcessorDecorator;
import ro.isdc.wro.model.resource.processor.factory.ProcessorsFactory;
import ro.isdc.wro.model.resource.processor.factory.SimpleProcessorsFactory;
Solution content
import ro.isdc.wro.model.group.Group;
import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.factory.AbstractResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.factory.ResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.support.AbstractResourceLocator;
import ro.isdc.wro.model.resource.processor.ResourceProcessor;
import ro.isdc.wro.model.resource.processor.decorator.ProcessorDecorator;
import ro.isdc.wro.model.resource.processor.factory.ProcessorsFactory;
import ro.isdc.wro.model.resource.processor.factory.SimpleProcessorsFactory;
File
TestGroupsProcessor.java
Developer's decision
Version 1
Kind of conflict
Import
Chunk
Conflicting content
    final Group group = new Group(groupName).addResource(Resource.create("1.js")).addResource(Resource.create("2.js"));
    final WroModelFactory modelFactory = WroTestUtils.simpleModelFactory(new WroModel().addGroup(group));
    // the locator which returns the name of the resource as its content
<<<<<<< HEAD
    final ResourceLocatorFactory locatorFactory = new AbstractResourceLocatorFactory() {
      public ResourceLocator getLocator(final String uri) {
        return new AbstractResourceLocator() {
          public InputStream getInputStream()
          throws IOException {
        return new ByteArrayInputStream(uri.getBytes());
      }
        };
      }
    };

    final ResourceProcessor failingPreProcessor = new ResourceProcessor() {
=======
    final UriLocatorFactory locatorFactory = new SimpleUriLocatorFactory().addLocator(WroTestUtils.createResourceMockingLocator());
    
    final ResourcePreProcessor failingPreProcessor = new ResourcePreProcessor() {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        throw new IOException("BOOM!");
Solution content
    final Group group = new Group(groupName).addResource(Resource.create("1.js")).addResource(Resource.create("2.js"));
    final WroModelFactory modelFactory = WroTestUtils.simpleModelFactory(new WroModel().addGroup(group));
    // the locator which returns the name of the resource as its content
    final ResourceLocatorFactory locatorFactory = new AbstractResourceLocatorFactory() {
      public ResourceLocator getLocator(final String uri) {
        return new AbstractResourceLocator() {
          public InputStream getInputStream()
          throws IOException {
        return new ByteArrayInputStream(uri.getBytes());
      }
        };
      }
    };

    final ResourceProcessor failingPreProcessor = new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        throw new IOException("BOOM!");
File
TestGroupsProcessor.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
    final String actual = victim.process(key);
    WroTestUtils.compare("1.js\n2.js", actual);
  }
<<<<<<< HEAD

  @Test
  public void shouldApplyOnlyEligibleProcessors() throws Exception {
=======
  
  @Test
  public void shouldApplyOnlyEligibleProcessors()
      throws Exception {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    final CssMinProcessor cssMinProcessor = Mockito.spy(new CssMinProcessor());
    final BaseWroManagerFactory managerFactory = new BaseWroManagerFactory();
    managerFactory.setProcessorsFactory(new SimpleProcessorsFactory().addPostProcessor(cssMinProcessor));
Solution content
    final String actual = victim.process(key);
    WroTestUtils.compare("1.js\n2.js", actual);
  }
  
  @Test
  public void shouldApplyOnlyEligibleProcessors()
      throws Exception {
    final CssMinProcessor cssMinProcessor = Mockito.spy(new CssMinProcessor());
    final BaseWroManagerFactory managerFactory = new BaseWroManagerFactory();
    managerFactory.setProcessorsFactory(new SimpleProcessorsFactory().addPostProcessor(cssMinProcessor));
File
TestGroupsProcessor.java
Developer's decision
Version 1
Kind of conflict
Annotation
Method signature
Chunk
Conflicting content
    managerFactory.setProcessorsFactory(new SimpleProcessorsFactory().addPostProcessor(cssMinProcessor));
    managerFactory.setModelFactory(WroTestUtils.simpleModelFactory(new WroModel().addGroup(new Group("g1").addResource(Resource.create("/script.js")))));
    initVictim(new WroConfiguration(), managerFactory);
<<<<<<< HEAD

    victim.process(new CacheKey("g1", ResourceType.JS, true));
    verify(cssMinProcessor, Mockito.never()).process(Mockito.any(Resource.class), Mockito.any(Reader.class), Mockito.any(Writer.class));
  }


  @Test
  public void shouldApplyEligibleMinimizeAwareProcessors() throws Exception {
=======
    
    victim.process(new CacheKey("g1", ResourceType.JS, true));
    verify(cssMinProcessor, Mockito.never()).process(Mockito.any(Resource.class), Mockito.any(Reader.class),
        Mockito.any(Writer.class));
  }
  
  @Test
  public void shouldApplyEligibleMinimizeAwareProcessors()
      throws Exception {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    final JSMinProcessor cssMinProcessor = Mockito.spy(new JSMinProcessor());
    final BaseWroManagerFactory managerFactory = new BaseWroManagerFactory();
    managerFactory.setProcessorsFactory(new SimpleProcessorsFactory().addPostProcessor(cssMinProcessor));
Solution content
    managerFactory.setProcessorsFactory(new SimpleProcessorsFactory().addPostProcessor(cssMinProcessor));
    managerFactory.setModelFactory(WroTestUtils.simpleModelFactory(new WroModel().addGroup(new Group("g1").addResource(Resource.create("/script.js")))));
    initVictim(new WroConfiguration(), managerFactory);
    
    victim.process(new CacheKey("g1", ResourceType.JS, true));
    verify(cssMinProcessor, Mockito.never()).process(Mockito.any(Resource.class), Mockito.any(Reader.class),
        Mockito.any(Writer.class));
  }
  
  @Test
  public void shouldApplyEligibleMinimizeAwareProcessors()
      throws Exception {
    final JSMinProcessor cssMinProcessor = Mockito.spy(new JSMinProcessor());
    final BaseWroManagerFactory managerFactory = new BaseWroManagerFactory();
    managerFactory.setProcessorsFactory(new SimpleProcessorsFactory().addPostProcessor(cssMinProcessor));
File
TestGroupsProcessor.java
Developer's decision
Version 1
Kind of conflict
Annotation
Method invocation
Method signature
Chunk
Conflicting content
    managerFactory.setProcessorsFactory(new SimpleProcessorsFactory().addPostProcessor(cssMinProcessor));
    managerFactory.setModelFactory(WroTestUtils.simpleModelFactory(new WroModel().addGroup(new Group("g1").addResource(Resource.create("/script.js")))));
    initVictim(new WroConfiguration(), managerFactory);
<<<<<<< HEAD

    victim.process(new CacheKey("g1", ResourceType.JS, true));
    verify(cssMinProcessor).process(Mockito.any(Resource.class), Mockito.any(Reader.class), Mockito.any(Writer.class));
  }

=======
    
    victim.process(new CacheKey("g1", ResourceType.JS, true));
    verify(cssMinProcessor).process(Mockito.any(Resource.class), Mockito.any(Reader.class), Mockito.any(Writer.class));
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Test
  public void shouldCleanupProperlyWhenDestroyed() {
    PreProcessorExecutor mockPreProcessorExecutor = mock(PreProcessorExecutor.class);
Solution content
    managerFactory.setProcessorsFactory(new SimpleProcessorsFactory().addPostProcessor(cssMinProcessor));
    managerFactory.setModelFactory(WroTestUtils.simpleModelFactory(new WroModel().addGroup(new Group("g1").addResource(Resource.create("/script.js")))));
    initVictim(new WroConfiguration(), managerFactory);
    
    victim.process(new CacheKey("g1", ResourceType.JS, true));
    verify(cssMinProcessor).process(Mockito.any(Resource.class), Mockito.any(Reader.class), Mockito.any(Writer.class));
  }
  
  @Test
  public void shouldCleanupProperlyWhenDestroyed() {
    PreProcessorExecutor mockPreProcessorExecutor = mock(PreProcessorExecutor.class);
File
TestGroupsProcessor.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
import javax.servlet.http.HttpServletResponse;

import org.junit.After;
<<<<<<< HEAD
import org.junit.Assert;
=======
import org.junit.AfterClass;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
Solution content
import javax.servlet.http.HttpServletResponse;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
File
TestInjectorBuilder.java
Developer's decision
Concatenation
Kind of conflict
Import
Chunk
Conflicting content
=======
    
    
    sample.processorsFactory.getPostProcessors();
    verify(mockProcessorsFactory).getPostProcessors();
<<<<<<< HEAD

    sample.resourceLocatorFactory.getLocator("");
    verify(mockLocatorFactory).getLocator("");

    sample.metaDataFactory.create();
    verify(mockMetaDataFactory).create();

    assertSame(mockProcessorsFactory, AbstractDecorator.getOriginalDecoratedObject(sample.processorsFactory));
    assertSame(mockLocatorFactory, AbstractDecorator.getOriginalDecoratedObject(sample.resourceLocatorFactory));
    sample.uriLocatorFactory.getInstance("");
    verify(mockLocatorFactory).getInstance("");
    
    sample.metaDataFactory.create();
    verify(mockMetaDataFactory).create();
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    assertNotNull(sample.callbackRegistry);
    assertSame(injector, sample.injector);
    assertNotNull(sample.groupsProcessor);
Solution content
    
    sample.processorsFactory.getPostProcessors();
    verify(mockProcessorsFactory).getPostProcessors();
    
    sample.resourceLocatorFactory.getLocator("");
    verify(mockLocatorFactory).getLocator("");
    
    sample.metaDataFactory.create();
    verify(mockMetaDataFactory).create();
    
    assertSame(mockProcessorsFactory, AbstractDecorator.getOriginalDecoratedObject(sample.processorsFactory));
    assertSame(mockLocatorFactory, AbstractDecorator.getOriginalDecoratedObject(sample.resourceLocatorFactory));

    assertNotNull(sample.callbackRegistry);
    assertSame(injector, sample.injector);
    assertNotNull(sample.groupsProcessor);
File
TestInjectorBuilder.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
import java.util.List;


    //init executor
   */

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
    when(mockRequest.getRequestURL()).thenReturn(new StringBuffer(""));
import java.io.Writer;
import java.util.ArrayList;
    when(mockRequest.getServletPath()).thenReturn("");
<<<<<<< HEAD
/**
 * Copyright wro4j@2011
 */
package ro.isdc.wro.model.group.processor;

import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
import static ro.isdc.wro.util.WroTestUtils.compare;

import java.io.ByteArrayInputStream;
    initMocks(this);
    useFailingPreProcessor();
  }
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ro.isdc.wro.WroRuntimeException;
import ro.isdc.wro.config.Context;
import ro.isdc.wro.config.jmx.WroConfiguration;
import ro.isdc.wro.manager.factory.BaseWroManagerFactory;
import ro.isdc.wro.manager.factory.WroManagerFactory;
import ro.isdc.wro.model.group.Group;
import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.factory.AbstractResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.factory.ResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.support.AbstractResourceLocator;
import ro.isdc.wro.model.resource.processor.ResourceProcessor;
import ro.isdc.wro.model.resource.processor.decorator.CopyrightKeeperProcessorDecorator;
import ro.isdc.wro.model.resource.processor.factory.SimpleProcessorsFactory;
import ro.isdc.wro.model.resource.processor.impl.js.JSMinProcessor;
import ro.isdc.wro.util.StopWatch;
import ro.isdc.wro.util.WroTestUtils;
import ro.isdc.wro.util.WroUtil;


/**
 * @author Alex Objelean
 */
public class TestPreProcessorExecutor {
  private static final Logger LOG = LoggerFactory.getLogger(TestPreProcessorExecutor.class);
  @Mock
  private HttpServletRequest mockRequest;
  @Mock
  private HttpServletResponse mockResponse;
  @Mock
  private FilterConfig mockFilterConfig;
  @Mock
  private ServletContext mockServletContext;
  @Mock
  private ResourceLocatorFactory mockLocatorFactory;
  @Mock
  private ResourceLocator mockLocator;
  private PreProcessorExecutor victim;

  @Before
  public void setUp()
      throws Exception {
    when(mockFilterConfig.getServletContext()).thenReturn(mockServletContext);
    when(mockLocatorFactory.locate(Mockito.anyString())).thenReturn(WroUtil.EMPTY_STREAM);
    when(mockLocator.getInputStream()).thenReturn(WroUtil.EMPTY_STREAM);
    when(mockLocatorFactory.getLocator(Mockito.anyString())).thenReturn(mockLocator);

    final Context context = Context.webContext(mockRequest, mockResponse, mockFilterConfig);
    Context.set(context);
    //force parallel execution
    Context.get().getConfig().setParallelPreprocessing(true);
    Context.get().getConfig().setIgnoreFailingProcessor(true);
    initExecutor();
  }

  private WroManagerFactory createWroManager(final ResourceProcessor... preProcessors) {
    final SimpleProcessorsFactory processorsFactory = new SimpleProcessorsFactory();
    for (final ResourceProcessor resourcePreProcessor : preProcessors) {
      processorsFactory.addPreProcessor(resourcePreProcessor);
    }
    final BaseWroManagerFactory wroManagerFactory = new BaseWroManagerFactory();
    wroManagerFactory.setProcessorsFactory(processorsFactory);
    wroManagerFactory.setLocatorFactory(mockLocatorFactory);
    return wroManagerFactory;
  }

  /**
   * @param wroManagerFactory
   */
  private void initExecutor(final ResourceProcessor... preProcessors) {
    final WroManagerFactory wroManagerFactory = createWroManager(preProcessors);
    final Injector injector = InjectorBuilder.create(wroManagerFactory).build();
    victim = new PreProcessorExecutor();
    injector.inject(victim);
  }

  @Test(expected = NullPointerException.class)
  public void cannotAcceptNullArguments()
    throws Exception {
    victim.processAndMerge(null, true);
  }

  /**
   * Creates a slow pre processor which sleeps for a given amount of milliseconds and doesn't change the processed
   * content.
   */
  private ResourceProcessor createSlowPreProcessor(final long time) {
    return new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
        throws IOException {
        try {
          IOUtils.copy(reader, writer);
          Thread.sleep(time);
        } catch (final InterruptedException e) {
        }
      }
    };
  }

  private ResourceProcessor createProcessorUsingMissingResource() {
    return new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
        throws IOException {
        LOG.debug("executing processor which will throw IOException");
        throw new IOException("Invalid resource found!");
      }
    };
  }

  private ResourceProcessor createProcessorWhichFails() {
    return new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
        throws IOException {
        LOG.debug("executing failing processor...");
        throw new WroRuntimeException("Boom!");
      }
    };
  }

  @Test
  public void processEmptyList()
    throws Exception {
    final List resources = new ArrayList();
    final Group group = new Group("dummy");
    group.setResources(resources);
    Assert.assertEquals("", victim.processAndMerge(group, true));
    Assert.assertEquals("", victim.processAndMerge(group, false));
  }

  @Test
  public void shouldNotFailWhenNoResourcesProcessed()
    throws Exception {
    initExecutor(createProcessorUsingMissingResource());
    victim.processAndMerge(createGroup(), true);
  }

  private Group createGroup(final Resource... resources) {
    final Group group = new Group("dummy");
    final List resourcesList = new ArrayList();
    for (final Resource resource : resources) {
      resourcesList.add(resource);
    }
    group.setResources(resourcesList);
    return group;
  }

  @Test(expected = IOException.class)
  public void shouldFailWhenProcessingInvalidResource()
    throws Exception {
    when(mockLocatorFactory.locate(Mockito.anyString())).thenThrow(IOException.class);
    Context.get().getConfig().setIgnoreMissingResources(false);
    shouldNotFailWhenProcessingInvalidResource();
  }

  @Test
  public void shouldNotFailWhenProcessingInvalidResource()
    throws IOException {
    initExecutor(createProcessorUsingMissingResource());
    final Group group = createGroup(Resource.create("/uri", ResourceType.JS));
    final String result = victim.processAndMerge(group, true);
    compare("", result);
  }

  @Test(expected = WroRuntimeException.class)
  public void shouldFailWhenUsingFailingPreProcessor()
    throws Exception {
    Context.get().getConfig().setIgnoreFailingProcessor(false);
    useFailingPreProcessor();
  }

  @Test
  public void shouldNotFailWhenUsingFailingPreProcessor()
      throws Exception {
    Context.get().getConfig().setIgnoreFailingProcessor(true);
    final WroManagerFactory managerFactory = new BaseWroManagerFactory().setLocatorFactory(locatorFactory);
    InjectorBuilder.create(managerFactory).build().inject(victim);

import ro.isdc.wro.config.jmx.WroConfiguration;
  private void useFailingPreProcessor()
      throws Exception {
    initExecutor(createProcessorWhichFails());
    final Group group = createGroup(Resource.create("", ResourceType.JS));
    final String result = victim.processAndMerge(group, true);
    compare("", result);

  }

  /**
   * This test should work when running at least on dual-core. It assumes that (P1(r1) + P2(r1) + P3(r1)) + (P1(r2) +
   * P2(r2) + P3(r2)) > Parallel(P1(r1) + P2(r1) + P3(r1) | P1(r2) + P2(r2) + P3(r2))
   */
  @Test
  public void preProcessingInParallelIsFaster()
      throws Exception {
    final int availableProcessors = Runtime.getRuntime().availableProcessors();
    LOG.info("availableProcessors: {}", availableProcessors);
    //test it only if number there are more than 1 CPU cores are available
    if (availableProcessors > 1) {
      final StopWatch watch = new StopWatch();
      final WroConfiguration config = Context.get().getConfig();

      initExecutor(createSlowPreProcessor(100), createSlowPreProcessor(100), createSlowPreProcessor(100));
      final Group group = createGroup(Resource.create("r1", ResourceType.JS), Resource.create("r2", ResourceType.JS));

      // warm up
      config.setParallelPreprocessing(true);
      victim.processAndMerge(group, true);

      // parallel
      watch.start("parallel preProcessing");
      config.setParallelPreprocessing(true);
      victim.processAndMerge(group, true);
      watch.stop();
      final long parallelExecution = watch.getLastTaskTimeMillis();

      // sequential
      config.setParallelPreprocessing(false);
      watch.start("sequential preProcessing");
      victim.processAndMerge(group, true);
      watch.stop();
      final long sequentialExecution = watch.getLastTaskTimeMillis();

      final String message = "Processing details: \n" + watch.prettyPrint();
      LOG.debug(message);

      // prove that running in parallel is faster
      // delta indicates the improvement relative to parallel execution (we use 80% relative improvement, but it
      // normally
      // should be about 100%).
      final double delta = parallelExecution * 0.8;
      Assert.assertTrue(String.format("%s  > %s + %s", sequentialExecution, parallelExecution, delta),
          sequentialExecution > parallelExecution + delta);
    }
  }

  @Test
  public void shouldNotMinimizeDecoratedResourcesWithMinimizationDisabled()
    throws Exception {
    final Resource resource = Resource.create("classpath:1.js");
    resource.setMinimize(false);
    final ResourceProcessor preProcessor = CopyrightKeeperProcessorDecorator.decorate(new JSMinProcessor() {
      @Override
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        Assert.fail("Should not minimize");
      }
    });
    initExecutor(preProcessor);
    final Group group = new Group("group").addResource(resource);
    victim.processAndMerge(group, true);
  }

  /**
   * When an empty resource is processed, the processing should not fail (warn only).
   */
  @Test
  public void shouldNotFailWhenEmptyResourceIsFound()
      throws Exception {
    final WroConfiguration config = Context.get().getConfig();
    config.setIgnoreMissingResources(false);

    final ResourceLocator emptyStreamLocator = new AbstractResourceLocator() {
      public InputStream getInputStream()
          throws IOException {
        return new ByteArrayInputStream("".getBytes());
      }
    };
    final ResourceLocatorFactory locatorFactory = new AbstractResourceLocatorFactory() {
      public ResourceLocator getLocator(final String uri) {
        return emptyStreamLocator;
      }
    };
   * content.
    final List resources = new ArrayList();
    resources.add(Resource.create("/resource.js"));

    final Group group = new Group("name");
    group.setResources(resources);
    victim.processAndMerge(group, true);
  }

  
  /**
   * @see https://code.google.com/p/wro4j/issues/detail?id=813
   */
  @Test
  public void shouldNotCommentMergedContentWhenLastLineContainsComment() throws Exception {
    final List resources = new ArrayList();
    resources.add(Resource.create("var a=1;//comment", ResourceType.JS));
    resources.add(Resource.create("a=2;", ResourceType.JS));
    final ResourceLocatorFactory locatorFactory = WroTestUtils.createResourceMockingLocatorFactory();
    final WroManagerFactory managerFactory = new BaseWroManagerFactory().setLocatorFactory(locatorFactory).setProcessorsFactory(
        new SimpleProcessorsFactory());
    InjectorBuilder.create(managerFactory).build().inject(victim);
    final Group group = new Group("group");
    group.setResources(resources);
    
    final String result = victim.processAndMerge(group, false);
    compare("var a=1;//comment\na=2;\n", result);
  }

  @Test
  public void shouldNotAddRedundantNewLinesAfterMerge() throws Exception {
    final List resources = new ArrayList();
    resources.add(Resource.create("1\n\n", ResourceType.JS));
    resources.add(Resource.create("2", ResourceType.JS));
    final ResourceLocatorFactory locatorFactory = WroTestUtils.createResourceMockingLocatorFactory();
    final WroManagerFactory managerFactory = new BaseWroManagerFactory().setLocatorFactory(locatorFactory).setProcessorsFactory(
        new SimpleProcessorsFactory());
    InjectorBuilder.create(managerFactory).build().inject(victim);
    final Group group = new Group("group");
    group.setResources(resources);
    
    
    final String result = victim.processAndMerge(group, false);
    compare("1\n2", result);
  }

  private static class AnyTypeProcessor
      implements ResourceProcessor {
    public void process(final Resource resource, final Reader reader, final Writer writer)
        throws IOException {
    }
  }

  @Minimize
  private static class MinimizeAwareProcessor
      extends AnyTypeProcessor {
  }


  @After
  public void tearDown() {
    Context.unset();
  }
}
=======
/**
 * Copyright wro4j@2011
 */
package ro.isdc.wro.model.group.processor;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
import static ro.isdc.wro.util.WroTestUtils.compare;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ro.isdc.wro.WroRuntimeException;
import ro.isdc.wro.config.Context;
    when(mockLocatorFactory.locate(Mockito.anyString())).thenThrow(IOException.class);
import ro.isdc.wro.manager.factory.BaseWroManagerFactory;
import ro.isdc.wro.manager.factory.WroManagerFactory;
import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.locator.UriLocator;
import ro.isdc.wro.model.resource.locator.factory.SimpleUriLocatorFactory;
import ro.isdc.wro.model.resource.locator.factory.UriLocatorFactory;
import ro.isdc.wro.model.resource.processor.ResourcePostProcessor;
import ro.isdc.wro.model.resource.processor.ResourcePreProcessor;
import ro.isdc.wro.model.resource.processor.decorator.CopyrightKeeperProcessorDecorator;
import ro.isdc.wro.model.resource.processor.factory.SimpleProcessorsFactory;
import ro.isdc.wro.model.resource.processor.impl.js.JSMinProcessor;
import ro.isdc.wro.util.StopWatch;
import ro.isdc.wro.util.WroTestUtils;
import ro.isdc.wro.util.WroUtil;


/**
 * @author Alex Objelean
 */
public class TestPreProcessorExecutor {
  private static final Logger LOG = LoggerFactory.getLogger(TestPreProcessorExecutor.class);
  @Mock
  private HttpServletRequest mockRequest;
  @Mock
  private HttpServletResponse mockResponse;
  @Mock
  private FilterConfig mockFilterConfig;
  @Mock
  private ServletContext mockServletContext;
  @Mock
  private UriLocatorFactory mockLocatorFactory;
  @Mock
  private UriLocator mockLocator;
  private PreProcessorExecutor victim;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp()
      throws Exception {
    initMocks(this);
    
    when(mockRequest.getRequestURL()).thenReturn(new StringBuffer(""));
    when(mockRequest.getServletPath()).thenReturn("");
    when(mockFilterConfig.getServletContext()).thenReturn(mockServletContext);
    when(mockLocatorFactory.locate(Mockito.anyString())).thenReturn(WroUtil.EMPTY_STREAM);
    when(mockLocator.locate(Mockito.anyString())).thenReturn(WroUtil.EMPTY_STREAM);
    when(mockLocatorFactory.getInstance(Mockito.anyString())).thenReturn(mockLocator);
    
    final Context context = Context.webContext(mockRequest, mockResponse, mockFilterConfig);
    Context.set(context);
    // force parallel execution
    Context.get().getConfig().setParallelPreprocessing(true);
    Context.get().getConfig().setIgnoreFailingProcessor(true);
    initExecutor();
  }
  
  private WroManagerFactory createWroManager(final ResourcePreProcessor... preProcessors) {
    final SimpleProcessorsFactory processorsFactory = new SimpleProcessorsFactory();
    for (final ResourcePreProcessor resourcePreProcessor : preProcessors) {
      processorsFactory.addPreProcessor(resourcePreProcessor);
    }
    final BaseWroManagerFactory wroManagerFactory = new BaseWroManagerFactory();
    wroManagerFactory.setProcessorsFactory(processorsFactory);
    wroManagerFactory.setUriLocatorFactory(mockLocatorFactory);
    return wroManagerFactory;
  }
  
  /**
   * @param wroManagerFactory
   */
  private void initExecutor(final ResourcePreProcessor... preProcessors) {
    final WroManagerFactory wroManagerFactory = createWroManager(preProcessors);
    final Injector injector = InjectorBuilder.create(wroManagerFactory).build();
    victim = new PreProcessorExecutor();
    injector.inject(victim);
  }
  
  @Test(expected = NullPointerException.class)
  public void cannotAcceptNullArguments()
      throws Exception {
    victim.processAndMerge(null, true);
  }
  
  /**
   * Creates a slow pre processor which sleeps for a given amount of milliseconds and doesn't change the processed
   * P2(r2) + P3(r2)) > Parallel(P1(r1) + P2(r1) + P3(r1) | P1(r2) + P2(r2) + P3(r2))
  private ResourcePreProcessor createSlowPreProcessor(final long time) {
    return new ResourcePreProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        try {
          IOUtils.copy(reader, writer);
          Thread.sleep(time);
        } catch (final InterruptedException e) {
        }
      }
    };
  }
  
  private ResourcePreProcessor createProcessorUsingMissingResource() {
    return new ResourcePreProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        LOG.debug("executing processor which will throw IOException");
        throw new IOException("Invalid resource found!");
      }
    };
  }
  
  private ResourcePreProcessor createProcessorWhichFails() {
    return new ResourcePreProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        LOG.debug("executing failing processor...");
        throw new WroRuntimeException("Boom!");
      }
    };
  }
  
  @Test
  public void processEmptyList()
      throws Exception {
    final List resources = new ArrayList();
    Assert.assertEquals("", victim.processAndMerge(resources, true));
    Assert.assertEquals("", victim.processAndMerge(resources, false));
  }
  
  @Test
  public void shouldNotFailWhenNoResourcesProcessed()
      throws Exception {
    initExecutor(createProcessorUsingMissingResource());
    victim.processAndMerge(createResources(), true);
  }
  
  private List createResources(final Resource... resources) {
    final List resourcesList = new ArrayList();
    for (final Resource resource : resources) {
      resourcesList.add(resource);
    }
    return resourcesList;
  }
  
  @Test(expected = IOException.class)
  public void shouldFailWhenProcessingInvalidResource()
      throws Exception {
    Context.get().getConfig().setIgnoreMissingResources(false);
    shouldNotFailWhenProcessingInvalidResource();
  }
  
  @Test
  public void shouldNotFailWhenProcessingInvalidResource()
      throws IOException {
    initExecutor(createProcessorUsingMissingResource());
    final List resources = createResources(Resource.create("/uri", ResourceType.JS));
    final String result = victim.processAndMerge(resources, true);
    WroTestUtils.compare("", result);
  }
  
  @Test(expected = WroRuntimeException.class)
  public void shouldFailWhenUsingFailingPreProcessor()
      throws Exception {
    Context.get().getConfig().setIgnoreFailingProcessor(false);
    useFailingPreProcessor();
  }
  
  @Test
  public void shouldNotFailWhenUsingFailingPreProcessor()
      throws Exception {
    Context.get().getConfig().setIgnoreFailingProcessor(true);
    useFailingPreProcessor();
  }
  
  private void useFailingPreProcessor()
      throws Exception {
    initExecutor(createProcessorWhichFails());
    final List resources = createResources(Resource.create("", ResourceType.JS));
    final String result = victim.processAndMerge(resources, true);
    WroTestUtils.compare("", result);
    
  }
  
  /**
   * This test should work when running at least on dual-core. It assumes that (P1(r1) + P2(r1) + P3(r1)) + (P1(r2) +
   */
  @Test
  @Test
  public void shouldNotCommentMergedContentWhenLastLineContainsComment()
  public void preProcessingInParallelIsFaster()
      throws Exception {
    final int availableProcessors = Runtime.getRuntime().availableProcessors();
    LOG.info("availableProcessors: {}", availableProcessors);
    // test it only if number there are more than 1 CPU cores are available
    if (availableProcessors > 1) {
      final StopWatch watch = new StopWatch();
      final WroConfiguration config = Context.get().getConfig();
      
      initExecutor(createSlowPreProcessor(100), createSlowPreProcessor(100), createSlowPreProcessor(100));
      final List resources = createResources(Resource.create("r1", ResourceType.JS),
          Resource.create("r2", ResourceType.JS));
      
      // warm up
      config.setParallelPreprocessing(true);
      victim.processAndMerge(resources, true);
      
      // parallel
      watch.start("parallel preProcessing");
      config.setParallelPreprocessing(true);
      victim.processAndMerge(resources, true);
      watch.stop();
      final long parallelExecution = watch.getLastTaskTimeMillis();
      
      // sequential
      config.setParallelPreprocessing(false);
      watch.start("sequential preProcessing");
      victim.processAndMerge(resources, true);
      watch.stop();
      final long sequentialExecution = watch.getLastTaskTimeMillis();
      
      final String message = "Processing details: \n" + watch.prettyPrint();
      LOG.debug(message);
      
      // prove that running in parallel is faster
      // delta indicates the improvement relative to parallel execution (we use 80% relative improvement, but it
      // normally
      // should be about 100%).
      final double delta = parallelExecution * 0.8;
      Assert.assertTrue(String.format("%s  > %s + %s", sequentialExecution, parallelExecution, delta),
          sequentialExecution > parallelExecution + delta);
    }
  }
  
  @Test
  public void shouldNotMinimizeDecoratedResourcesWithMinimizationDisabled()
      throws Exception {
    final List resources = new ArrayList();
    final Resource resource = Resource.create("classpath:1.js");
    resource.setMinimize(false);
    resources.add(resource);
    final ResourcePreProcessor preProcessor = CopyrightKeeperProcessorDecorator.decorate(new JSMinProcessor() {
      @Override
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        Assert.fail("Should not minimize");
      }
    });
    initExecutor(preProcessor);
    victim.processAndMerge(resources, true);
  }
  
  /**
   * When an empty resource is processed, the processing should not fail (warn only).
   */
  @Test
  public void shouldNotFailWhenEmptyResourceIsFound()
      throws Exception {
    final WroConfiguration config = Context.get().getConfig();
    config.setIgnoreMissingResources(false);
    
    final UriLocator emptyStreamLocator = new UriLocator() {
      public boolean accept(final String uri) {
        return true;
      }
      
      public InputStream locate(final String uri)
          throws IOException {
        return new ByteArrayInputStream("".getBytes());
      }
    };
    final UriLocatorFactory locatorFactory = new SimpleUriLocatorFactory().addLocator(emptyStreamLocator);
    // init executor
    final WroManagerFactory managerFactory = new BaseWroManagerFactory().setUriLocatorFactory(locatorFactory);
    InjectorBuilder.create(managerFactory).build().inject(victim);
    
    final List resources = new ArrayList();
    resources.add(Resource.create("/resource.js"));
    victim.processAndMerge(resources, true);
  }
  
  /**
   * @see https://code.google.com/p/wro4j/issues/detail?id=813
   */
      throws Exception {
    final List resources = new ArrayList();
    resources.add(Resource.create("var a=1;//comment", ResourceType.JS));
    resources.add(Resource.create("a=2;", ResourceType.JS));
    final UriLocatorFactory locatorFactory = new SimpleUriLocatorFactory().addLocator(WroTestUtils.createResourceMockingLocator());
    final WroManagerFactory managerFactory = new BaseWroManagerFactory().setUriLocatorFactory(locatorFactory).setProcessorsFactory(
        new SimpleProcessorsFactory());
    InjectorBuilder.create(managerFactory).build().inject(victim);
    
    final String result = victim.processAndMerge(resources, false);
    compare("var a=1;//comment\na=2;\n", result);
  }
  
  @Test
  public void shouldNotAddRedundantNewLinesAfterMerge()
      throws Exception {
    final List resources = new ArrayList();
    resources.add(Resource.create("1\n\n", ResourceType.JS));
    resources.add(Resource.create("2", ResourceType.JS));
    final UriLocatorFactory locatorFactory = new SimpleUriLocatorFactory().addLocator(WroTestUtils.createResourceMockingLocator());
    final WroManagerFactory managerFactory = new BaseWroManagerFactory().setUriLocatorFactory(locatorFactory).setProcessorsFactory(
        new SimpleProcessorsFactory());
    InjectorBuilder.create(managerFactory).build().inject(victim);
    
    final String result = victim.processAndMerge(resources, false);
    compare("1\n2", result);
  }
  
  private static class AnyTypeProcessor
      implements ResourcePreProcessor, ResourcePostProcessor {
    public void process(final Resource resource, final Reader reader, final Writer writer)
        throws IOException {
    }
    
    public void process(final Reader reader, final Writer writer)
        throws IOException {
    }
  }
  
  @Minimize
  private static class MinimizeAwareProcessor
      extends AnyTypeProcessor {
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
}
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
Solution content
/**
 * Copyright wro4j@2011
 */
package ro.isdc.wro.model.group.processor;

import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
import static ro.isdc.wro.util.WroTestUtils.compare;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.io.Writer;
    for (final ResourceProcessor resourcePreProcessor : preProcessors) {
  }
  
import java.util.ArrayList;
import java.util.List;

import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ro.isdc.wro.WroRuntimeException;
import ro.isdc.wro.config.Context;
import ro.isdc.wro.config.jmx.WroConfiguration;
import ro.isdc.wro.manager.factory.BaseWroManagerFactory;
import ro.isdc.wro.manager.factory.WroManagerFactory;
import ro.isdc.wro.model.group.Group;
import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.factory.AbstractResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.factory.ResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.support.AbstractResourceLocator;
import ro.isdc.wro.model.resource.processor.ResourceProcessor;
import ro.isdc.wro.model.resource.processor.decorator.CopyrightKeeperProcessorDecorator;
import ro.isdc.wro.model.resource.processor.factory.SimpleProcessorsFactory;
import ro.isdc.wro.model.resource.processor.impl.js.JSMinProcessor;
import ro.isdc.wro.util.StopWatch;
import ro.isdc.wro.util.WroTestUtils;
import ro.isdc.wro.util.WroUtil;


/**
 * @author Alex Objelean
 */
public class TestPreProcessorExecutor {
  private static final Logger LOG = LoggerFactory.getLogger(TestPreProcessorExecutor.class);
  @Mock
  private HttpServletRequest mockRequest;
  @Mock
  private HttpServletResponse mockResponse;
  @Mock
  private FilterConfig mockFilterConfig;
  @Mock
  private ServletContext mockServletContext;
  @Mock
  private ResourceLocatorFactory mockLocatorFactory;
  @Mock
  private ResourceLocator mockLocator;
  private PreProcessorExecutor victim;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp()
      throws Exception {
    initMocks(this);
    
    when(mockRequest.getRequestURL()).thenReturn(new StringBuffer(""));
    when(mockRequest.getServletPath()).thenReturn("");
    when(mockFilterConfig.getServletContext()).thenReturn(mockServletContext);
    when(mockLocatorFactory.locate(Mockito.anyString())).thenReturn(WroUtil.EMPTY_STREAM);
    when(mockLocator.getInputStream()).thenReturn(WroUtil.EMPTY_STREAM);
    when(mockLocatorFactory.getLocator(Mockito.anyString())).thenReturn(mockLocator);
    
    final Context context = Context.webContext(mockRequest, mockResponse, mockFilterConfig);
    Context.set(context);
    // force parallel execution
    Context.get().getConfig().setParallelPreprocessing(true);
    Context.get().getConfig().setIgnoreFailingProcessor(true);
    initExecutor();
  }

  private WroManagerFactory createWroManager(final ResourceProcessor... preProcessors) {
    final SimpleProcessorsFactory processorsFactory = new SimpleProcessorsFactory();
      processorsFactory.addPreProcessor(resourcePreProcessor);
    }
    final BaseWroManagerFactory wroManagerFactory = new BaseWroManagerFactory();
    config.setIgnoreMissingResources(false);

    wroManagerFactory.setProcessorsFactory(processorsFactory);
    wroManagerFactory.setLocatorFactory(mockLocatorFactory);
    return wroManagerFactory;
  }


  /**
   * @param wroManagerFactory
   */
  private void initExecutor(final ResourceProcessor... preProcessors) {
    final WroManagerFactory wroManagerFactory = createWroManager(preProcessors);
    final Injector injector = InjectorBuilder.create(wroManagerFactory).build();
    victim = new PreProcessorExecutor();
    injector.inject(victim);
  }
  
  @Test(expected = NullPointerException.class)
  public void cannotAcceptNullArguments()
      throws Exception {
    victim.processAndMerge(null, true);
  }
  
  /**
   * Creates a slow pre processor which sleeps for a given amount of milliseconds and doesn't change the processed
   * content.
   */
  private ResourceProcessor createSlowPreProcessor(final long time) {
    return new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        try {
          IOUtils.copy(reader, writer);
          Thread.sleep(time);
        } catch (final InterruptedException e) {
        }
      }
    };
  }

  private ResourceProcessor createProcessorUsingMissingResource() {
    return new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        LOG.debug("executing processor which will throw IOException");
        throw new IOException("Invalid resource found!");
      }
    };
  }

  private ResourceProcessor createProcessorWhichFails() {
    return new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        LOG.debug("executing failing processor...");
        throw new WroRuntimeException("Boom!");
      }
    };
  }
  
  @Test
  public void processEmptyList()
      throws Exception {
    final List resources = new ArrayList();
    final Group group = new Group("dummy");
    group.setResources(resources);
    Assert.assertEquals("", victim.processAndMerge(group, true));
    Assert.assertEquals("", victim.processAndMerge(group, false));
  }
  
  @Test
  public void shouldNotFailWhenNoResourcesProcessed()
      throws Exception {
    initExecutor(createProcessorUsingMissingResource());
    victim.processAndMerge(createGroup(), true);
  }
  
  private List createResources(final Resource... resources) {
    final List resourcesList = new ArrayList();
    for (final Resource resource : resources) {
      resourcesList.add(resource);
    }
    group.setResources(resourcesList);
    return group;
  }
  
  @Test(expected = IOException.class)
  public void shouldFailWhenProcessingInvalidResource()
      throws Exception {
    when(mockLocatorFactory.locate(Mockito.anyString())).thenThrow(IOException.class);
    Context.get().getConfig().setIgnoreMissingResources(false);
    shouldNotFailWhenProcessingInvalidResource();
  }
  
  @Test
  public void shouldNotFailWhenProcessingInvalidResource()
      throws IOException {
    initExecutor(createProcessorUsingMissingResource());
    final Group group = createGroup(Resource.create("/uri", ResourceType.JS));
    final String result = victim.processAndMerge(group, true);
    compare("", result);
  @Test(expected = WroRuntimeException.class)
  public void shouldFailWhenUsingFailingPreProcessor()
      throws Exception {
    Context.get().getConfig().setIgnoreFailingProcessor(false);
    useFailingPreProcessor();
  }
  
  @Test
  public void shouldNotFailWhenUsingFailingPreProcessor()
      throws Exception {
    Context.get().getConfig().setIgnoreFailingProcessor(true);
    useFailingPreProcessor();
  }

  private void useFailingPreProcessor()
      throws Exception {
    initExecutor(createProcessorWhichFails());
    final Group group = createGroup(Resource.create("", ResourceType.JS));
    final String result = victim.processAndMerge(group, true);
    compare("", result);
    
  }
  
  /**
   * This test should work when running at least on dual-core. It assumes that (P1(r1) + P2(r1) + P3(r1)) + (P1(r2) +
   * P2(r2) + P3(r2)) > Parallel(P1(r1) + P2(r1) + P3(r1) | P1(r2) + P2(r2) + P3(r2))
   */
  @Test
  public void preProcessingInParallelIsFaster()
      throws Exception {
    final int availableProcessors = Runtime.getRuntime().availableProcessors();
    LOG.info("availableProcessors: {}", availableProcessors);
    // test it only if number there are more than 1 CPU cores are available
    if (availableProcessors > 1) {
      final StopWatch watch = new StopWatch();
      final WroConfiguration config = Context.get().getConfig();
      
      initExecutor(createSlowPreProcessor(100), createSlowPreProcessor(100), createSlowPreProcessor(100));
      final Group group = createGroup(Resource.create("r1", ResourceType.JS), Resource.create("r2", ResourceType.JS));
      
      // warm up
      config.setParallelPreprocessing(true);
      victim.processAndMerge(group, true);
      
      // parallel
      watch.start("parallel preProcessing");
      config.setParallelPreprocessing(true);
      victim.processAndMerge(group, true);
      watch.stop();
      final long parallelExecution = watch.getLastTaskTimeMillis();
      
      // sequential
      config.setParallelPreprocessing(false);
      watch.start("sequential preProcessing");
      victim.processAndMerge(group, true);
      watch.stop();
      final long sequentialExecution = watch.getLastTaskTimeMillis();
      
      final String message = "Processing details: \n" + watch.prettyPrint();
      LOG.debug(message);
      
      // prove that running in parallel is faster
      // delta indicates the improvement relative to parallel execution (we use 80% relative improvement, but it
      // normally
      // should be about 100%).
      final double delta = parallelExecution * 0.8;
      Assert.assertTrue(String.format("%s  > %s + %s", sequentialExecution, parallelExecution, delta),
          sequentialExecution > parallelExecution + delta);
    }
  }
  
  @Test
  public void shouldNotMinimizeDecoratedResourcesWithMinimizationDisabled()
      throws Exception {
    final Resource resource = Resource.create("classpath:1.js");
    resource.setMinimize(false);
    final ResourceProcessor preProcessor = CopyrightKeeperProcessorDecorator.decorate(new JSMinProcessor() {
      @Override
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        Assert.fail("Should not minimize");
      }
    });
    initExecutor(preProcessor);
    final Group group = new Group("group").addResource(resource);
    victim.processAndMerge(group, true);
  }
  
  /**
   * When an empty resource is processed, the processing should not fail (warn only).
   */
  @Test
  public void shouldNotFailWhenEmptyResourceIsFound()
      throws Exception {
    final WroConfiguration config = Context.get().getConfig();
    final ResourceLocator emptyStreamLocator = new AbstractResourceLocator() {
      public InputStream getInputStream()
          throws IOException {
        return new ByteArrayInputStream("".getBytes());
      }
    };
    final ResourceLocatorFactory locatorFactory = new AbstractResourceLocatorFactory() {
      public ResourceLocator getLocator(final String uri) {
        return emptyStreamLocator;
      }
    };
    // init executor
    final WroManagerFactory managerFactory = new BaseWroManagerFactory().setLocatorFactory(locatorFactory);
    InjectorBuilder.create(managerFactory).build().inject(victim);
    
    final List resources = new ArrayList();
    resources.add(Resource.create("/resource.js"));

    final Group group = new Group("name");
    group.setResources(resources);
    victim.processAndMerge(group, true);
  }

  
  /**
   * @see https://code.google.com/p/wro4j/issues/detail?id=813
   */
  @Test
  public void shouldNotCommentMergedContentWhenLastLineContainsComment()
      throws Exception {
    final List resources = new ArrayList();
    resources.add(Resource.create("var a=1;//comment", ResourceType.JS));
    resources.add(Resource.create("a=2;", ResourceType.JS));
    final ResourceLocatorFactory locatorFactory = WroTestUtils.createResourceMockingLocatorFactory();
    final WroManagerFactory managerFactory = new BaseWroManagerFactory().setLocatorFactory(locatorFactory).setProcessorsFactory(
        new SimpleProcessorsFactory());
    InjectorBuilder.create(managerFactory).build().inject(victim);
    final Group group = new Group("group");
    group.setResources(resources);
    
    final String result = victim.processAndMerge(group, false);
    compare("var a=1;//comment\na=2;\n", result);
  }
  
  @Test
  public void shouldNotAddRedundantNewLinesAfterMerge()
      throws Exception {
    final List resources = new ArrayList();
    resources.add(Resource.create("1\n\n", ResourceType.JS));
    resources.add(Resource.create("2", ResourceType.JS));
    final ResourceLocatorFactory locatorFactory = WroTestUtils.createResourceMockingLocatorFactory();
    final WroManagerFactory managerFactory = new BaseWroManagerFactory().setLocatorFactory(locatorFactory).setProcessorsFactory(
        new SimpleProcessorsFactory());
    InjectorBuilder.create(managerFactory).build().inject(victim);
    final Group group = new Group("group");
    group.setResources(resources);
    
    
    final String result = victim.processAndMerge(group, false);
    compare("1\n2", result);
  }

  private static class AnyTypeProcessor
      implements ResourceProcessor {
    public void process(final Resource resource, final Reader reader, final Writer writer)
        throws IOException {
    }

    public void process(final Reader reader, final Writer writer)
        throws IOException {
    }
  }
  
  @Minimize
  private static class MinimizeAwareProcessor
      extends AnyTypeProcessor {
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
}
File
TestPreProcessorExecutor.java
Developer's decision
Combination
Kind of conflict
Class declaration
Comment
Import
Package declaration
Chunk
Conflicting content
import ro.isdc.wro.WroRuntimeException;
import ro.isdc.wro.config.Context;
<<<<<<< HEAD
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;
=======
import ro.isdc.wro.model.resource.locator.ClasspathUriLocator;
import ro.isdc.wro.model.resource.locator.ServletContextUriLocator;
import ro.isdc.wro.model.resource.locator.UriLocator;
import ro.isdc.wro.model.resource.locator.UrlUriLocator;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
import ro.isdc.wro.model.resource.locator.support.LocatorProvider;
import ro.isdc.wro.model.resource.locator.support.ServletContextResourceLocator;
import ro.isdc.wro.model.resource.locator.support.UrlResourceLocator;
Solution content
import ro.isdc.wro.WroRuntimeException;
import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;
import ro.isdc.wro.model.resource.locator.support.LocatorProvider;
import ro.isdc.wro.model.resource.locator.support.ServletContextResourceLocator;
import ro.isdc.wro.model.resource.locator.support.UrlResourceLocator;
File
TestConfigurableLocatorFactory.java
Developer's decision
Version 1
Kind of conflict
Import
Chunk
Conflicting content
import org.junit.BeforeClass;
import org.junit.Test;

<<<<<<< HEAD
import ro.isdc.wro.model.resource.locator.support.ServletContextResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ServletContextResourceLocator.LocatorStrategy;
=======
import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.locator.ServletContextUriLocator;
import ro.isdc.wro.model.resource.locator.ServletContextUriLocator.LocatorStrategy;
import ro.isdc.wro.model.resource.locator.UriLocator;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8


/**
Solution content
import ro.isdc.wro.model.resource.locator.support.ServletContextResourceLocator;
import org.junit.BeforeClass;
import org.junit.Test;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.locator.support.ServletContextResourceLocator.LocatorStrategy;


/**
File
TestDefaultUriLocatorFactory.java
Developer's decision
Combination
Kind of conflict
Import
Chunk
Conflicting content
  public void setUp() {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
 * @author Alex Objelean
 */
public class TestDefaultUriLocatorFactory {
<<<<<<< HEAD
  private DefaultResourceLocatorFactory victim;

=======
  private DefaultUriLocatorFactory victim;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
    victim = new DefaultResourceLocatorFactory();
Solution content
 * @author Alex Objelean
 */
public class TestDefaultUriLocatorFactory {
  private DefaultResourceLocatorFactory victim;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp() {
    victim = new DefaultResourceLocatorFactory();
File
TestDefaultUriLocatorFactory.java
Developer's decision
Combination
Kind of conflict
Annotation
Attribute
Method declaration
Chunk
Conflicting content
import org.apache.commons.lang3.Validate;
import org.junit.After;
<<<<<<< HEAD:wro4j-core/src/test/java/ro/isdc/wro/model/resource/locator/support/TestServletContextResourceLocator.java
import org.junit.Assert;
=======
import org.junit.AfterClass;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8:wro4j-core/src/test/java/ro/isdc/wro/model/resource/locator/TestServletContextUriLocator.java
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
Solution content
import org.apache.commons.lang3.Validate;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
File
TestServletContextResourceLocator.java
Developer's decision
None
Kind of conflict
Import
Chunk
Conflicting content
    Context.set(context, config);
  }

<<<<<<< HEAD:wro4j-core/src/test/java/ro/isdc/wro/model/resource/locator/support/TestServletContextResourceLocator.java
  private void useLocator(final ServletContextResourceLocator locator) {
    Validate.notNull(locator);
    this.victim = locator;
    new InjectorBuilder().build().inject(locator);
=======
  @After
  public void tearDown() {
    Context.unset();
  }

  /**
   * Initialize the locator by injecting all required fields.
   */
  private void initLocator(final ServletContextUriLocator locator) {
    final Injector injector = InjectorBuilder.create(new BaseWroManagerFactory()).build();
    injector.inject(locator);
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8:wro4j-core/src/test/java/ro/isdc/wro/model/resource/locator/TestServletContextUriLocator.java
  }

  @Test(expected = NullPointerException.class)
Solution content
    Context.set(context, config);
  }

  @After
  public void tearDown() {
    Context.unset();
  }

  private void useLocator(final ServletContextResourceLocator locator) {
    Validate.notNull(locator);
    this.victim = locator;
    new InjectorBuilder().build().inject(locator);
  }

  @Test(expected = NullPointerException.class)
File
TestServletContextResourceLocator.java
Developer's decision
Combination
Kind of conflict
Annotation
Attribute
Comment
Method declaration
Method invocation
Method signature
Variable
Chunk
Conflicting content
import org.junit.BeforeClass;
import org.junit.Test;

<<<<<<< HEAD
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;
=======
import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.locator.ClasspathUriLocator;
import ro.isdc.wro.model.resource.locator.UriLocator;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
import ro.isdc.wro.util.WroUtil;

Solution content
  
  }
  
  @Test
  @Test(expected = IOException.class)
  public void testWildcardPresent4() {
    locator.locateStream(null, null);
  }
/**
 * Copyright Alex Objelean
 */
package ro.isdc.wro.model.resource.locator.wildcard;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;
import ro.isdc.wro.util.WroUtil;


/**
 * @author Alex Objelean
 */
public class TestDefaultWildcardStreamLocator {
  private WildcardStreamLocator locator;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp() {
    locator = new DefaultWildcardStreamLocator();
  }
  
  @Test
  public void testNoWildcardPresent1() {
    assertFalse(locator.hasWildcard("test/resource.css"));
  }
  
  @Test
  public void testNoWildcardPresent2() {
    assertFalse(locator.hasWildcard("test/resource[a].css"));
  }
  
  @Test
  public void testWildcardPresent1() {
    assertTrue(locator.hasWildcard("test/*.css"));
  }
  
  @Test
  public void testWildcardPresent2() {
    assertTrue(locator.hasWildcard("test/test.?ss"));
  }
  
  @Test
  public void testWildcardPresent3() {
    assertTrue(locator.hasWildcard("test/**.???"));
    assertFalse(locator.hasWildcard("http://yui.yahooapis.com/combo?2.7.0/build/reset-fonts-grids/reset-fonts-grids.css&2.7.0/build/base/base-min.css&2.7.0/build/assets/skins/sam/skin.css"));
  }
  
  @Test(expected = IOException.class)
  public void cannotPassNullArgument()
      throws IOException {
  public void cannotPassNullFolder()
      throws IOException {
    locator.locateStream("/resource/*.css", null);
  }
  
  @Test(expected = IOException.class)
  public void cannotProcessUriWithoutWildcard()
      throws IOException {
    final File folder = new File(ClassLoader.getSystemResource("").getFile());
    locator.locateStream("/resource/noWildcard.css", folder);
  }
  
  @Test
  public void testWithValidFolder()
      throws IOException {
    final File folder = new File(ClassLoader.getSystemResource("").getFile());
    locator.locateStream("/resource/*.css", folder);
  }
  
  @Test(expected = IOException.class)
  public void testWithInvalidFolder()
      throws IOException {
    final File folder = new File(ClassLoader.getSystemResource("1.css").getFile());
    locator.locateStream("/resource/*.css", folder);
  }
  
  @Test
  public void testWildcardResourcesOrderedAlphabetically()
      throws IOException {
    locator = new DefaultWildcardStreamLocator() {
      @Override
      void triggerWildcardExpander(final Collection allFiles, final WildcardContext wildcardContext)
          throws IOException {
        final Collection filenameList = new ArrayList();
        for (final File file : allFiles) {
          filenameList.add(file.getName());
        }
        assertEquals(
            Arrays.toString(new String[] {
              "tools.expose-1.0.5.js", "tools.overlay-1.1.2.js", "tools.overlay.apple-1.0.1.js",
              "tools.overlay.gallery-1.0.0.js"
            }), Arrays.toString(filenameList.toArray()));
      };
    };
    final ResourceLocator classpathLocator = new ClasspathResourceLocator("classpath:" + WroUtil.toPackageAsFolder(getClass()) + "/*.js") {
      @Override
      public WildcardStreamLocator newWildcardStreamLocator() {
        return locator;
      }
    };
    Assert.assertNotNull(classpathLocator.getInputStream());
  }
  
  @Test
  public void testWildcardLocator()
      throws IOException {
    locator = new DefaultWildcardStreamLocator() {
      @Override
      void triggerWildcardExpander(final Collection allFiles, final WildcardContext wildcardContext)
          throws IOException {
        assertEquals(2, allFiles.size());
      };
    };
    final ResourceLocator classpathLocator = new ClasspathResourceLocator("classpath:" + WroUtil.toPackageAsFolder(getClass()) + "/*.css") {
      @Override
      public WildcardStreamLocator newWildcardStreamLocator() {
        return locator;
      }
    };
    classpathLocator.getInputStream();
  }
}
File
TestDefaultWildcardStreamLocator.java
Developer's decision
Manual
Kind of conflict
Import
Chunk
Conflicting content
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

<<<<<<< HEAD
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;
=======
import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.locator.ClasspathUriLocator;
import ro.isdc.wro.model.resource.locator.UriLocator;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8


/**
Solution content
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;


/**
File
TestJarWildcardStreamLocator.java
Developer's decision
Combination
Kind of conflict
Import
Chunk
Conflicting content
  public void shouldFindNoResourcesWhenNoneExist()
      throws IOException {
    final ThreadLocal> filenameListHolder = new ThreadLocal>();
<<<<<<< HEAD
    final JarWildcardStreamLocator jarStreamLocator = createJarLocator(filenameListHolder);
    //there are no js resources in the jar
    new ClasspathResourceLocator("classpath:com/**.js") {
      @Override
      public WildcardStreamLocator newWildcardStreamLocator() {
        return jarStreamLocator;
      }
    }.getInputStream();
=======
    final UriLocator uriLocator = createJarLocator(filenameListHolder);
    // there are no js resources in the jar
    uriLocator.locate("classpath:com/**.js");
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    final Collection filenameList = filenameListHolder.get();
    Assert.assertNotNull(filenameList);
    Assert.assertTrue(filenameList.isEmpty());
Solution content
    }.getInputStream();
    Assert.assertTrue(filenameList.isEmpty());
    final Collection filenameList = filenameListHolder.get();
    Assert.assertNotNull(filenameList);
  public void shouldFindNoResourcesWhenNoneExist()
      throws IOException {
    final ThreadLocal> filenameListHolder = new ThreadLocal>();
    final JarWildcardStreamLocator jarStreamLocator = createJarLocator(filenameListHolder);
    // there are no js resources in the jar
    new ClasspathResourceLocator("classpath:com/**.js") {
      @Override
      public WildcardStreamLocator newWildcardStreamLocator() {
        return jarStreamLocator;
      }
File
TestJarWildcardStreamLocator.java
Developer's decision
Version 1
Kind of conflict
Comment
Method invocation
Variable
Chunk
Conflicting content
import org.junit.BeforeClass;
import org.junit.Test;

<<<<<<< HEAD
=======
import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.ResourceType;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
import ro.isdc.wro.model.resource.processor.impl.CommentStripperProcessor;
import ro.isdc.wro.util.WroTestUtils;
Solution content
import org.junit.BeforeClass;
import org.junit.Test;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.processor.impl.CommentStripperProcessor;
import ro.isdc.wro.util.WroTestUtils;
File
TestCommentStripperProcessor.java
Developer's decision
Combination
Kind of conflict
Import
Chunk
Conflicting content
<<<<<<< HEAD

=======
 * @author Ivar Conradi Østhus
 */
public class TestCommentStripperProcessor {
  private final ResourceProcessor processor = new CommentStripperProcessor();
  private final ResourcePreProcessor processor = new CommentStripperProcessor();
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Test
  public void testFromFolder()
      throws Exception {
Solution content
 * @author Ivar Conradi Østhus
 */
public class TestCommentStripperProcessor {
  private final ResourceProcessor processor = new CommentStripperProcessor();
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Test
  public void testFromFolder()
      throws Exception {
File
TestCommentStripperProcessor.java
Developer's decision
Combination
Kind of conflict
Annotation
Attribute
Method declaration
Method invocation
Chunk
Conflicting content
 * @created Created on Aug 15, 2010
 */
public class TestConformColorsCssProcessor {
<<<<<<< HEAD
  private ResourceProcessor processor;

=======
  private ResourcePreProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Before
  public void setUp() {
    processor = new ConformColorsCssProcessor();
Solution content
 * @created Created on Aug 15, 2010
 */
public class TestConformColorsCssProcessor {
  private ResourceProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp() {
    processor = new ConformColorsCssProcessor();
File
TestConformColorsCssProcessor.java
Developer's decision
Combination
Kind of conflict
Annotation
Attribute
Method declaration
Chunk
Conflicting content
 * @author Alex Objelean
 */
public class TestConsoleStripperProcessor {
<<<<<<< HEAD
  private final ResourceProcessor processor = new ConsoleStripperProcessor();

=======
  private final ResourcePreProcessor processor = new ConsoleStripperProcessor();
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Test
  public void testFromFolder()
      throws Exception {
Solution content
 * @author Alex Objelean
 */
public class TestConsoleStripperProcessor {
  private final ResourceProcessor processor = new ConsoleStripperProcessor();
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Test
  public void testFromFolder()
      throws Exception {
File
TestConsoleStripperProcessor.java
Developer's decision
Combination
Kind of conflict
Annotation
Attribute
Method declaration
Method invocation
Chunk
Conflicting content
    });

import ro.isdc.wro.config.Context;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
        return super.locate(uri);
<<<<<<< HEAD
/*
 * Copyright (c) 2010. All rights reserved.
 */
package ro.isdc.wro.model.resource.processor;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.manager.factory.BaseWroManagerFactory;
import ro.isdc.wro.model.group.processor.Injector;
import ro.isdc.wro.model.group.processor.InjectorBuilder;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.factory.AbstractResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.factory.ResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.support.AbstractResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ServletContextResourceLocator;
import ro.isdc.wro.model.resource.locator.support.UrlResourceLocator;
import ro.isdc.wro.model.resource.processor.factory.SimpleProcessorsFactory;
import ro.isdc.wro.model.resource.processor.impl.css.CssDataUriPreProcessor;
import ro.isdc.wro.model.resource.processor.support.DataUriGenerator;
import ro.isdc.wro.util.WroTestUtils;


/**
 * Test for {@link CssDataUriPreProcessor} class.
 * 
 * @author Alex Objelean
 * @created Created on Mat 09, 2010
 */
public class TestCssDataUriPreProcessor {
  private final String PROXY_RESOURCE_PATH = "classpath:ro/isdc/wro/model/resource/processor/dataUri/proxyImage/";
  private ResourceProcessor processor;

  protected DataUriGenerator createMockDataUriGenerator() {
    try {
      final DataUriGenerator uriGenerator = Mockito.mock(DataUriGenerator.class);
import org.junit.Test;
import org.mockito.Mockito;

  public void shouldTransformResourcesFromFolder()
      }
      Mockito.when(uriGenerator.generateDataURI(Mockito.any(InputStream.class), Mockito.anyString())).thenReturn(
          "data:image/png;base64,iVBORw0KG");
      return uriGenerator;
    } catch (final Exception e) {
      throw new RuntimeException("Cannot create DataUriGenerator mock", e);
    }
  }

  @Before
  public void init()
      throws Exception {
    Context.set(Context.standaloneContext());
    processor = new CssDataUriPreProcessor() {
      @Override
      protected DataUriGenerator getDataUriGenerator() {
        return createMockDataUriGenerator();
      }
    };
    initProcessor(processor);
  }

  final void initProcessor(final ResourceProcessor processor) {
    final BaseWroManagerFactory factory = new BaseWroManagerFactory();
    factory.setLocatorFactory(createLocatorFactory());
    factory.setProcessorsFactory(new SimpleProcessorsFactory().addPreProcessor(processor));
    final Injector injector = InjectorBuilder.create(factory).build();
    injector.inject(processor);
  }
  
  /**
   * @return a locator factory which handles absolute url locations and failed servletContext relative url's by serving
   *         proxy resources from classpath. This is useful to make test pass without internet connection.
   */
  private ResourceLocatorFactory createLocatorFactory() {
    final ResourceLocatorFactory locatorFactory = new AbstractResourceLocatorFactory() {
      public ResourceLocator getLocator(final String uri) {
        return new AbstractResourceLocator() {
          public InputStream getInputStream()
              throws IOException {
            if (uri.startsWith(ServletContextResourceLocator.PREFIX)) {
              return new ClasspathResourceLocator(PROXY_RESOURCE_PATH + "test1.png").getInputStream();
            }
            try {
              return new UrlResourceLocator(uri).getInputStream();
            } catch (IOException e) {
              return new ClasspathResourceLocator(PROXY_RESOURCE_PATH + "test2.png").getInputStream();
            }
          }
        };
        }
    };
    return locatorFactory;
  }

  @Test
      throws Exception {
    final URL url = getClass().getResource("dataUri");

    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expected");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Test
  public void shouldTransformLargeResources()
      throws Exception {
    processor = new CssDataUriPreProcessor();
    initProcessor(processor);

    final URL url = getClass().getResource("dataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expectedLarge");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
}
=======
/*
 * Copyright (c) 2010. All rights reserved.
 */
package ro.isdc.wro.model.resource.processor;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import ro.isdc.wro.manager.factory.BaseWroManagerFactory;
import ro.isdc.wro.model.group.processor.Injector;
import ro.isdc.wro.model.group.processor.InjectorBuilder;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.locator.ClasspathUriLocator;
import ro.isdc.wro.model.resource.locator.ServletContextUriLocator;
import ro.isdc.wro.model.resource.locator.UrlUriLocator;
import ro.isdc.wro.model.resource.locator.factory.SimpleUriLocatorFactory;
import ro.isdc.wro.model.resource.locator.factory.UriLocatorFactory;
import ro.isdc.wro.model.resource.processor.factory.SimpleProcessorsFactory;
import ro.isdc.wro.model.resource.processor.impl.css.CssDataUriPreProcessor;
import ro.isdc.wro.model.resource.processor.support.DataUriGenerator;
import ro.isdc.wro.util.WroTestUtils;


/**
 * Test for {@link CssDataUriPreProcessor} class.
 * 
 * @author Alex Objelean
 * @created Created on Mat 09, 2010
 */
public class TestCssDataUriPreProcessor {
  private final String PROXY_RESOURCE_PATH = "classpath:ro/isdc/wro/model/resource/processor/dataUri/proxyImage/";
  private ResourcePreProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  protected DataUriGenerator createMockDataUriGenerator() {
    try {
      final DataUriGenerator uriGenerator = Mockito.mock(DataUriGenerator.class);
      Mockito.when(uriGenerator.generateDataURI(Mockito.any(InputStream.class), Mockito.anyString())).thenReturn(
          "data:image/png;base64,iVBORw0KG");
      return uriGenerator;
    } catch (final Exception e) {
      throw new RuntimeException("Cannot create DataUriGenerator mock", e);
    }
  }
  
  @Before
  public void setUp()
      throws Exception {
    Context.set(Context.standaloneContext());
    processor = new CssDataUriPreProcessor() {
      @Override
      protected DataUriGenerator getDataUriGenerator() {
        return createMockDataUriGenerator();
      }
    };
    initProcessor(processor);
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  final void initProcessor(final ResourcePreProcessor processor) {
    final BaseWroManagerFactory factory = new BaseWroManagerFactory();
    factory.setUriLocatorFactory(createLocatorFactory());
    factory.setProcessorsFactory(new SimpleProcessorsFactory().addPreProcessor(processor));
    final Injector injector = InjectorBuilder.create(factory).build();
    injector.inject(processor);
  }
  
  /**
   * @return a locator factory which handles absolute url locations and failed servletContext relative url's by serving
   *         proxy resources from classpath. This is useful to make test pass without internet connection.
   */
  private UriLocatorFactory createLocatorFactory() {
    final UriLocatorFactory locatorFactory = new SimpleUriLocatorFactory().addLocator(new ServletContextUriLocator() {
      @Override
      public InputStream locate(final String uri)
          throws IOException {
        try {
          return super.locate(uri);
        } catch (final Exception e) {
          return new ClasspathUriLocator().locate(PROXY_RESOURCE_PATH + "test1.png");
        }
      }
    }).addLocator(new UrlUriLocator() {
      @Override
      public InputStream locate(final String uri)
          throws IOException {
        // avoid external connections
        if (uri.startsWith("http")) {
          return new ClasspathUriLocator().locate(PROXY_RESOURCE_PATH + "test2.png");
        }
    return locatorFactory;
  }
  
  @Test
  public void shouldTransformResourcesFromFolder()
      throws Exception {
    final URL url = getClass().getResource("dataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expected");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Test
  public void shouldTransformLargeResources()
      throws Exception {
    processor = new CssDataUriPreProcessor();
    initProcessor(processor);
    
    final URL url = getClass().getResource("dataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expectedLarge");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
}
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
Solution content
  
  public static void onAfterClass() {
  @BeforeClass
  public static void onBeforeClass() {
/*
 * Copyright (c) 2010. All rights reserved.
 */
package ro.isdc.wro.model.resource.processor;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.manager.factory.BaseWroManagerFactory;
import ro.isdc.wro.model.group.processor.Injector;
import ro.isdc.wro.model.group.processor.InjectorBuilder;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.locator.ResourceLocator;
import ro.isdc.wro.model.resource.locator.factory.AbstractResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.factory.ResourceLocatorFactory;
import ro.isdc.wro.model.resource.locator.support.AbstractResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;
import ro.isdc.wro.model.resource.locator.support.ServletContextResourceLocator;
import ro.isdc.wro.model.resource.locator.support.UrlResourceLocator;
import ro.isdc.wro.model.resource.processor.factory.SimpleProcessorsFactory;
import ro.isdc.wro.model.resource.processor.impl.css.CssDataUriPreProcessor;
import ro.isdc.wro.model.resource.processor.support.DataUriGenerator;
import ro.isdc.wro.util.WroTestUtils;


/**
 * Test for {@link CssDataUriPreProcessor} class.
 * 
 * @author Alex Objelean
 * @created Created on Mat 09, 2010
 */
public class TestCssDataUriPreProcessor {
  private final String PROXY_RESOURCE_PATH = "classpath:ro/isdc/wro/model/resource/processor/dataUri/proxyImage/";
  private ResourceProcessor processor;
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
    assertEquals(0, Context.countActive());
  }
  
  protected DataUriGenerator createMockDataUriGenerator() {
    try {
      final DataUriGenerator uriGenerator = Mockito.mock(DataUriGenerator.class);
      Mockito.when(uriGenerator.generateDataURI(Mockito.any(InputStream.class), Mockito.anyString())).thenReturn(
          "data:image/png;base64,iVBORw0KG");
      return uriGenerator;
    } catch (final Exception e) {
      throw new RuntimeException("Cannot create DataUriGenerator mock", e);
    }
  }
  
  @Before
  public void setUp()
      throws Exception {
    Context.set(Context.standaloneContext());
    processor = new CssDataUriPreProcessor() {
      @Override
      protected DataUriGenerator getDataUriGenerator() {
        return createMockDataUriGenerator();
      }
    };
    initProcessor(processor);
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  final void initProcessor(final ResourceProcessor processor) {
    final BaseWroManagerFactory factory = new BaseWroManagerFactory();
    factory.setLocatorFactory(createLocatorFactory());
    factory.setProcessorsFactory(new SimpleProcessorsFactory().addPreProcessor(processor));
    final Injector injector = InjectorBuilder.create(factory).build();
    injector.inject(processor);
  }
  
  /**
   * @return a locator factory which handles absolute url locations and failed servletContext relative url's by serving
   *         proxy resources from classpath. This is useful to make test pass without internet connection.
   */
  private ResourceLocatorFactory createLocatorFactory() {
    final ResourceLocatorFactory locatorFactory = new AbstractResourceLocatorFactory() {
      public ResourceLocator getLocator(final String uri) {
        return new AbstractResourceLocator() {
          public InputStream getInputStream()
              throws IOException {
            if (uri.startsWith(ServletContextResourceLocator.PREFIX)) {
              return new ClasspathResourceLocator(PROXY_RESOURCE_PATH + "test1.png").getInputStream();
            }
            try {
              return new UrlResourceLocator(uri).getInputStream();
            } catch (IOException e) {
              return new ClasspathResourceLocator(PROXY_RESOURCE_PATH + "test2.png").getInputStream();
            }
          }
        };
        }
    };
    return locatorFactory;
  }
  
  @Test
  public void shouldTransformResourcesFromFolder()
      throws Exception {
    final URL url = getClass().getResource("dataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expected");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Test
  public void shouldTransformLargeResources()
      throws Exception {
    processor = new CssDataUriPreProcessor();
    initProcessor(processor);
    
    final URL url = getClass().getResource("dataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expectedLarge");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
}
File
TestCssDataUriPreProcessor.java
Developer's decision
Combination
Kind of conflict
Class declaration
Comment
Import
Package declaration
Chunk
Conflicting content
  private CssUrlRewritingProcessor processor;
  
  private static final String CSS_INPUT_NAME = "cssUrlRewriting.css";
<<<<<<< HEAD

=======
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Before
  public void setUp() {
    Context.set(Context.standaloneContext());
Solution content
  @AfterClass
  @BeforeClass
  
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  
  /**
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp() {
    Context.set(Context.standaloneContext());
    processor = new CssUrlRewritingProcessor() {
      @Inject
      private ResourceAuthorizationManager authorizationManager;
      
      @Override
      protected void onProcessCompleted() {
        if (authorizationManager instanceof DefaultResourceAuthorizationManager) {
          LOG.debug("allowed urls: {}", ((DefaultResourceAuthorizationManager) authorizationManager).list());
        }
      }
      
      @Override
      protected String getUrlPrefix() {
        return "[WRO-PREFIX]?id=";
      }
    };
    WroTestUtils.createInjector().inject(processor);
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  @Test
  public void testFromFolder()
      throws Exception {
    final URL url = getClass().getResource("cssUrlRewriting");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expected");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  /**
   * When background url contains a dataUri, the rewriting should have no effect.
   */
  @Test
  public void processResourceWithDataUriEncodedValue()
      throws IOException {
    final String resourceUri = "classpath:cssUrlRewriting-dataUri.css";
    WroTestUtils.compareProcessedResourceContents(resourceUri, resourceUri, new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        processor.process(createMockResource(resourceUri), reader, writer);
      }
    });
  }
  
  /**
   * Test a classpath css resource.
   */
  @Test
  public void processClasspathResourceType()
      throws IOException {
    final String resourceUri = "classpath:" + CSS_INPUT_NAME;
    WroTestUtils.compareProcessedResourceContents(resourceUri, "classpath:cssUrlRewriting-classpath-outcome.css",
      new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource(resourceUri), reader, writer);
        }
      });
  }
  
  /**
   * @param resourceUri
   *          the resource should return.
   * @return mocked {@link Resource} object.
   */
  private Resource createMockResource(final String resourceUri) {
    final Resource resource = Mockito.mock(Resource.class);
    Mockito.when(resource.getUri()).thenReturn(resourceUri);
    return resource;
  }
  
  /**
   * Test a servletContext css resource.
   */
  @Test
  public void processServletContextResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-servletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
   * Test a servletContext css resource.
   */
  @Test
  public void processServletContextResourceTypeWithAggregatedFolderSet()
      throws IOException {
    Context.get().setAggregatedFolderPath("wro/css");
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-servletContext-aggregatedFolderSet-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a resource which is located inside WEB-INF protected folder.
   */
  @Test
  public void processWEBINFServletContextResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-WEBINFservletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/WEB-INF/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a url css resource.
   */
  @Test
  public void processUrlResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-url-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("http://www.site.com/static/css/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  @Test
  public void checkUrlIsAllowed()
      throws Exception {
    processClasspathResourceType();
    assertFalse(processor.isUriAllowed("/WEB-INF/web.xml"));
    assertTrue(processor.isUriAllowed("classpath:folder/img.gif"));
  }
  
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
  
  /**
   * Tests that the Context injected into processor is thread safe and uses the values of set by the thread which runs
   * the processor.
   */
  @Test
  public void shouldUseCorrectAggregatedFolderSetEvenWhenContextIsChangedInAnotherThread()
      throws Exception {
    WroTestUtils.createInjector().inject(processor);
    WroTestUtils.runConcurrently(new Callable() {
      public Void call()
          throws Exception {
        try {
          Context.set(Context.standaloneContext());
          if (new Random().nextBoolean()) {
            processServletContextResourceTypeWithAggregatedFolderSet();
          } else {
            // ensure that a thread uses null aggregatedFolderPath which is injected into processor.
            Context.get().setAggregatedFolderPath(null);
          }
          return null;
        } finally {
          Context.unset();
        }
      }
    }, 20);
  }
}
File
TestCssUrlRewritingProcessor.java
Developer's decision
Manual
Kind of conflict
Annotation
Method declaration
Chunk
Conflicting content
=======
        throws IOException {
  public void processResourceWithDataUriEncodedValue()
      throws IOException {
    final String resourceUri = "classpath:cssUrlRewriting-dataUri.css";
<<<<<<< HEAD
    WroTestUtils.compareProcessedResourceContents(resourceUri, resourceUri, new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
    WroTestUtils.compareProcessedResourceContents(resourceUri, resourceUri, new ResourcePostProcessor() {
      public void process(final Reader reader, final Writer writer)
          throws IOException {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
        processor.process(createMockResource(resourceUri), reader, writer);
      }
    });
Solution content
import java.net.URL;
import org.junit.After;
/*
 * Copyright (c) 2008. All rights reserved.
 */
package ro.isdc.wro.model.resource.processor;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.Random;
import java.util.concurrent.Callable;

   * the processor.
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.group.Inject;
import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.processor.impl.css.CssUrlRewritingProcessor;
import ro.isdc.wro.model.resource.support.DefaultResourceAuthorizationManager;
import ro.isdc.wro.model.resource.support.ResourceAuthorizationManager;
import ro.isdc.wro.util.WroTestUtils;


/**
 * Test for {@link CssUrlRewritingProcessor} class.
 * 
 * @author Alex Objelean
 * @created Created on Nov 3, 2008
 */
public class TestCssUrlRewritingProcessor {
  private static final Logger LOG = LoggerFactory.getLogger(TestCssUrlRewritingProcessor.class);
  private CssUrlRewritingProcessor processor;
  
  private static final String CSS_INPUT_NAME = "cssUrlRewriting.css";
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp() {
    Context.set(Context.standaloneContext());
    processor = new CssUrlRewritingProcessor() {
      @Inject
      private ResourceAuthorizationManager authorizationManager;
      
      @Override
      protected void onProcessCompleted() {
        if (authorizationManager instanceof DefaultResourceAuthorizationManager) {
          LOG.debug("allowed urls: {}", ((DefaultResourceAuthorizationManager) authorizationManager).list());
        }
      }
      
      @Override
      protected String getUrlPrefix() {
        return "[WRO-PREFIX]?id=";
      }
    };
    WroTestUtils.createInjector().inject(processor);
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  @Test
  public void testFromFolder()
      throws Exception {
    final URL url = getClass().getResource("cssUrlRewriting");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expected");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  /**
   * When background url contains a dataUri, the rewriting should have no effect.
   */
  @Test
  public void processResourceWithDataUriEncodedValue()
      throws IOException {
    final String resourceUri = "classpath:cssUrlRewriting-dataUri.css";
    WroTestUtils.compareProcessedResourceContents(resourceUri, resourceUri, new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        processor.process(createMockResource(resourceUri), reader, writer);
      }
    });
  }
  
  /**
   * Test a classpath css resource.
   */
  @Test
  public void processClasspathResourceType()
      throws IOException {
    final String resourceUri = "classpath:" + CSS_INPUT_NAME;
   */
  @Test
    WroTestUtils.compareProcessedResourceContents(resourceUri, "classpath:cssUrlRewriting-classpath-outcome.css",
      new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource(resourceUri), reader, writer);
        }
      });
  }
  
  /**
   * @param resourceUri
   *          the resource should return.
   * @return mocked {@link Resource} object.
   */
  private Resource createMockResource(final String resourceUri) {
    final Resource resource = Mockito.mock(Resource.class);
    Mockito.when(resource.getUri()).thenReturn(resourceUri);
    return resource;
  }
  
  /**
   * Test a servletContext css resource.
   */
  @Test
  public void processServletContextResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-servletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a servletContext css resource.
   */
  @Test
  public void processServletContextResourceTypeWithAggregatedFolderSet()
      throws IOException {
    Context.get().setAggregatedFolderPath("wro/css");
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-servletContext-aggregatedFolderSet-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a resource which is located inside WEB-INF protected folder.
   */
  @Test
  public void processWEBINFServletContextResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-WEBINFservletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/WEB-INF/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a url css resource.
   */
  @Test
  public void processUrlResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-url-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("http://www.site.com/static/css/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  @Test
  public void checkUrlIsAllowed()
      throws Exception {
    processClasspathResourceType();
    assertFalse(processor.isUriAllowed("/WEB-INF/web.xml"));
    assertTrue(processor.isUriAllowed("classpath:folder/img.gif"));
  }
  
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
  
  /**
   * Tests that the Context injected into processor is thread safe and uses the values of set by the thread which runs
  public void shouldUseCorrectAggregatedFolderSetEvenWhenContextIsChangedInAnotherThread()
      throws Exception {
    WroTestUtils.createInjector().inject(processor);
    WroTestUtils.runConcurrently(new Callable() {
      public Void call()
          throws Exception {
        try {
          Context.set(Context.standaloneContext());
          if (new Random().nextBoolean()) {
            processServletContextResourceTypeWithAggregatedFolderSet();
          } else {
            // ensure that a thread uses null aggregatedFolderPath which is injected into processor.
            Context.get().setAggregatedFolderPath(null);
          }
          return null;
        } finally {
          Context.unset();
        }
      }
    }, 20);
  }
}
File
TestCssUrlRewritingProcessor.java
Developer's decision
Manual
Kind of conflict
Method invocation
Chunk
Conflicting content
      throws IOException {
    final String resourceUri = "classpath:" + CSS_INPUT_NAME;
    WroTestUtils.compareProcessedResourceContents(resourceUri, "classpath:cssUrlRewriting-classpath-outcome.css",
<<<<<<< HEAD
      new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource(resourceUri), reader, writer);
        }
      });
=======
        new ResourcePostProcessor() {
          public void process(final Reader reader, final Writer writer)
              throws IOException {
            processor.process(createMockResource(resourceUri), reader, writer);
          }
        });
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  }
  
  /**
Solution content
  @Test
        }
      });
  }
  
      new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource(resourceUri), reader, writer);
        }
      });
  }
  
  /**
   * @param resourceUri
   *          the resource should return.
   * @return mocked {@link Resource} object.
   */
  private Resource createMockResource(final String resourceUri) {
    final Resource resource = Mockito.mock(Resource.class);
    Mockito.when(resource.getUri()).thenReturn(resourceUri);
    return resource;
  }
  
  /**
   * Test a servletContext css resource.
   */
  @Test
  public void processServletContextResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-servletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a servletContext css resource.
   */
  @Test
  public void processServletContextResourceTypeWithAggregatedFolderSet()
      throws IOException {
    Context.get().setAggregatedFolderPath("wro/css");
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-servletContext-aggregatedFolderSet-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a resource which is located inside WEB-INF protected folder.
   */
  @Test
  public void processWEBINFServletContextResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-WEBINFservletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/WEB-INF/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a url css resource.
   */
  @Test
  public void processUrlResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-url-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("http://www.site.com/static/css/" + CSS_INPUT_NAME), reader, writer);
  public void checkUrlIsAllowed()
      throws Exception {
    processClasspathResourceType();
    assertFalse(processor.isUriAllowed("/WEB-INF/web.xml"));
    assertTrue(processor.isUriAllowed("classpath:folder/img.gif"));
  }
  
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
  
  /**
   * Tests that the Context injected into processor is thread safe and uses the values of set by the thread which runs
   * the processor.
   */
  @Test
  public void shouldUseCorrectAggregatedFolderSetEvenWhenContextIsChangedInAnotherThread()
      throws Exception {
    WroTestUtils.createInjector().inject(processor);
    WroTestUtils.runConcurrently(new Callable() {
      public Void call()
          throws Exception {
        try {
          Context.set(Context.standaloneContext());
          if (new Random().nextBoolean()) {
            processServletContextResourceTypeWithAggregatedFolderSet();
          } else {
            // ensure that a thread uses null aggregatedFolderPath which is injected into processor.
            Context.get().setAggregatedFolderPath(null);
          }
          return null;
        } finally {
          Context.unset();
        }
      }
    }, 20);
  }
}
File
TestCssUrlRewritingProcessor.java
Developer's decision
Manual
Kind of conflict
Method invocation
Chunk
Conflicting content
  public void processServletContextResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
<<<<<<< HEAD
      "classpath:cssUrlRewriting-servletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
=======
        "classpath:cssUrlRewriting-servletContext-outcome.css", new ResourcePostProcessor() {
          public void process(final Reader reader, final Writer writer)
              throws IOException {
            processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
          }
        });
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  }
  
  /**
Solution content
  @Test
      "classpath:cssUrlRewriting-servletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a servletContext css resource.
   */
  @Test
  public void processServletContextResourceTypeWithAggregatedFolderSet()
      throws IOException {
    Context.get().setAggregatedFolderPath("wro/css");
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-servletContext-aggregatedFolderSet-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a resource which is located inside WEB-INF protected folder.
   */
  @Test
  public void processWEBINFServletContextResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-WEBINFservletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/WEB-INF/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a url css resource.
   */
  @Test
  public void processUrlResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-url-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("http://www.site.com/static/css/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  public void checkUrlIsAllowed()
      throws Exception {
    processClasspathResourceType();
    assertFalse(processor.isUriAllowed("/WEB-INF/web.xml"));
    assertTrue(processor.isUriAllowed("classpath:folder/img.gif"));
  }
  
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
  
  /**
   * Tests that the Context injected into processor is thread safe and uses the values of set by the thread which runs
   * the processor.
   */
  @Test
  public void shouldUseCorrectAggregatedFolderSetEvenWhenContextIsChangedInAnotherThread()
      throws Exception {
    WroTestUtils.createInjector().inject(processor);
    WroTestUtils.runConcurrently(new Callable() {
      public Void call()
          throws Exception {
        try {
          Context.set(Context.standaloneContext());
          if (new Random().nextBoolean()) {
            processServletContextResourceTypeWithAggregatedFolderSet();
          } else {
            // ensure that a thread uses null aggregatedFolderPath which is injected into processor.
            Context.get().setAggregatedFolderPath(null);
          }
          return null;
        } finally {
          Context.unset();
        }
      }
    }, 20);
  }
}
File
TestCssUrlRewritingProcessor.java
Developer's decision
Manual
Kind of conflict
Method invocation
Chunk
Conflicting content
      throws IOException {
    Context.get().setAggregatedFolderPath("wro/css");
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
<<<<<<< HEAD
      "classpath:cssUrlRewriting-servletContext-aggregatedFolderSet-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
=======
        "classpath:cssUrlRewriting-servletContext-aggregatedFolderSet-outcome.css", new ResourcePostProcessor() {
          public void process(final Reader reader, final Writer writer)
              throws IOException {
            processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
          }
        });
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  }
  
  /**
Solution content
        try {
      "classpath:cssUrlRewriting-servletContext-aggregatedFolderSet-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/static/img/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a resource which is located inside WEB-INF protected folder.
   */
  @Test
  public void processWEBINFServletContextResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-WEBINFservletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/WEB-INF/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a url css resource.
   */
  @Test
  public void processUrlResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-url-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("http://www.site.com/static/css/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  @Test
  public void checkUrlIsAllowed()
      throws Exception {
    processClasspathResourceType();
    assertFalse(processor.isUriAllowed("/WEB-INF/web.xml"));
    assertTrue(processor.isUriAllowed("classpath:folder/img.gif"));
  }
  
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
  
  /**
   * Tests that the Context injected into processor is thread safe and uses the values of set by the thread which runs
   * the processor.
   */
  @Test
  public void shouldUseCorrectAggregatedFolderSetEvenWhenContextIsChangedInAnotherThread()
      throws Exception {
    WroTestUtils.createInjector().inject(processor);
    WroTestUtils.runConcurrently(new Callable() {
      public Void call()
          throws Exception {
          Context.set(Context.standaloneContext());
          if (new Random().nextBoolean()) {
            processServletContextResourceTypeWithAggregatedFolderSet();
          } else {
            // ensure that a thread uses null aggregatedFolderPath which is injected into processor.
            Context.get().setAggregatedFolderPath(null);
          }
          return null;
        } finally {
          Context.unset();
        }
      }
    }, 20);
  }
}
File
TestCssUrlRewritingProcessor.java
Developer's decision
Manual
Kind of conflict
Method invocation
Chunk
Conflicting content
  
  /**
  public void processWEBINFServletContextResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
<<<<<<< HEAD
      "classpath:cssUrlRewriting-WEBINFservletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/WEB-INF/" + CSS_INPUT_NAME), reader, writer);
        }
      });
=======
        "classpath:cssUrlRewriting-WEBINFservletContext-outcome.css", new ResourcePostProcessor() {
          public void process(final Reader reader, final Writer writer)
              throws IOException {
            processor.process(createMockResource("/WEB-INF/" + CSS_INPUT_NAME), reader, writer);
          }
        });
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  }
Solution content
      "classpath:cssUrlRewriting-WEBINFservletContext-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("/WEB-INF/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  /**
   * Test a url css resource.
   */
  @Test
  public void processUrlResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
      "classpath:cssUrlRewriting-url-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("http://www.site.com/static/css/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  @Test
  public void checkUrlIsAllowed()
      throws Exception {
    processClasspathResourceType();
    assertFalse(processor.isUriAllowed("/WEB-INF/web.xml"));
    assertTrue(processor.isUriAllowed("classpath:folder/img.gif"));
  }
  
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
  
  /**
   * Tests that the Context injected into processor is thread safe and uses the values of set by the thread which runs
   * the processor.
   */
  @Test
  public void shouldUseCorrectAggregatedFolderSetEvenWhenContextIsChangedInAnotherThread()
      throws Exception {
    WroTestUtils.createInjector().inject(processor);
    WroTestUtils.runConcurrently(new Callable() {
      public Void call()
          throws Exception {
        try {
          Context.set(Context.standaloneContext());
          if (new Random().nextBoolean()) {
            processServletContextResourceTypeWithAggregatedFolderSet();
          } else {
            // ensure that a thread uses null aggregatedFolderPath which is injected into processor.
            Context.get().setAggregatedFolderPath(null);
          }
          return null;
        } finally {
          Context.unset();
        }
      }
    }, 20);
  }
}
File
TestCssUrlRewritingProcessor.java
Developer's decision
Manual
Kind of conflict
Method invocation
Chunk
Conflicting content
  public void processUrlResourceType()
      throws IOException {
    WroTestUtils.compareProcessedResourceContents("classpath:" + CSS_INPUT_NAME,
<<<<<<< HEAD
      "classpath:cssUrlRewriting-url-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("http://www.site.com/static/css/" + CSS_INPUT_NAME), reader, writer);
        }
      });
=======
        "classpath:cssUrlRewriting-url-outcome.css", new ResourcePostProcessor() {
          public void process(final Reader reader, final Writer writer)
              throws IOException {
            processor.process(createMockResource("http://www.site.com/static/css/" + CSS_INPUT_NAME), reader, writer);
          }
        });
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  }
  
  @Test
Solution content
      "classpath:cssUrlRewriting-url-outcome.css", new ResourceProcessor() {
        public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
          processor.process(createMockResource("http://www.site.com/static/css/" + CSS_INPUT_NAME), reader, writer);
        }
      });
  }
  
  @Test
  public void checkUrlIsAllowed()
      throws Exception {
    processClasspathResourceType();
    assertFalse(processor.isUriAllowed("/WEB-INF/web.xml"));
    assertTrue(processor.isUriAllowed("classpath:folder/img.gif"));
  }
  
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
  
  /**
   * Tests that the Context injected into processor is thread safe and uses the values of set by the thread which runs
   * the processor.
   */
  @Test
  public void shouldUseCorrectAggregatedFolderSetEvenWhenContextIsChangedInAnotherThread()
      throws Exception {
    WroTestUtils.createInjector().inject(processor);
    WroTestUtils.runConcurrently(new Callable() {
      public Void call()
          throws Exception {
        try {
          Context.set(Context.standaloneContext());
          if (new Random().nextBoolean()) {
            processServletContextResourceTypeWithAggregatedFolderSet();
          } else {
            // ensure that a thread uses null aggregatedFolderPath which is injected into processor.
            Context.get().setAggregatedFolderPath(null);
          }
          return null;
        } finally {
          Context.unset();
        }
      }
    }, 20);
  }
}
File
TestCssUrlRewritingProcessor.java
Developer's decision
Manual
Kind of conflict
Method invocation
Chunk
Conflicting content
  public void setUp() {
 * @created Created on Mat 09, 2010
 */
public class TestDuplicateAwareCssDataUriPreProcessor {
<<<<<<< HEAD
  private ResourceProcessor processor;


=======
  private ResourcePreProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Before
    processor = new DuplicatesAwareCssDataUriPreProcessor();
Solution content
  /**
    });
  }
  
/*
 * Copyright (c) 2010. All rights reserved.
 */
package ro.isdc.wro.model.resource.processor;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.net.URL;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.processor.impl.css.CssDataUriPreProcessor;
import ro.isdc.wro.model.resource.processor.impl.css.DuplicatesAwareCssDataUriPreProcessor;
import ro.isdc.wro.util.WroTestUtils;


/**
 * Test for {@link CssDataUriPreProcessor} class.
 * 
 * @author Alex Objelean
 * @created Created on Mat 09, 2010
 */
public class TestDuplicateAwareCssDataUriPreProcessor {
  private ResourceProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp() {
    processor = new DuplicatesAwareCssDataUriPreProcessor();
    Context.set(Context.standaloneContext());
    WroTestUtils.initProcessor(processor);
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  /**
   * Check if a large dataUri with more than 32KB does not replace original url.
   */
  @Test
  public void processLargeDataUri()
      throws Exception {
    final URL url = getClass().getResource("duplicateAwareDataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expected");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
        throws IOException {
        processor.process(createMockResource("file:" + testFolder.getPath() + "/test.css"), reader, writer);
      }
   * @param resourceUri
   *          the resource should return.
   * @return mocked {@link Resource} object.
   */
  private Resource createMockResource(final String resourceUri) {
    final Resource resource = Mockito.mock(Resource.class);
    Mockito.when(resource.getUri()).thenReturn(resourceUri);
    return resource;
  }
}
File
TestDuplicateAwareCssDataUriPreProcessor.java
Developer's decision
Manual
Kind of conflict
Annotation
Attribute
Method declaration
Chunk
Conflicting content
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expected");
<<<<<<< HEAD
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
        throws IOException {
        processor.process(createMockResource("file:" + testFolder.getPath() + "/test.css"), reader, writer);
      }
    });
=======
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css",
        WroUtil.newResourceProcessor(createMockResource("file:" + testFolder.getPath() + "/test.css"), processor));
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  }
  
  /**
Solution content
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
        throws IOException {
        processor.process(createMockResource("file:" + testFolder.getPath() + "/test.css"), reader, writer);
      }
    });
  }
  
  /**
   * @param resourceUri
   *          the resource should return.
   * @return mocked {@link Resource} object.
   */
  private Resource createMockResource(final String resourceUri) {
    final Resource resource = Mockito.mock(Resource.class);
    Mockito.when(resource.getUri()).thenReturn(resourceUri);
    return resource;
  }
}
File
TestDuplicateAwareCssDataUriPreProcessor.java
Developer's decision
Manual
Kind of conflict
Method invocation
Chunk
Conflicting content
import org.junit.BeforeClass;
    };
    //find a way to use a custom uriLocator
import org.junit.Test;
<<<<<<< HEAD
/*
 * Copyright (c) 2010. All rights reserved.
 */
package ro.isdc.wro.model.resource.processor;

import java.io.File;
import java.net.URL;

import org.junit.Before;
import org.junit.Test;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.processor.impl.css.CssDataUriPreProcessor;
import ro.isdc.wro.model.resource.processor.impl.css.FallbackCssDataUriProcessor;
import ro.isdc.wro.model.resource.processor.support.DataUriGenerator;
import ro.isdc.wro.util.WroTestUtils;


/**
 * Test for {@link CssDataUriPreProcessor} class.
 *
 * @author Alex Objelean
 * @created Created on Mat 09, 2010
 */
public class TestFallbackCssDataUriProcessor
    extends TestCssDataUriPreProcessor {
  private ResourceProcessor processor;

  @Override
  @Before
  public void init() {
    Context.set(Context.standaloneContext());
    processor = new FallbackCssDataUriProcessor() {
      @Override
      protected DataUriGenerator getDataUriGenerator() {
        return createMockDataUriGenerator();
      }
    initProcessor(processor);
  }

  @Override
  @Test
  public void shouldTransformResourcesFromFolder()
      throws Exception {
    final URL url = getClass().getResource("dataUri");

    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expectedFallback");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Override
  @Test
  public void shouldTransformLargeResources()
      throws Exception {
    processor = new CssDataUriPreProcessor();
    initProcessor(processor);
    
    final URL url = getClass().getResource("dataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expectedFallbackLarge");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Override
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
}
=======
/*
 * Copyright (c) 2010. All rights reserved.
 */
package ro.isdc.wro.model.resource.processor;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.net.URL;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;

import ro.isdc.wro.config.Context;
  public void shouldTransformLargeResources()
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.processor.impl.css.CssDataUriPreProcessor;
import ro.isdc.wro.model.resource.processor.impl.css.FallbackCssDataUriProcessor;
import ro.isdc.wro.model.resource.processor.support.DataUriGenerator;
import ro.isdc.wro.util.WroTestUtils;


/**
 * Test for {@link CssDataUriPreProcessor} class.
 * 
 * @author Alex Objelean
 * @created Created on Mat 09, 2010
 */
public class TestFallbackCssDataUriProcessor
    extends TestCssDataUriPreProcessor {
  private ResourcePreProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Override
  @Before
  public void setUp() {
    Context.set(Context.standaloneContext());
    processor = new FallbackCssDataUriProcessor() {
      @Override
      protected DataUriGenerator getDataUriGenerator() {
        return createMockDataUriGenerator();
      }
    };
    // find a way to use a custom uriLocator
    initProcessor(processor);
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  @Override
  @Test
  public void shouldTransformResourcesFromFolder()
      throws Exception {
    final URL url = getClass().getResource("dataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expectedFallback");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Override
  @Test
      throws Exception {
    processor = new CssDataUriPreProcessor();
    initProcessor(processor);
    
    final URL url = getClass().getResource("dataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expectedFallbackLarge");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Override
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
}
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
Solution content
/*
 * Copyright (c) 2010. All rights reserved.
 */
package ro.isdc.wro.model.resource.processor;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.net.URL;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.processor.impl.css.CssDataUriPreProcessor;
import ro.isdc.wro.model.resource.processor.impl.css.FallbackCssDataUriProcessor;
import ro.isdc.wro.model.resource.processor.support.DataUriGenerator;
import ro.isdc.wro.util.WroTestUtils;


/**
 * Test for {@link CssDataUriPreProcessor} class.
 * 
 * @author Alex Objelean
 * @created Created on Mat 09, 2010
 */
public class TestFallbackCssDataUriProcessor
    extends TestCssDataUriPreProcessor {
  private ResourceProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Override
  @Before
  public void setUp() {
    Context.set(Context.standaloneContext());
    processor = new FallbackCssDataUriProcessor() {
      @Override
      protected DataUriGenerator getDataUriGenerator() {
        return createMockDataUriGenerator();
      }
    };
    // find a way to use a custom uriLocator
    initProcessor(processor);
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  @Override
  @Test
  public void shouldTransformResourcesFromFolder()
      throws Exception {
    final URL url = getClass().getResource("dataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expectedFallback");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Override
  @Test
  public void shouldTransformLargeResources()
      throws Exception {
    processor = new CssDataUriPreProcessor();
    initProcessor(processor);
    
    final URL url = getClass().getResource("dataUri");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expectedFallbackLarge");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Override
  @Test
  public void shouldSupportOnlyCssResources() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
}
File
TestFallbackCssDataUriProcessor.java
Developer's decision
Combination
Kind of conflict
Class declaration
Comment
Import
Package declaration
Chunk
Conflicting content
  }
  
  @Test
<<<<<<< HEAD
  public void testFromFolder() throws IOException {
    final ResourceProcessor processor = new JawrCssMinifierProcessor();

=======
  public void testFromFolder()
      throws IOException {
    final ResourcePostProcessor processor = new JawrCssMinifierProcessor();
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    final URL url = getClass().getResource("jawrcss");
    
    final File testFolder = new File(url.getFile(), "test");
Solution content
  }
  
  @Test
  public void testFromFolder()
      throws IOException {
    final ResourceProcessor processor = new JawrCssMinifierProcessor();
    
    final URL url = getClass().getResource("jawrcss");
    
    final File testFolder = new File(url.getFile(), "test");
File
TestJawrCssMinifierProcessor.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Method signature
Variable
Chunk
Conflicting content
  @AfterClass
 * @created Created on Nov 28, 2008
 */
public class TestJsMinProcessor {
<<<<<<< HEAD
  private ResourceProcessor processor;
=======
  private ResourcePreProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Before
  public void setUp() {
    processor = new JSMinProcessor();
Solution content
 * @created Created on Nov 28, 2008
 */
public class TestJsMinProcessor {
  private ResourceProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp() {
    processor = new JSMinProcessor();
File
TestJsMinProcessor.java
Developer's decision
Combination
Kind of conflict
Annotation
Attribute
Method declaration
Chunk
Conflicting content
 * @author Alex Objelean
 */
public class TestLessCssImportPreProcessor {
<<<<<<< HEAD
  private ResourceProcessor victim;

=======
  private ResourcePreProcessor victim;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Before
  public void setUp() {
    final WroConfiguration config = new WroConfiguration();
Solution content
    WroTestUtils.assertProcessorSupportResourceTypes(victim, ResourceType.CSS);
  }
/*
 * Copyright (c) 2009. All rights reserved.
 */
package ro.isdc.wro.model.resource.processor;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.net.URL;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.config.jmx.WroConfiguration;
import ro.isdc.wro.model.resource.ResourceType;
import ro.isdc.wro.model.resource.processor.impl.css.LessCssImportPreProcessor;
import ro.isdc.wro.util.WroTestUtils;


/**
 * @author Alex Objelean
 */
public class TestLessCssImportPreProcessor {
  private ResourceProcessor victim;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp() {
    final WroConfiguration config = new WroConfiguration();
    config.setIgnoreFailingProcessor(true);
    Context.set(Context.standaloneContext(), config);
    victim = new LessCssImportPreProcessor();
    WroTestUtils.initProcessor(victim);
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  @Test
  public void testFromFolder()
      throws Exception {
    Context.get().getConfig().setIgnoreMissingResources(false);
    final URL url = getClass().getResource("cssImport");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expectedLess");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", victim);
  }
  
  @Test
  public void shouldSupportCorrectResourceTypes() {
}
File
TestLessCssImportPreProcessor.java
Developer's decision
Manual
Kind of conflict
Annotation
Attribute
Method declaration
Chunk
Conflicting content
  }
  
  @Test
<<<<<<< HEAD
  public void testFromFolder() throws IOException {
    final ResourceProcessor processor = new MultiLineCommentStripperProcessor();

=======
  public void testFromFolder()
      throws IOException {
    final ResourcePostProcessor processor = new MultiLineCommentStripperProcessor();
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    final URL url = getClass().getResource("multiline");
    
    final File testFolder = new File(url.getFile(), "test");
Solution content
  @Test
  public void testFromFolder()
  }
  
      throws IOException {
    final ResourceProcessor processor = new MultiLineCommentStripperProcessor();
    
    final URL url = getClass().getResource("multiline");
    
    final File testFolder = new File(url.getFile(), "test");
File
TestMultiLineCommentStripperProcessor.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Method signature
Variable
Chunk
Conflicting content
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    final URL url = getClass().getResource("semicolonAppender");
    
    final File testFolder = new File(url.getFile(), "test");
  
  @Test
  public void testFromFolder()
<<<<<<< HEAD
    throws IOException {
    final ResourceProcessor processor = new SemicolonAppenderPreProcessor();

=======
      throws IOException {
    final ResourcePreProcessor processor = new SemicolonAppenderPreProcessor();
Solution content
  
  @Test
  public void testFromFolder()
      throws IOException {
    final ResourceProcessor processor = new SemicolonAppenderPreProcessor();
    
    final URL url = getClass().getResource("semicolonAppender");
    
    final File testFolder = new File(url.getFile(), "test");
File
TestSemicolonAppenderPreProcessor.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
 * @created Created on Aug 15, 2010
 */
public class TestVariablizeColorsCssProcessor {
<<<<<<< HEAD
  private ResourceProcessor processor;


=======
  private ResourcePreProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Before
  public void setUp() {
    processor = new VariablizeColorsCssProcessor();
Solution content
 * @created Created on Aug 15, 2010
 */
public class TestVariablizeColorsCssProcessor {
  private ResourceProcessor processor;
  
  @BeforeClass
  public static void onBeforeClass() {
    assertEquals(0, Context.countActive());
  }
  
  @AfterClass
  public static void onAfterClass() {
    assertEquals(0, Context.countActive());
  }
  
  @Before
  public void setUp() {
    processor = new VariablizeColorsCssProcessor();
File
TestVariablizeColorsCssProcessor.java
Developer's decision
Combination
Kind of conflict
Annotation
Attribute
Method declaration
Chunk
Conflicting content
    final File expectedFolder = new File(url.getFile(), "expected");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
<<<<<<< HEAD
=======
  
  @Test
  public void shouldSupportCorrectResourceTypes() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
}
Solution content
    final File expectedFolder = new File(url.getFile(), "expected");
    WroTestUtils.compareFromDifferentFoldersByExtension(testFolder, expectedFolder, "css", processor);
  }
  
  @Test
  public void shouldSupportCorrectResourceTypes() {
    WroTestUtils.assertProcessorSupportResourceTypes(processor, ResourceType.CSS);
  }
}
File
TestVariablizeColorsCssProcessor.java
Developer's decision
Version 2
Kind of conflict
Annotation
Method declaration
Chunk
Conflicting content
        "js");
    WroTestUtils.createInjector().inject(processor);
    // we use test resource relative to TestProcessorsUtils class
<<<<<<< HEAD
    final URL url = ResourceProcessor.class.getResource("extensionAware");

=======
    final URL url = ResourcePreProcessor.class.getResource("extensionAware");
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expected");
    WroTestUtils.compareFromDifferentFolders(testFolder, expectedFolder, processor);
Solution content
        "js");
    WroTestUtils.createInjector().inject(processor);
    // we use test resource relative to TestProcessorsUtils class
    final URL url = ResourceProcessor.class.getResource("extensionAware");
    
    final File testFolder = new File(url.getFile(), "test");
    final File expectedFolder = new File(url.getFile(), "expected");
    WroTestUtils.compareFromDifferentFolders(testFolder, expectedFolder, processor);
File
TestExtensionsAwareProcessorDecorator.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
      throws Exception {
    compareResultsFromFolderUsingProcessor("expectedFindImports", createFindImportsProcessor());
  }
<<<<<<< HEAD

  private void compareResultsFromFolderUsingProcessor(final String expectedFolderName, final ResourceProcessor processor) throws Exception {
=======
  
  private void compareResultsFromFolderUsingProcessor(final String expectedFolderName,
      final ResourcePreProcessor processor)
      throws Exception {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    final URL url = getClass().getResource("cssimport");
    
    final File testFolder = new File(url.getFile(), "test");
Solution content
      throws Exception {
    compareResultsFromFolderUsingProcessor("expectedFindImports", createFindImportsProcessor());
  }

  private void compareResultsFromFolderUsingProcessor(final String expectedFolderName, final ResourcePreProcessor processor) throws Exception {
    final URL url = getClass().getResource("cssimport");
    
    final File testFolder = new File(url.getFile(), "test");
File
TestCssImportInspector.java
Developer's decision
Version 2
Kind of conflict
Method signature
Chunk
Conflicting content
    assertFalse(createCssImportInspector("#someId {color: red}").containsImport());
    assertFalse(createCssImportInspector("#import {display: block}").containsImport());
  }
<<<<<<< HEAD


  private ResourceProcessor createFindImportsProcessor() {
    return new ResourceProcessor() {
=======
  
  private ResourcePreProcessor createFindImportsProcessor() {
    return new ResourcePreProcessor() {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        final List results = createCssImportInspector(IOUtils.toString(reader)).findImports();
Solution content
    assertFalse(createCssImportInspector("#someId {color: red}").containsImport());
    assertFalse(createCssImportInspector("#import {display: block}").containsImport());
  }
  
  private ResourceProcessor createFindImportsProcessor() {
    return new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        final List results = createCssImportInspector(IOUtils.toString(reader)).findImports();
File
TestCssImportInspector.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Method signature
Return statement
Chunk
Conflicting content
      }
    };
  }
<<<<<<< HEAD

  private ResourceProcessor createImportsRemovalProcessor() {
    return new ResourceProcessor() {
=======
  
  private ResourcePreProcessor createImportsRemovalProcessor() {
    return new ResourcePreProcessor() {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        writer.write(createCssImportInspector("").removeImportsFromComments(IOUtils.toString(reader)));
Solution content
      }
    };
  }
  
  private ResourceProcessor createImportsRemovalProcessor() {
    return new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        writer.write(createCssImportInspector("").removeImportsFromComments(IOUtils.toString(reader)));
File
TestCssImportInspector.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Method signature
Return statement
Chunk
Conflicting content
<<<<<<< HEAD

      }
    };
  }
  private ResourceProcessor createRemoveImportsProcessor() {
    return new ResourceProcessor() {
=======
  
  private ResourcePreProcessor createRemoveImportsProcessor() {
    return new ResourcePreProcessor() {
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        writer.write(createCssImportInspector(IOUtils.toString(reader)).removeImportStatements());
Solution content
      }
    };
  }
  
  private ResourceProcessor createRemoveImportsProcessor() {
    return new ResourceProcessor() {
      public void process(final Resource resource, final Reader reader, final Writer writer)
          throws IOException {
        writer.write(createCssImportInspector(IOUtils.toString(reader)).removeImportStatements());
File
TestCssImportInspector.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Method signature
Return statement
Chunk
Conflicting content
import org.junit.BeforeClass;
import org.junit.Test;

<<<<<<< HEAD
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;
=======
import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.locator.ClasspathUriLocator;
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
import ro.isdc.wro.model.resource.processor.support.ImageUrlRewriter.RewriterContext;

Solution content
import org.junit.BeforeClass;
import org.junit.Test;

import ro.isdc.wro.config.Context;
import ro.isdc.wro.model.resource.locator.support.ClasspathResourceLocator;
import ro.isdc.wro.model.resource.processor.support.ImageUrlRewriter.RewriterContext;

File
TestImageUrlRewriter.java
Developer's decision
Combination
Kind of conflict
Import
Chunk
Conflicting content
    final String expected = DEFAULT_PREFIX + "classpath:/path/to/" + RELATIVE_IMAGE_URL;
    assertEquals(expected, actual);
  }
<<<<<<< HEAD

=======
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
  @Test
  public void checkRelativeImageUrlInClasspathCssResourceWhenContextPathIsNotDefault() {
    context.setContextPath("/1/2/3");
Solution content

    final String expected = DEFAULT_PREFIX + "classpath:/path/to/" + RELATIVE_IMAGE_URL;
    assertEquals(expected, actual);
  }
  @Test
  public void checkRelativeImageUrlInClasspathCssResourceWhenContextPathIsNotDefault() {
    context.setContextPath("/1/2/3");
File
TestImageUrlRewriter.java
Developer's decision
Version 1
Kind of conflict
Blank
Chunk
Conflicting content
  @BeforeClass
  private ResourceWatcher victim;
  
  private final CacheKey cacheEntry = new CacheKey(GROUP_NAME, ResourceType.CSS, true);
  private final CacheKey cacheEntry2 = new CacheKey(GROUP_2, ResourceType.JS, true);
  @Mock
<<<<<<< HEAD
  private ResourceLocator mockLocator;
  @Mock
  private ResourceLocatorFactory mockLocatorFactory;

=======
  private UriLocator mockLocator;
  
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
Solution content
  private final CacheKey cacheEntry = new CacheKey(GROUP_NAME, ResourceType.CSS, true);
  private final CacheKey cacheEntry2 = new CacheKey(GROUP_2, ResourceType.JS, true);
  @Mock
  private ResourceLocator mockLocator;
  @Mock
  private ResourceLocatorFactory mockLocatorFactory;
  
  private ResourceWatcher victim;
  
  @BeforeClass
File
TestResourceWatcher.java
Developer's decision
Version 1
Kind of conflict
Annotation
Attribute
Chunk
Conflicting content
<<<<<<< HEAD
=======
      throws Exception {
    initMocks(this);
    Context.set(Context.standaloneContext());
    // spy the interface instead of WroTestUtils.createResourceMockingLocator() because of mockito bug which was
    // reported on their mailing list.
    mockLocator = Mockito.spy(new UriLocator() {
      public InputStream locate(final String uri)
          throws IOException {
        return new ByteArrayInputStream(uri.getBytes());
      }
      
      public boolean accept(final String uri) {
        return true;
      }
    });
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    victim = new ResourceWatcher();
    when(mockLocatorFactory.getLocator(Mockito.anyString())).thenReturn(mockLocator);
    when(mockLocatorFactory.locate(Mockito.anyString())).thenReturn(WroUtil.EMPTY_STREAM);
Solution content
    };
      throws Exception {
    initMocks(this);
    Context.set(Context.standaloneContext());
    victim = new ResourceWatcher();
    when(mockLocatorFactory.getLocator(Mockito.anyString())).thenReturn(mockLocator);
    when(mockLocatorFactory.locate(Mockito.anyString())).thenReturn(WroUtil.EMPTY_STREAM);
    when(mockLocator.getInputStream()).thenReturn(WroUtil.EMPTY_STREAM);
      
      public boolean accept(final String uri) {
        return true;
      }
    });

    victim = new ResourceWatcher();
    createDefaultInjector().inject(victim);
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  public Injector createDefaultInjector() {
    final UriLocatorFactory locatorFactory = new AbstractUriLocatorFactory() {
      public UriLocator getInstance(final String uri) {
        return mockLocator;
      }
    };

    final WroModel model = new WroModel().addGroup(new Group(GROUP_NAME).addResource(Resource.create(RESOURCE_URI)));
    model.addGroup(new Group(GROUP_2).addResource(Resource.create(RESOURCE_FIRST)).addResource(
        Resource.create("/path/2.js")));
    final WroModelFactory modelFactory = WroTestUtils.simpleModelFactory(model);
    final WroManagerFactory factory = new BaseWroManagerFactory().setModelFactory(modelFactory).setLocatorFactory(
        mockLocatorFactory);
    final Injector injector = InjectorBuilder.create(factory).build();
    return injector;
  }
  
  @Test(expected = NullPointerException.class)
  public void cannotCheckNullCacheEntry() {
    Context.unset();
    victim = new ResourceWatcher();
    victim.check(null);
  }
  
  @Test
  public void shouldNotDetectChangeAfterFirstRun()
      throws Exception {
    victim.check(cacheEntry);
    assertFalse(victim.getResourceChangeDetector().checkChangeForGroup(RESOURCE_URI, GROUP_NAME));
  }
  
  @Test
  public void shouldDetectResourceChange()
      throws Exception {
    // flag used to assert that the expected code was invoked
    final AtomicBoolean flag = new AtomicBoolean(false);
    victim = new ResourceWatcher() {
      @Override
      void onGroupChanged(final CacheKey cacheEntry) {
        super.onGroupChanged(cacheEntry);
        Assert.assertEquals(GROUP_NAME, cacheEntry.getGroupName());
        flag.set(true);
      }
    };
    createDefaultInjector().inject(victim);
    victim.check(cacheEntry);
    assertFalse(victim.getResourceChangeDetector().checkChangeForGroup(RESOURCE_URI, GROUP_NAME));

    Mockito.when(mockLocatorFactory.locate(Mockito.anyString())).then(answerWithContent("different"));

    victim.check(cacheEntry);
    assertTrue(victim.getResourceChangeDetector().checkChangeForGroup(RESOURCE_URI, GROUP_NAME));
    assertTrue(flag.get());
  }
  
  @Test
  public void shouldAssumeResourceNotChangedWhenStreamIsUnavailable()
      throws Exception {
    victim = new ResourceWatcher() {
      @Override
      void onGroupChanged(final CacheKey cacheEntry) {
        super.onGroupChanged(cacheEntry);
        Assert.fail("Should not detect the change");
      }
    createDefaultInjector().inject(victim);
    final ResourceChangeDetector mockChangeDetector = Mockito.spy(victim.getResourceChangeDetector());
    
    Mockito.when(mockLocatorFactory.locate(Mockito.anyString())).thenThrow(new IOException("Resource is unavailable"));
    
    victim.check(cacheEntry);
    verify(mockChangeDetector, never()).checkChangeForGroup(Mockito.anyString(), Mockito.anyString());
  }
  
  @Test
  public void shouldDetectChangeOfImportedResource()
      throws Exception {
    final String importResourceUri = "imported.css";
    final AtomicBoolean groupChanged = new AtomicBoolean(false);
    final AtomicBoolean importResourceChanged = new AtomicBoolean(false);
    final CacheKey cacheEntry = new CacheKey(GROUP_NAME, ResourceType.CSS, true);
    victim = new ResourceWatcher() {
      @Override
      void onResourceChanged(final Resource resource) {
        importResourceChanged.set(true);
      }
      
      @Override
      void onGroupChanged(final CacheKey key) {
        groupChanged.set(true);
      }
    };
    createDefaultInjector().inject(victim);
    when(mockLocator.getInputStream()).then(answerWithContent(String.format("@import url(%s)", importResourceUri)));

    final ResourceLocator mockImportedResourceLocator = mock(ResourceLocator.class);
    when(mockImportedResourceLocator.getInputStream()).then(answerWithContent("initial"));

    when(mockLocatorFactory.getLocator(Mockito.eq("/" + RESOURCE_URI))).thenReturn(mockLocator);
    when(mockLocatorFactory.getLocator(Mockito.eq("/" + importResourceUri))).thenReturn(mockImportedResourceLocator);

    victim.check(cacheEntry);

    when(mockImportedResourceLocator.getInputStream()).then(answerWithContent("changed"));

    victim.check(cacheEntry);
    assertTrue(groupChanged.get());
    assertTrue(importResourceChanged.get());
  }
  
  /**
   * Fix the issue described here.
   */
  @Test
  public void shouldNotDetectErroneouslyChange()
      throws Exception {
    final AtomicBoolean groupChanged = new AtomicBoolean(false);
    final AtomicBoolean resourceChanged = new AtomicBoolean(false);
    victim = new ResourceWatcher() {
      @Override
      void onResourceChanged(final Resource resource) {
        resourceChanged.set(true);
      }
      
      @Override
      void onGroupChanged(final CacheKey key) {
        groupChanged.set(true);
      }
    };
    
    createDefaultInjector().inject(victim);
    // first check will always detect changes.
    victim.check(cacheEntry2);
    
    Mockito.when(mockLocatorFactory.locate(RESOURCE_FIRST)).then(answerWithContent("different"));
    
    victim.check(cacheEntry2);
    assertTrue(groupChanged.get());
    assertTrue(resourceChanged.get());
    
    groupChanged.set(false);
    resourceChanged.set(false);
    
    // next check should find no change
    victim.check(cacheEntry2);
    assertFalse(groupChanged.get());
    assertFalse(resourceChanged.get());
  }
  
  private static class CallbackRegistryHolder {
    @Inject
    private LifecycleCallbackRegistry registry;
  }
  
  @Test
  public void shouldInvokeCallbackWhenChangeIsDetected()
      throws Exception {
    final CallbackRegistryHolder callbackRegistryHolder = new CallbackRegistryHolder();
    victim = new ResourceWatcher();
    final AtomicBoolean flag = new AtomicBoolean();
    final Injector injector = createDefaultInjector();
    injector.inject(victim);
    injector.inject(callbackRegistryHolder);
    callbackRegistryHolder.registry.registerCallback(new ObjectFactory() {
      public LifecycleCallback create() {
        return new LifecycleCallbackSupport() {
          @Override
          public void onResourceChanged(final Resource resource) {
            flag.set(true);
          }
        };
      }
    });
    victim.check(cacheEntry);
    assertTrue(flag.get());
  }
  
  private Answer answerWithContent(final String content) {
    return new Answer() {
      public InputStream answer(final InvocationOnMock invocation)
          throws Throwable {
        return new ByteArrayInputStream(content.getBytes());
      }
    };
  }
}
File
TestResourceWatcher.java
Developer's decision
Manual
Kind of conflict
Attribute
Comment
Method invocation
Chunk
Conflicting content
    createDefaultInjector().inject(victim);
  }
<<<<<<< HEAD

  public Injector createDefaultInjector()
      throws Exception {
=======
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  public Injector createDefaultInjector() {
    final UriLocatorFactory locatorFactory = new AbstractUriLocatorFactory() {
      public UriLocator getInstance(final String uri) {
        return mockLocator;
      }
    };
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    final WroModel model = new WroModel().addGroup(new Group(GROUP_NAME).addResource(Resource.create(RESOURCE_URI)));
    model.addGroup(new Group(GROUP_2).addResource(Resource.create(RESOURCE_FIRST)).addResource(
        Resource.create("/path/2.js")));
Solution content
    victim = new ResourceWatcher();
    createDefaultInjector().inject(victim);
  }
  
  @After
  public void tearDown() {
    Context.unset();
  }
  
  public Injector createDefaultInjector() {
    final UriLocatorFactory locatorFactory = new AbstractUriLocatorFactory() {
      public UriLocator getInstance(final String uri) {
        return mockLocator;
      }
    };

    final WroModel model = new WroModel().addGroup(new Group(GROUP_NAME).addResource(Resource.create(RESOURCE_URI)));
    model.addGroup(new Group(GROUP_2).addResource(Resource.create(RESOURCE_FIRST)).addResource(
        Resource.create("/path/2.js")));
File
TestResourceWatcher.java
Developer's decision
Manual
Kind of conflict
Annotation
Method declaration
Method invocation
Method signature
Variable
Chunk
Conflicting content
    createDefaultInjector().inject(victim);
    victim.check(cacheEntry);
    assertFalse(victim.getResourceChangeDetector().checkChangeForGroup(RESOURCE_URI, GROUP_NAME));
<<<<<<< HEAD

    Mockito.when(mockLocatorFactory.locate(Mockito.anyString())).then(answerWithContent("different"));

=======
    
    Mockito.when(mockLocator.locate(Mockito.anyString())).thenReturn(new ByteArrayInputStream("different".getBytes()));
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    victim.check(cacheEntry);
    assertTrue(victim.getResourceChangeDetector().checkChangeForGroup(RESOURCE_URI, GROUP_NAME));
    assertTrue(flag.get());
Solution content
    createDefaultInjector().inject(victim);
    victim.check(cacheEntry);
    assertFalse(victim.getResourceChangeDetector().checkChangeForGroup(RESOURCE_URI, GROUP_NAME));

    Mockito.when(mockLocatorFactory.locate(Mockito.anyString())).then(answerWithContent("different"));

    victim.check(cacheEntry);
    assertTrue(victim.getResourceChangeDetector().checkChangeForGroup(RESOURCE_URI, GROUP_NAME));
    assertTrue(flag.get());
File
TestResourceWatcher.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
    };
    createDefaultInjector().inject(victim);
    final ResourceChangeDetector mockChangeDetector = Mockito.spy(victim.getResourceChangeDetector());
<<<<<<< HEAD

    Mockito.when(mockLocatorFactory.locate(Mockito.anyString())).thenThrow(new IOException("Resource is unavailable"));

=======
    
    Mockito.when(mockLocator.locate(Mockito.anyString())).thenThrow(new IOException("Resource is unavailable"));
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    victim.check(cacheEntry);
    verify(mockChangeDetector, never()).checkChangeForGroup(Mockito.anyString(), Mockito.anyString());
  }
Solution content
    };
    createDefaultInjector().inject(victim);
    final ResourceChangeDetector mockChangeDetector = Mockito.spy(victim.getResourceChangeDetector());
    
    Mockito.when(mockLocatorFactory.locate(Mockito.anyString())).thenThrow(new IOException("Resource is unavailable"));
    
    victim.check(cacheEntry);
    verify(mockChangeDetector, never()).checkChangeForGroup(Mockito.anyString(), Mockito.anyString());
  }
File
TestResourceWatcher.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
      void onResourceChanged(final Resource resource) {
        importResourceChanged.set(true);
      }
<<<<<<< HEAD

=======
      
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
      @Override
      void onGroupChanged(final CacheKey key) {
        groupChanged.set(true);
Solution content
      void onResourceChanged(final Resource resource) {
        importResourceChanged.set(true);
      }
      
      @Override
      void onGroupChanged(final CacheKey key) {
        groupChanged.set(true);
File
TestResourceWatcher.java
Developer's decision
Version 1
Kind of conflict
Blank
Chunk
Conflicting content
      }
    };
    createDefaultInjector().inject(victim);
<<<<<<< HEAD
    when(mockLocator.getInputStream()).then(answerWithContent(String.format("@import url(%s)", importResourceUri)));

    final ResourceLocator mockImportedResourceLocator = mock(ResourceLocator.class);
    when(mockImportedResourceLocator.getInputStream()).then(answerWithContent("initial"));

    when(mockLocatorFactory.getLocator(Mockito.eq("/" + RESOURCE_URI))).thenReturn(mockLocator);
    when(mockLocatorFactory.getLocator(Mockito.eq("/" + importResourceUri))).thenReturn(mockImportedResourceLocator);

    victim.check(cacheEntry);
    when(mockImportedResourceLocator.getInputStream()).then(answerWithContent("changed"));

=======
    when(mockLocator.locate(Mockito.anyString())).thenAnswer(answerWithContent("initial"));
    when(mockLocator.locate("/" + Mockito.eq(RESOURCE_URI))).thenAnswer(
        answerWithContent(String.format("@import url(%s)", importResourceUri)));
    
    victim.check(cacheEntry);
    
    when(mockLocator.locate(Mockito.anyString())).thenAnswer(answerWithContent("changed"));
    when(mockLocator.locate("/" + Mockito.eq(RESOURCE_URI))).thenAnswer(
        answerWithContent(String.format("@import url(%s)", importResourceUri)));
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    victim.check(cacheEntry);
    assertTrue(groupChanged.get());
    assertTrue(importResourceChanged.get());
Solution content
      }
    };
    createDefaultInjector().inject(victim);
    when(mockLocator.getInputStream()).then(answerWithContent(String.format("@import url(%s)", importResourceUri)));

    final ResourceLocator mockImportedResourceLocator = mock(ResourceLocator.class);
    when(mockImportedResourceLocator.getInputStream()).then(answerWithContent("initial"));

    when(mockLocatorFactory.getLocator(Mockito.eq("/" + RESOURCE_URI))).thenReturn(mockLocator);
    when(mockLocatorFactory.getLocator(Mockito.eq("/" + importResourceUri))).thenReturn(mockImportedResourceLocator);

    victim.check(cacheEntry);

    when(mockImportedResourceLocator.getInputStream()).then(answerWithContent("changed"));

    victim.check(cacheEntry);
    assertTrue(groupChanged.get());
    assertTrue(importResourceChanged.get());
File
TestResourceWatcher.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Variable
Chunk
Conflicting content
    createDefaultInjector().inject(victim);
    // first check will always detect changes.
    victim.check(cacheEntry2);
<<<<<<< HEAD

    Mockito.when(mockLocatorFactory.locate(RESOURCE_FIRST)).then(answerWithContent("different"));

=======
    
    when(mockLocator.locate(RESOURCE_FIRST)).thenAnswer(answerWithContent("changed"));
    
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8
    victim.check(cacheEntry2);
    assertTrue(groupChanged.get());
    assertTrue(resourceChanged.get());
Solution content
    createDefaultInjector().inject(victim);
    // first check will always detect changes.
    victim.check(cacheEntry2);
    
    Mockito.when(mockLocatorFactory.locate(RESOURCE_FIRST)).then(answerWithContent("different"));
    
    victim.check(cacheEntry2);
    assertTrue(groupChanged.get());
    assertTrue(resourceChanged.get());
File
TestResourceWatcher.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
  }

  /**
<<<<<<< HEAD:wro4j-extensions/src/main/java/ro/isdc/wro/extensions/locator/WebjarResourceLocator.java
   * {@inheritDoc}
   */
  @Override
  public long lastModified() {
    return 0;
=======
   * Replaces the protocol specific prefix and removes the query path if it exist, since it should not be accepted.
   */
  private String extractPath(final String uri) {
    return DefaultWildcardStreamLocator.stripQueryPath(uri.replace(PREFIX, ""));
>>>>>>> 6f5e55d8e28e841cf9cd458712f7717869f786d8:wro4j-extensions/src/main/java/ro/isdc/wro/extensions/locator/WebjarUriLocator.java
  }

  /**
Solution content
  @Override
   * {@inheritDoc}
  }

  /**
   */
  public long lastModified() {
    return 0;
  }

  /**
File
WebjarResourceLocator.java
Developer's decision
Version 1
Kind of conflict
Annotation
Comment
Method invocation
Method signature
Return statement