package ro.isdc.wro.model.resource.processor.decorator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.Reader; import java.io.Writer; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import ro.isdc.wro.WroRuntimeException; import ro.isdc.wro.config.Context; import ro.isdc.wro.model.resource.Resource; import ro.isdc.wro.model.resource.processor.ResourcePreProcessor; import ro.isdc.wro.model.resource.processor.SupportAware; import ro.isdc.wro.model.resource.processor.impl.js.JSMinProcessor; /** * @author Alex Objelean */ public class TestSupportAwareProcessorDecorator { @Mock private MockProcessor mockProcessor; @Mock private Resource mockResource; @Mock private Reader mockReader; @Mock private Writer mockWriter; private SupportAwareProcessorDecorator victim; private static interface MockProcessor extends ResourcePreProcessor, SupportAware { } @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()); MockitoAnnotations.initMocks(this); victim = new SupportAwareProcessorDecorator(mockProcessor); } @After public void tearDown() { Context.unset(); } @Test(expected = NullPointerException.class) public void cannotDecorateNullProcessor() { new SupportAwareProcessorDecorator(null); } @Test public void shouldCorrectlyDetectSupportOfDeepNestedProcessor() { victim = new SupportAwareProcessorDecorator(new ProcessorDecorator(new ProcessorDecorator(new JSMinProcessor()))); assertTrue(victim.isSupported()); } @Test public void shouldInvokeDecoratedProcessorWhenProcessorIsSupported() throws Exception { Mockito.when(mockProcessor.isSupported()).thenReturn(true); victim = new SupportAwareProcessorDecorator(mockProcessor); victim.process(mockResource, mockReader, mockWriter); Mockito.verify(mockProcessor).process(Mockito.any(Resource.class), Mockito.any(Reader.class), Mockito.any(Writer.class)); } @Test(expected = WroRuntimeException.class) public void shouldThrowExceptionWhenProcessorIsNotSupported() throws Exception { Mockito.when(mockProcessor.isSupported()).thenReturn(false); victim = new SupportAwareProcessorDecorator(mockProcessor); victim.process(mockResource, mockReader, mockWriter); } }