Skip to content

Commit

Permalink
make AnsiContextSequenceFactory pluggable for testing reasons
Browse files Browse the repository at this point in the history
  • Loading branch information
koentsje committed Mar 2, 2014
1 parent c6212a3 commit 9f7b42b
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ public abstract class AbstractAnsiControlSequenceFilter implements AnsiControlSe
private StringBuffer escapeSequence = new StringBuffer();
private StringBuffer targetBuffer = new StringBuffer();

private AnsiControlSequenceFactory controlSequenceFactory = DefaultControlSequenceFactory.INSTANCE;

public AbstractAnsiControlSequenceFilter(StreamListener target) {
this.target = target;
}
Expand Down Expand Up @@ -39,7 +41,7 @@ private void charAppended(char c) {
escapeSequence.append(c);
} else if (escapeSequence.length() > 1) {
escapeSequence.append(c);
AnsiControlSequence command = DefaultControlSequenceFactory.INSTANCE.create(escapeSequence.toString());
AnsiControlSequence command = controlSequenceFactory.create(escapeSequence.toString());
if (command != null) {
escapeSequence.setLength(0);
controlSequenceAvailable(command);
Expand All @@ -48,5 +50,13 @@ private void charAppended(char c) {
targetBuffer.append(c);
}
}


void setControlSequenceFactory(AnsiControlSequenceFactory controlSequenceFactory) {
this.controlSequenceFactory = controlSequenceFactory;
}

AnsiControlSequenceFactory getControlSequenceFactory() {
return controlSequenceFactory;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.util.ArrayList;

import org.jboss.tools.aesh.core.internal.ansi.CursorBack;
import org.jboss.tools.aesh.core.internal.ansi.DefaultControlSequenceFactory;
import org.jboss.tools.aesh.core.internal.io.AeshOutputStream;
import org.jboss.tools.aesh.core.io.StreamListener;
import org.junit.Assert;
Expand All @@ -11,14 +11,27 @@

public class AbstractAnsiControlSequenceFilterTest {

private static final byte[] sequence = new byte[] { 27, '[', '5', 'D' };
private static final AnsiControlSequence TEST_CONTROL_SEQUENCE =
new AnsiControlSequence() {
@Override
public void handle(AnsiDocument document) {}
};
private static final AnsiControlSequenceFactory TEST_CONTROL_SEQUENCE_FACTORY =
new AnsiControlSequenceFactory() {
@Override
public AnsiControlSequence create(String controlSequence) { // TODO Auto-generated method stub
return TEST_CONTROL_SEQUENCE;
}
};
private static final byte[] sequence = new byte[] { 27, '[', '#' };

private ArrayList<String> producedOutput;
private AnsiControlSequence availableControlSequence;
private StreamListener listener;
private AbstractAnsiControlSequenceFilter filter;
private AeshOutputStream outputStream;


@Before
public void setup() {
producedOutput = new ArrayList<String>();
Expand Down Expand Up @@ -46,12 +59,22 @@ public void testOutputAvailable() throws Exception {
Assert.assertTrue(producedOutput.contains("test"));
}

@Test
public void testControlSequenceFactory() {
Assert.assertEquals(
DefaultControlSequenceFactory.INSTANCE,
filter.getControlSequenceFactory());
}

@Test
public void testControlSequenceAvailable() throws Exception {
filter.setControlSequenceFactory(TEST_CONTROL_SEQUENCE_FACTORY);
outputStream.write(sequence);
Assert.assertNotNull(availableControlSequence);
Assert.assertTrue(availableControlSequence instanceof CursorBack);
Assert.assertEquals(TEST_CONTROL_SEQUENCE, availableControlSequence);
Assert.assertTrue(producedOutput.isEmpty());
}



}

0 comments on commit 9f7b42b

Please sign in to comment.