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(); } }