content: package ro.isdc.wro.maven.plugin.support;
  
  import static org.junit.Assert.assertEquals;
  import static org.mockito.Mockito.verify;
  
  import org.apache.maven.plugin.logging.Log;
  import org.junit.After;
  import org.junit.Before;
  import org.junit.Test;
  import org.mockito.Mock;
  import org.mockito.MockitoAnnotations;
  
  import ro.isdc.wro.config.Context;
  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.ClasspathUriLocator;
  
  
  /**
   * @author Alex Objelean
   */
  public class TestResourceChangeHandler {
    @Mock
    private BuildContextHolder buildContextHolder;
    @Mock
    private Log log;
    private WroManagerFactory managerFactory;
    private ResourceChangeHandler victim;
  
    @Before
    public void setUp() {
      Context.set(Context.standaloneContext());
      MockitoAnnotations.initMocks(this);
      managerFactory = new BaseWroManagerFactory();
      victim = ResourceChangeHandler.create(managerFactory, log);
    }
  
    @Test(expected = NullPointerException.class)
    public void cannotAcceptInvalidManagerFactory() {
      victim = ResourceChangeHandler.create(null, log);
    }
  
    @Test(expected = NullPointerException.class)
    public void cannotAcceptInvalidLog() {
      victim = ResourceChangeHandler.create(managerFactory, null);
    }
  
    @Test
    public void shouldNotBeIncrementalBuildByDefault() {
      assertEquals(false, victim.isIncrementalBuild());
    }
  
    @Test(expected = NullPointerException.class)
    public void cannotCheckNullResourceForChange() {
      assertEquals(false, victim.isResourceChanged(null));
    }
  
    @Test
    public void shouldConsiderInvalidResourceAsUnchanged() {
      assertEquals(false, victim.isResourceChanged(Resource.create("/1.js")));
    }
  
    @Test
    public void shoulDestroyBuildContextHolder() {
      victim.setBuildContextHolder(buildContextHolder);
      victim.destroy();
      verify(buildContextHolder).destroy();
    }
  
    @Test
    public void shouldIdentifyChangeAfterDestroyOrForgetIsInvoked() {
      final String resourceUri = ClasspathUriLocator.createUri(getClass().getName().replace(".", "/") + ".class");
      final Resource resource = Resource.create(resourceUri, ResourceType.JS);
      assertEquals(true, victim.isResourceChanged(resource));
      victim.remember(resource);
      assertEquals(false, victim.isResourceChanged(resource));
      victim.forget(resource);
      assertEquals(true, victim.isResourceChanged(resource));
      victim.remember(resource);
      assertEquals(false, victim.isResourceChanged(resource));
      victim.destroy();
      assertEquals(true, victim.isResourceChanged(resource));
    }
  
    @After
    public void tearDown() {
      Context.unset();
    }
  }
  