func TestCarriageReturn(t *testing.T) { v := vttest.FromLines("AA\n..") v.Cursor.X = 1 for _, c := range cmds(cr + "b") { assert.Nil(t, v.Process(c)) } assert.Equal(t, vttest.FromLines("bA\n..").Content, v.Content) }
func TestLineFeed(t *testing.T) { v := vttest.FromLines("AA\n..") v.Cursor.X = 1 for _, c := range cmds(lf + "b") { assert.Nil(t, v.Process(c)) } assert.Equal(t, vttest.FromLines("AA\nb.").Content, v.Content) }
func TestCursorDirections(t *testing.T) { v := vttest.FromLines("abc\ndef\nghi") moves := strings.Join([]string{ esc("[2B"), // down down esc("[2C"), // right right esc("[A"), // up (no args = 1) esc("[1D"), // left }, "") // End state: +1, +1 s := strings.NewReader(moves) want := []Cursor{ {Y: 2, X: 0}, {Y: 2, X: 2}, {Y: 1, X: 2}, {Y: 1, X: 1}, } var got []Cursor cmd, err := Decode(s) for err == nil { assert.Nil(t, v.Process(cmd)) got = append(got, v.Cursor) cmd, err = Decode(s) } if assert.Equal(t, err, io.EOF) { assert.Equal(t, want, got) } }
func TestPutRune(t *testing.T) { v := vttest.FromLines("abc\ndef\nghi") v.Cursor.Y = 1 v.Cursor.X = 1 assert.Nil(t, v.Process(cmd("z"))) assert.Equal(t, splitLines("abc\ndzf\nghi"), v.Content) assert.Equal(t, 2, v.Cursor.X) assert.Equal(t, 1, v.Cursor.Y) }
func TestBackspace(t *testing.T) { v := vttest.FromLines("BA..") v.Cursor.Y, v.Cursor.X = 0, 2 backspace := cmd(bs) assert.Nil(t, v.Process(backspace)) // Backspace doesn't actually delete text. assert.Equal(t, vttest.FromLines("BA..").Content, v.Content) assert.Equal(t, 1, v.Cursor.X) v.Cursor.X = 0 assert.Nil(t, v.Process(backspace)) assert.Equal(t, 0, v.Cursor.X) v = vttest.FromLines("..\n..") v.Cursor.Y, v.Cursor.X = 1, 0 assert.Nil(t, v.Process(backspace)) assert.Equal(t, 0, v.Cursor.Y) assert.Equal(t, 1, v.Cursor.X) }
func TestAttributes(t *testing.T) { v := vttest.FromLines("....") s := strings.NewReader( esc("[2ma") + esc("[5;22;31mb") + esc("[0mc") + esc("[4;46md")) cmd, err := Decode(s) for err == nil { assert.Nil(t, v.Process(cmd)) cmd, err = Decode(s) } assert.Equal(t, io.EOF, err) assert.Equal(t, []rune("abcd"), v.Content[0]) assert.Equal(t, []Format{ {Intensity: Dim}, {Blink: true, Fg: Red}, {}, {Underscore: true, Bg: Cyan}, }, v.Format[0]) }
func TestMoveCursor(t *testing.T) { v := vttest.FromLines("abc\ndef\nghi") assert.Nil(t, v.Process(cmd(esc("[3;1H")))) assert.Equal(t, 2, v.Cursor.Y) assert.Equal(t, 0, v.Cursor.X) }