### Question:
SourceBlocks extends SourceBlock { @Override public void process(final ProcessingContext context, final DocumentBuilder builder, LineSequence lineSequence) { process(context, builder, lineSequence, Predicates.<BlockContext> alwaysTrue()); } SourceBlocks(SourceBlock... blocks);   SourceBlocks(List<SourceBlock> supportedBlocks); void createContext(final ProcessingContextBuilder contextBuilder, LineSequence lineSequence,
			Predicate<BlockContext> contextPredicate); @Override void createContext(ProcessingContextBuilder contextBuilder, LineSequence lineSequence); @Override void process(final ProcessingContext context, final DocumentBuilder builder, LineSequence lineSequence); void process(final ProcessingContext context, final DocumentBuilder builder, LineSequence lineSequence,
			Predicate<BlockContext> predicate); List<SourceBlock> calculateSourceBlocks(final ProcessingContext context, LineSequence lineSequence,
			Predicate<BlockContext> predicate); SourceBlock selectBlock(LineSequence lineSequence); @Override boolean canStart(LineSequence lineSequence);  }### Answer:
@Test public void process() { EventDocumentBuilder builder = new EventDocumentBuilder(); sourceBlocks.process(ProcessingContext.builder().build(), builder, LineSequence.create("one\nb2\nmore\n\nb1 and\n\n\nb2")); ImmutableList<DocumentBuilderEvent> expectedEvents = ImmutableList.of( new BeginBlockEvent(BlockType.PARAGRAPH, new Attributes()), new CharactersEvent("b2"), new CharactersEvent("more"), new EndBlockEvent(), new BeginBlockEvent(BlockType.QUOTE, new Attributes()), new CharactersEvent("b1 and"), new EndBlockEvent(), new BeginBlockEvent(BlockType.PARAGRAPH, new Attributes()), new CharactersEvent("b2"), new EndBlockEvent()); assertEquals(Joiner.on("\n").join(builder.getDocumentBuilderEvents().getEvents()), expectedEvents, builder.getDocumentBuilderEvents().getEvents()); }