content: /**
   * Copyright Alex Objelean
   */
  package ro.isdc.wro.manager.callback;
  
  import static org.junit.Assert.assertEquals;
  
  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.util.ObjectFactory;
  
  
  /**
   * @author Alex Objelean
   */
  public class TestLifecycleCallbackDecorator {
    private LifecycleCallbackDecorator decorator;
    
    @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());
    }
    
    @After
    public void tearDown() {
      Context.unset();
    }
    
    @Test(expected = NullPointerException.class)
    public void shouldNotAcceptNullCallback() {
      decorator = new LifecycleCallbackDecorator(null);
    }
    
    @Test
    public void shouldCatchCallbacksExceptionsAndContinueExecution() {
      final Resource changedResource = Resource.create("test.js");
      final LifecycleCallback callback = Mockito.spy(new PerformanceLoggerCallback());
      decorator = new LifecycleCallbackDecorator(callback);
      
      final LifecycleCallbackRegistry registry = new LifecycleCallbackRegistry();
      registry.registerCallback(new ObjectFactory<LifecycleCallback>() {
        public LifecycleCallback create() {
          return decorator;
        }
      });
      
      registry.onBeforeModelCreated();
      registry.onAfterModelCreated();
      registry.onBeforePreProcess();
      registry.onAfterPreProcess();
      registry.onBeforePostProcess();
      registry.onAfterPostProcess();
      registry.onBeforeMerge();
      registry.onAfterMerge();
      registry.onProcessingComplete();
      registry.onResourceChanged(changedResource);
      
      Mockito.verify(callback).onBeforeModelCreated();
      Mockito.verify(callback).onAfterModelCreated();
      Mockito.verify(callback).onBeforePreProcess();
      Mockito.verify(callback).onAfterPreProcess();
      Mockito.verify(callback).onBeforePostProcess();
      Mockito.verify(callback).onAfterPostProcess();
      Mockito.verify(callback).onBeforeMerge();
      Mockito.verify(callback).onAfterMerge();
      Mockito.verify(callback).onProcessingComplete();
      Mockito.verify(callback).onResourceChanged(Mockito.eq(changedResource));
    }
  }
  