/*
* Copyright (c) 2002-2016, the original author or authors.
*
* This software is distributable under the BSD license. See the terms of the
* BSD license in the documentation provided with this software.
*
* http://www.opensource.org/licenses/bsd-license.php
*/
package jline.console;
import org.junit.Test;
import static jline.console.Operation.BACKWARD_WORD;
import static jline.console.Operation.*;
/**
* Tests various features of editing lines.
*
* @author <a href="mailto:mwp1@cornell.edu">Marc Prud'hommeaux</a>
*/
public class EditLineTest
extends ConsoleReaderTestSupport
{
@Test
public void testDeletePreviousWord() throws Exception {
Buffer b = new Buffer("This is a test");
assertBuffer("This is a ", b = b.op(UNIX_WORD_RUBOUT));
assertBuffer("This is ", b = b.op(UNIX_WORD_RUBOUT));
assertBuffer("This ", b = b.op(UNIX_WORD_RUBOUT));
assertBuffer("", b = b.op(UNIX_WORD_RUBOUT));
assertBuffer("", b = b.op(UNIX_WORD_RUBOUT));
assertBuffer("", b = b.op(UNIX_WORD_RUBOUT));
}
@Test
public void testDeleteNextWord() throws Exception {
Buffer b = new Buffer("This is a test").op(END_OF_LINE);
assertBuffer("This is a test", b = b.op(KILL_WORD));
assertBuffer("This is a ", b = b.op(BACKWARD_WORD).op(KILL_WORD));
}
@Test
public void testMoveToEnd() throws Exception {
assertBuffer("This is a XtestX",
new Buffer("This is a test").op(BACKWARD_WORD)
.append('X')
.op(END_OF_LINE)
.append('X'));
assertBuffer("This is Xa testX",
new Buffer("This is a test").op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.append('X')
.op(END_OF_LINE)
.append('X'));
assertBuffer("This Xis a testX",
new Buffer("This is a test").op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.append('X')
.op(END_OF_LINE)
.append('X'));
}
@Test
public void testPreviousWord() throws Exception {
assertBuffer("This is a Xtest",
new Buffer("This is a test").op(BACKWARD_WORD)
.append('X'));
assertBuffer("This is Xa test",
new Buffer("This is a test").op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.append('X'));
assertBuffer("This Xis a test",
new Buffer("This is a test").op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.append('X'));
assertBuffer("XThis is a test",
new Buffer("This is a test").op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.append('X'));
assertBuffer("XThis is a test",
new Buffer("This is a test").op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.append('X'));
assertBuffer("XThis is a test",
new Buffer("This is a test").op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.append('X'));
}
@Test
public void testLineStart() throws Exception {
assertBuffer("XThis is a test",
new Buffer("This is a test").ctrlA().append('X'));
assertBuffer("TXhis is a test",
new Buffer("This is a test").ctrlA().right().append('X'));
}
@Test
public void testClearLine() throws Exception {
assertBuffer("", new Buffer("This is a test").ctrlU());
assertBuffer("t", new Buffer("This is a test").left().ctrlU());
assertBuffer("st", new Buffer("This is a test").left().left().ctrlU());
}
@Test
public void testRight() throws Exception {
Buffer b = new Buffer("This is a test");
b = b.left().right().back();
assertBuffer("This is a tes", b);
b = b.left().left().left().right().left().back();
assertBuffer("This is ates", b);
b.append('X');
assertBuffer("This is aXtes", b);
}
@Test
public void testLeft() throws Exception {
Buffer b = new Buffer("This is a test");
b = b.left().left().left();
assertBuffer("This is a est", b = b.back());
assertBuffer("This is aest", b = b.back());
assertBuffer("This is est", b = b.back());
assertBuffer("This isest", b = b.back());
assertBuffer("This iest", b = b.back());
assertBuffer("This est", b = b.back());
assertBuffer("Thisest", b = b.back());
assertBuffer("Thiest", b = b.back());
assertBuffer("Thest", b = b.back());
assertBuffer("Test", b = b.back());
assertBuffer("est", b = b.back());
assertBuffer("est", b = b.back());
assertBuffer("est", b = b.back());
assertBuffer("est", b = b.back());
assertBuffer("est", b = b.back());
}
@Test
public void testBackspace() throws Exception {
Buffer b = new Buffer("This is a test");
assertBuffer("This is a tes", b = b.back());
assertBuffer("This is a te", b = b.back());
assertBuffer("This is a t", b = b.back());
assertBuffer("This is a ", b = b.back());
assertBuffer("This is a", b = b.back());
assertBuffer("This is ", b = b.back());
assertBuffer("This is", b = b.back());
assertBuffer("This i", b = b.back());
assertBuffer("This ", b = b.back());
assertBuffer("This", b = b.back());
assertBuffer("Thi", b = b.back());
assertBuffer("Th", b = b.back());
assertBuffer("T", b = b.back());
assertBuffer("", b = b.back());
assertBuffer("", b = b.back());
assertBuffer("", b = b.back());
assertBuffer("", b = b.back());
assertBuffer("", b = b.back());
}
@Test
public void testBuffer() throws Exception {
assertBuffer("This is a test", new Buffer("This is a test"));
}
@Test
public void testAbortPartialBuffer() throws Exception {
console.setBellEnabled(true);
assertBuffer("", new Buffer("This is a test").ctrl('G'));
assertConsoleOutputContains('\n');
assertBeeped();
consoleOutputStream.reset();
assertBuffer("",
new Buffer("This is a test").op(BACKWARD_WORD)
.op(BACKWARD_WORD)
.ctrl('G'));
assertConsoleOutputContains('\n');
assertBeeped();
}
}