/** * Set a default processor * * @param byDefault the default processor * @return a <b>new</b> selector * @throws NullPointerException default processor is null */ public ProcessorSelector<IN, OUT> otherwise( final Processor<IN, OUT> byDefault) { BUNDLE.checkNotNull(byDefault, "processing.nullProcessor"); return new ProcessorSelector<IN, OUT>(choices, byDefault); }
@Test public void cannotInputNullProcessor() { try { new ProcessorSelector<In, Out>().when(predicate1).then(null); fail("No exception thrown!!"); } catch (NullPointerException e) { assertEquals(e.getMessage(), BUNDLE.getMessage("processing.nullProcessor")); } }
@Test public void cannotInputNullDefaultProcessor() { try { new ProcessorSelector<In, Out>().when(predicate1).then(processor1) .otherwise(null); fail("No exception thrown!!"); } catch (NullPointerException e) { assertEquals(e.getMessage(), BUNDLE.getMessage("processing.nullProcessor")); } }
@Test public void noSuccessfulPredicateExecutesDefault() throws ProcessingException { when(predicate1.apply(input)).thenReturn(false); when(predicate2.apply(input)).thenReturn(false); final Processor<In, Out> processor = selector.otherwise(byDefault) .getProcessor(); processor.process(report, input); verifyZeroInteractions(processor1, processor2); verify(byDefault, onlyOnce()).process(report, input); for (final Processor<In, Out> p: otherProcessors) verifyZeroInteractions(p); }
@Test public void noSuccessfulPredicateAndNoDefaultThrowsException() { when(predicate1.apply(input)).thenReturn(false); when(predicate2.apply(input)).thenReturn(false); final Processor<In, Out> processor = selector.getProcessor(); try { processor.process(report, input); fail("No exception thrown!!"); } catch (ProcessingException e) { verifyZeroInteractions(processor1, processor2); for (final Processor<In, Out> p: otherProcessors) verifyZeroInteractions(p); assertMessage(e.getProcessingMessage()) .hasMessage(BUNDLE.getMessage("processing.noProcessor")); } }
@Test public void cannotInputNullPredicate() { try { new ProcessorSelector<In, Out>().when(null).then(null); fail("No exception thrown!!"); } catch (NullPointerException e) { assertEquals(e.getMessage(), BUNDLE.getMessage("processing.nullPredicate")); } }
@Test public void firstSuccessfulPredicateIsExecuted() throws ProcessingException { when(predicate1.apply(input)).thenReturn(false); when(predicate2.apply(input)).thenReturn(true); final Processor<In, Out> processor = selector.otherwise(byDefault) .getProcessor(); processor.process(report, input); verify(processor2, onlyOnce()).process(same(report), same(input)); verifyZeroInteractions(processor1, byDefault); for (final Processor<In, Out> p: otherProcessors) verifyZeroInteractions(p); }
/** * Set a default processor * * @param byDefault the default processor * @return a <b>new</b> selector * @throws NullPointerException default processor is null */ public ProcessorSelector<IN, OUT> otherwise( final Processor<IN, OUT> byDefault) { BUNDLE.checkNotNull(byDefault, "processing.nullProcessor"); return new ProcessorSelector<IN, OUT>(choices, byDefault); }
selector = new ProcessorSelector<In, Out>(); processor = mock(Processor.class); otherProcessors.add(processor); selector = selector.when(predicate).then(processor); selector = selector.when(predicate1).then(processor1); processor = mock(Processor.class); otherProcessors.add(processor); selector = selector.when(predicate).then(processor); selector = selector.when(predicate2).then(processor2);
@Test public void firstComeFirstServed() throws ProcessingException { when(predicate1.apply(input)).thenReturn(true); when(predicate2.apply(input)).thenReturn(true); final Processor<In, Out> processor = selector.otherwise(byDefault) .getProcessor(); processor.process(report, input); verify(processor1, onlyOnce()).process(same(report), same(input)); verifyZeroInteractions(processor2, byDefault); for (final Processor<In, Out> p: otherProcessors) verifyZeroInteractions(p); }
/** * Associate a processor to a predicate * * @param processor the associated processor * @return a new {@link ProcessorSelector} * @throws NullPointerException the processor is null */ public ProcessorSelector<IN, OUT> then(final Processor<IN, OUT> processor) { BUNDLE.checkNotNull(processor, "processing.nullProcessor"); choices.put(predicate, processor); return new ProcessorSelector<IN, OUT>(this); } }
/** * Set a default processor * * @param byDefault the default processor * @return a <b>new</b> selector * @throws NullPointerException default processor is null */ public ProcessorSelector<IN, OUT> otherwise( final Processor<IN, OUT> byDefault) { BUNDLE.checkNotNull(byDefault, "processing.nullProcessor"); return new ProcessorSelector<IN, OUT>(choices, byDefault); }
/** * Associate a processor to a predicate * * @param processor the associated processor * @return a new {@link ProcessorSelector} * @throws NullPointerException the processor is null */ public ProcessorSelector<IN, OUT> then(final Processor<IN, OUT> processor) { BUNDLE.checkNotNull(processor, "processing.nullProcessor"); choices.put(predicate, processor); return new ProcessorSelector<IN, OUT>(this); } }
/** * Associate a processor to a predicate * * @param processor the associated processor * @return a new {@link ProcessorSelector} * @throws NullPointerException the processor is null */ public ProcessorSelector<IN, OUT> then(final Processor<IN, OUT> processor) { BUNDLE.checkNotNull(processor, "processing.nullProcessor"); choices.put(predicate, processor); return new ProcessorSelector<IN, OUT>(this); } }