/*
* Copyright 2015 Julien Viet
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.termd.core.readline;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
public class LineBufferUpdateTest {
@Test
public void testA() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer();
curr.update(new LineBuffer().insert("abc"), screen, 20);
screen.assertCodePoints("abc").assertEmpty();
assertEquals("abc", curr.toString());
assertEquals(3, curr.getCursor());
}
@Test
public void testB() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer();
curr.update(new LineBuffer().insert("abcdef"), screen, 4);
screen.assertCodePoints("abcdef").assertEmpty();
assertEquals("abcdef", curr.toString());
assertEquals(6, curr.getCursor());
}
@Test
public void testC() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer();
curr.update(new LineBuffer().insert("abcd"), screen, 4);
screen.assertCodePoints("abcd \r").assertEmpty();
assertEquals("abcd", curr.toString());
assertEquals(4, curr.getCursor());
}
@Test
public void testD() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("abc");
curr.update(new LineBuffer().insert("def"), screen, 20);
screen.assertCodePoints("\rdef").assertEmpty();
assertEquals("def", curr.toString());
assertEquals(3, curr.getCursor());
}
@Test
public void testE() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("abc");
curr.update(new LineBuffer().insert("abdef"), screen, 20);
screen.assertCodePoints("\bdef").assertEmpty();
assertEquals("abdef", curr.toString());
assertEquals(5, curr.getCursor());
}
@Test
public void testF() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("a\nbc");
curr.update(new LineBuffer().insert("abdef"), screen, 20);
// TODO : improve that
screen.assertCodePoints("\b\033[1Abdef\r\033[1B\033[K\033[1C\033[1C\033[1C\033[1C\033[1C\033[1A").assertEmpty();
}
@Test
public void testG() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("abcde");
curr.update(new LineBuffer().insert("aBcdEf"), screen, 20);
screen.assertCodePoints("\b\b\b\bB\033[1C\033[1CEf").assertEmpty();
}
@Test
public void testH() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("abcdefgh");
curr.update(new LineBuffer().insert("aBcdefgHi"), screen, 4);
screen.assertCodePoints("\033[1C\033[1A\033[1AB\033[1C\033[1BHi").assertEmpty();
}
@Test
public void testI() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("abc");
curr.update(new LineBuffer().insert(""), screen, 20);
screen.assertCodePoints("\r\033[K").assertEmpty();
}
@Test
public void testJ() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("abc");
curr.update(new LineBuffer().insert("a\nbc"), screen, 20);
screen.assertCodePoints("\b\b\033[K\nbc").assertEmpty();
}
@Test
public void testL() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("ab\ncd");
curr.update(new LineBuffer().insert("abcde"), screen, 4);
screen.assertCodePoints("\033[1Acde\033[K").assertEmpty();
}
@Test
public void testM() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("ab\ncd");
curr.update(new LineBuffer().insert("abcd"), screen, 4);
screen.assertCodePoints("\033[1Acd \r\033[K").assertEmpty();
}
@Test
public void testN() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("ab\nef");
curr.update(new LineBuffer().insert("abcdefg"), screen, 4);
screen.assertCodePoints("\033[1Acd\033[1C\033[1Cg").assertEmpty();
}
@Test
public void testO() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("a\nb");
curr.update(new LineBuffer().insert("a\nbc"), screen, 20);
screen.assertCodePoints("c").assertEmpty();
}
@Test
public void testP() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("abc\nb");
curr.update(new LineBuffer().insert("a\nbc"), screen, 20);
screen.assertCodePoints("\033[1A\033[K\n\033[1Cc").assertEmpty();
}
@Test
public void testQ() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("ab\ncd\nef\ngh");
curr.update(new LineBuffer().insert("AbC"), screen, 20);
screen.assertCodePoints("\r\033[1A\033[1A\033[1AA\033[1CC\r\033[1B\033[K"
+ "\033[1B\033[K\033[1B\033[K"
+ "\033[1C\033[1C"
+ "\033[1C\033[1A\033[1A\033[1A"
).assertEmpty();
}
@Test
public void testR() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("");
curr.update(new LineBuffer().insert("ab\n\ncd"), screen, 20);
screen.assertCodePoints("ab\n\ncd");
}
@Test
public void testS() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("abcdefg").setCursor(2);
curr.update(new LineBuffer().insert("ab"), screen, 4);
screen.assertCodePoints("\033[K\r\033[1B\033[K\033[1C\033[1C\033[1A").assertEmpty();
}
@Test
public void testT() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("abcdefg").setCursor(3);
curr.update(new LineBuffer().insert("abc"), screen, 4);
screen.assertCodePoints("\033[K\r\033[1B\033[K\033[1C\033[1C\033[1C\033[1A").assertEmpty();
}
@Test
public void testU() {
TestTerminal screen = new TestTerminal();
LineBuffer curr = new LineBuffer().insert("abcdefghijk").setCursor(2);
curr.update(new LineBuffer().insert("ab"), screen, 4);
// todo:
// optimize \033[1C + \033[1C -> \033[2C
// optimize \033[1A + \033[1A -> \033[2A
screen.assertCodePoints("\033[K\r\033[1B\033[K\033[1B\033[K\033[1C\033[1C\033[1A\033[1A").assertEmpty();
}
}