blob: 195d1e27bb5f3e94b89dc31c0a60390f7d223680 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 David Green.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.wikitext.commonmark;
import static com.google.common.base.Predicates.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.eclipse.mylyn.wikitext.core.parser.Attributes;
import org.eclipse.mylyn.wikitext.core.parser.DocumentBuilder;
import org.eclipse.mylyn.wikitext.core.parser.DocumentBuilder.BlockType;
import org.eclipse.mylyn.wikitext.core.parser.builder.EventDocumentBuilder;
import org.eclipse.mylyn.wikitext.core.parser.builder.event.BeginBlockEvent;
import org.eclipse.mylyn.wikitext.core.parser.builder.event.CharactersEvent;
import org.eclipse.mylyn.wikitext.core.parser.builder.event.DocumentBuilderEvent;
import org.eclipse.mylyn.wikitext.core.parser.builder.event.EndBlockEvent;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
public class SourceBlocksTest {
@Rule
public final ExpectedException thrown = ExpectedException.none();
private final SourceBlock block1 = mockBlock(BlockType.QUOTE, "b1");
private final SourceBlock block2 = mockBlock(BlockType.PARAGRAPH, "b2");
private final SourceBlocks sourceBlocks = new SourceBlocks(block1, block2);
@Test
public void requiresBlocks() {
thrown.expect(NullPointerException.class);
new SourceBlocks((SourceBlock[]) null);
}
@Test
public void requiresBlocksCollection() {
thrown.expect(NullPointerException.class);
new SourceBlocks((List<SourceBlock>) null);
}
@Test
public void canStart() {
assertTrue(sourceBlocks.canStart(LineSequence.create("any")));
assertTrue(sourceBlocks.canStart(LineSequence.create("")));
}
@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());
}
private SourceBlock mockBlock(final BlockType blockType, final String startString) {
return new SourceBlock() {
@Override
public void process(ProcessingContext context, DocumentBuilder builder, LineSequence lineSequence) {
builder.beginBlock(blockType, new Attributes());
for (Line line : lineSequence.with(not(LinePredicates.empty()))) {
builder.characters(line.getText());
}
builder.endBlock();
}
@Override
public boolean canStart(LineSequence lineSequence) {
return lineSequence.getCurrentLine() != null
&& lineSequence.getCurrentLine().getText().startsWith(startString);
}
};
}
}