content: package ro.isdc.wro.model.resource.support.change;
  
  import static org.junit.Assert.assertFalse;
  import static org.junit.Assert.assertTrue;
  
  import org.junit.After;
  import org.junit.Before;
  import org.junit.Test;
  
  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.group.Inject;
  import ro.isdc.wro.model.group.processor.Injector;
  import ro.isdc.wro.model.group.processor.InjectorBuilder;
  import ro.isdc.wro.model.resource.locator.factory.SimpleUriLocatorFactory;
  import ro.isdc.wro.util.WroTestUtils;
  
  
  /**
   * @author Alex Objelean
   */
  public class TestResourceChangeDetector {
    private static final String GROUP1_NAME = "g1";
    private static final String GROUP2_NAME = "g2";
    @Inject
    private ResourceChangeDetector victim;
  
    @Before
    public void setUp() {
      Context.set(Context.standaloneContext());
      final WroManagerFactory managerFactory = new BaseWroManagerFactory()
          .setUriLocatorFactory(new SimpleUriLocatorFactory().addLocator(WroTestUtils.createResourceMockingLocator()));
      final Injector injector = InjectorBuilder.create(managerFactory).build();
      injector.inject(this);
    }
  
    @After
    public void tearDown() {
      Context.unset();
    }
  
    @Test(expected = NullPointerException.class)
    public void cannotCheckInvalidUriForChange()
        throws Exception {
      victim.checkChangeForGroup(null, GROUP1_NAME);
    }
  
    @Test(expected = NullPointerException.class)
    public void cannotCheckInvalidGroupNameForChange()
        throws Exception {
      victim.checkChangeForGroup("resource", null);
    }
  
    @Test
    public void shouldRequireChangeAtFirstCheck()
        throws Exception {
      assertTrue(victim.checkChangeForGroup("resource", GROUP1_NAME));
    }
  
  
    @Test
    public void shouldRequireChangeAfterReset()
        throws Exception {
      victim.checkChangeForGroup("resource", GROUP1_NAME);
      victim.reset();
      assertFalse(victim.checkChangeForGroup("resource", GROUP1_NAME));
      assertTrue(victim.checkChangeForGroup("resource", GROUP2_NAME));
    }
  }
  