package io.termd.core.tty;
import io.termd.core.TestBase;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executor;
/**
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
public class ReadBufferTest extends TestBase {
private ArrayBlockingQueue<Runnable> commands;
private ReadBuffer buf;
private ArrayList<int[]> reads;
@Before
public void setUp() {
commands = new ArrayBlockingQueue<>(1);
buf = new ReadBuffer(new Executor() {
@Override
public void execute(Runnable command) {
commands.add(command);
}
});
reads = new ArrayList<>();
}
@Test
public void testFoo() {
final ArrayList<int[]> reads = new ArrayList<>();
buf.setReadHandler(event -> reads.add(event));
buf.accept(new int[]{'f', 'o', 'o'});
assertEquals(0, commands.size());
assertEquals(1, reads.size());
assertEquals(reads.get(0), new int[]{'f','o','o'});
}
@Test
public void testBar() throws Exception {
buf.accept(new int[]{'f', 'o', 'o'});
assertEquals(0, reads.size());
assertEquals(0, commands.size());
buf.setReadHandler(event -> reads.add(event));
assertEquals(0, reads.size());
assertEquals(1, commands.size());
commands.poll().run();
assertEquals(1, reads.size());
assertEquals(0, commands.size());
assertEquals(reads.get(0), new int[]{'f','o','o'});
}
@Test
public void testJuu() throws Exception {
buf.accept(new int[]{'f', 'o', 'o'});
buf.accept(new int[]{'b', 'a', 'r'});
assertEquals(0, reads.size());
assertEquals(0, commands.size());
buf.setReadHandler(event -> {
reads.add(event);
buf.setReadHandler(null);
});
assertEquals(0, reads.size());
assertEquals(1, commands.size());
commands.poll().run();
assertEquals(1, reads.size());
assertEquals(0, commands.size());
assertEquals(reads.get(0), new int[]{'f', 'o', 'o'});
assertEquals(null, buf.getReadHandler());
}
@Test
public void testBilto() throws Exception {
buf.accept(new int[]{'f', 'o', 'o'});
buf.accept(new int[]{'b', 'a', 'r'});
assertEquals(0, reads.size());
assertEquals(0, commands.size());
buf.setReadHandler(event -> reads.add(event));
assertEquals(0, reads.size());
assertEquals(1, commands.size());
commands.poll().run();
assertEquals(1, reads.size());
assertEquals(1, commands.size());
assertEquals(reads.get(0), new int[]{'f', 'o', 'o'});
buf.accept(new int[]{'j', 'u', 'u'});
assertEquals(3, reads.size());
assertEquals(1, commands.size());
assertEquals(reads.get(1), new int[]{'b', 'a', 'r'});
assertEquals(reads.get(2), new int[]{'j', 'u', 'u'});
commands.poll().run();
assertEquals(3, reads.size());
assertEquals(0, commands.size());
}
}