private final Channel[] channels;
/**
- * @deprecated please use the builder() method
+ * @deprecated in version 2.9. Please use the builder() method
*/
@SuppressWarnings("rawtypes")
@Deprecated
}
/**
- * @deprecated please use the builder() method
+ * @deprecated in version 2.9. Please use the builder() method
*/
@SuppressWarnings("rawtypes")
@Deprecated
}
/**
- * @deprecated please use the builder() method
+ * @deprecated in version 2.9. Please use the builder() method
*/
@SuppressWarnings("rawtypes")
@Deprecated
return true;
}
+ Channel[] getChannels() {
+ return channels;
+ }
+
/**
* Get a Builder instance to build a new ChannelDispatcher
*/
return this;
}
+ public Builder addChannels(Channel... c) {
+ for (Channel channel : c) {
+ addChannel(channel);
+ }
+ return this;
+ }
+
/**
* If this option is activated, an IllegalStateException will be thrown as soon as a character won't be consumed by any channel.
*/
private static final char LF = '\n';
private static final char CR = '\r';
private int tabWidth;
- private CodeReaderConfiguration configuration;
private boolean recordingMode = false;
private StringBuilder recordedCharacters = new StringBuilder();
protected CodeBuffer(Reader initialCodeReader, CodeReaderConfiguration configuration) {
- this.configuration = configuration;
lastChar = -1;
cursor = new Cursor();
bufferCapacity = configuration.getBufferCapacity();
assertThat(output.toString(), is("twowords"));
}
+ @Test
+ public void shouldAddChannels() {
+ ChannelDispatcher<StringBuilder> dispatcher = ChannelDispatcher.builder().addChannels(new SpaceDeletionChannel(), new FakeChannel()).build();
+ assertThat(dispatcher.getChannels().length, is(2));
+ assertThat(dispatcher.getChannels()[0], is(SpaceDeletionChannel.class));
+ assertThat(dispatcher.getChannels()[1], is(FakeChannel.class));
+ }
+
@Test(expected = IllegalStateException.class)
public void shouldThrowExceptionWhenNoChannelToConsumeNextCharacter() {
ChannelDispatcher<StringBuilder> dispatcher = ChannelDispatcher.builder().failIfNoChannelToConsumeOneCharacter().build();
dispatcher.consume(new CodeReader("two words"), new StringBuilder());
}
- private class SpaceDeletionChannel extends Channel<StringBuilder> {
-
+ private static class SpaceDeletionChannel extends Channel<StringBuilder> {
@Override
public boolean consume(CodeReader code, StringBuilder output) {
if (code.peek() == ' ') {
}
return true;
}
+ }
+ private static class FakeChannel extends Channel<StringBuilder> {
+ @Override
+ public boolean consume(CodeReader code, StringBuilder output) {
+ return true;
+ }
}
+
}
@Test
public void shouldMatch() {
- ChannelDispatcher<StringBuilder> dispatcher = new ChannelDispatcher<StringBuilder>(new MyWordChannel(), new BlackholeChannel());
+ ChannelDispatcher<StringBuilder> dispatcher = ChannelDispatcher.builder().addChannel(new MyWordChannel()).addChannel(new BlackholeChannel()).build();
StringBuilder output = new StringBuilder();
dispatcher.consume(new CodeReader("my word"), output);
assertThat(output.toString(), is("<w>my</w> <w>word</w>"));
}
- private class MyWordChannel extends RegexChannel<StringBuilder> {
+ private static class MyWordChannel extends RegexChannel<StringBuilder> {
public MyWordChannel() {
super("\\w++");
}
}
- class BlackholeChannel extends Channel<StringBuilder> {
+ private static class BlackholeChannel extends Channel<StringBuilder> {
@Override
public boolean consume(CodeReader code, StringBuilder output) {