package flow.netbeans.markdown.highlighter;
import java.util.List;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.equalTo;
import static flow.netbeans.markdown.matchers.Matchers.*;
import static flow.netbeans.markdown.highlighter.MarkdownTokenId.*;
import org.junit.Before;
/**
* Unit tests for {@link MarkdownTokenListBuilder}.
*/
public class MarkdownTokenListBuilderTest {
private static final int DEFAULT_INPUT_LENGTH = 10;
private MarkdownTokenListBuilder builder;
@Before
public void createBuilder() {
builder = new MarkdownTokenListBuilder(DEFAULT_INPUT_LENGTH);
}
@Test
public void testNoToken() {
final List<MarkdownToken> tokens = builder.build();
assertThat(tokens, everyItem(nonZeroLength()));
assertThat(totalLengthOf(tokens), equalTo(DEFAULT_INPUT_LENGTH));
assertThat(tokens.size(), equalTo(1));
}
@Test
public void testSingleTokenWithFullCoverage() {
builder.addLeafTreeToken(CODE, 0, DEFAULT_INPUT_LENGTH);
final List<MarkdownToken> tokens = builder.build();
assertThat(tokens, everyItem(nonZeroLength()));
assertThat(totalLengthOf(tokens), equalTo(DEFAULT_INPUT_LENGTH));
assertThat(tokens.size(), equalTo(1));
assertThat(tokens, containsTokensWithId(CODE));
}
@Test
public void testSingleTokenWithoutFullCoverage() {
builder.addLeafTreeToken(CODE, 1, DEFAULT_INPUT_LENGTH - 1);
final List<MarkdownToken> tokens = builder.build();
assertThat(tokens, everyItem(nonZeroLength()));
assertThat(totalLengthOf(tokens), equalTo(DEFAULT_INPUT_LENGTH));
assertThat(tokens.size(), equalTo(3));
assertThat(tokens, containsTokensWithId(PLAIN, CODE, PLAIN));
assertThat(tokens, containsTokensWithLength(1, DEFAULT_INPUT_LENGTH - 2, 1));
}
@Test
public void testNestedTokenWithLargerRangeThanOuterToken() {
builder.beginTreeToken(CODE, 1, DEFAULT_INPUT_LENGTH - 1);
builder.addLeafTreeToken(EMPH, 0, DEFAULT_INPUT_LENGTH);
builder.endTreeToken();
final List<MarkdownToken> tokens = builder.build();
assertThat(tokens, everyItem(nonZeroLength()));
assertThat(totalLengthOf(tokens), equalTo(DEFAULT_INPUT_LENGTH));
assertThat(tokens.size(), equalTo(3));
assertThat(tokens, containsTokensWithId(PLAIN, EMPH, PLAIN));
assertThat(tokens, containsTokensWithLength(1, DEFAULT_INPUT_LENGTH - 2, 1));
}
@Test
public void testEmptyInput() {
builder = new MarkdownTokenListBuilder(0);
List<MarkdownToken> tokens = builder.build();
assertThat(tokens.size(), equalTo(0));
}
@Test(expected = IllegalStateException.class)
public void testUnmatchedEndTokenCall() {
builder.endTreeToken();
}
@Test(expected = IllegalStateException.class)
public void testUnmatchedBeginTokenCall() {
builder.beginTreeToken(CODE, 0, DEFAULT_INPUT_LENGTH);
builder.build();
}
@Test(expected = IllegalStateException.class)
public void testBeginTokenCallAfterBuild() {
builder.build();
builder.beginTreeToken(CODE, 0, DEFAULT_INPUT_LENGTH);
}
@Test
public void testBuildTwice() {
builder.build();
try {
builder.build();
} catch (IllegalStateException ex) {
fail("Failed to build twice");
}
}
}