54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
|
package ansiescape
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestSplit(t *testing.T) {
|
||
|
lines := []string{
|
||
|
"test line 1",
|
||
|
"another test line",
|
||
|
"some test line",
|
||
|
"line with non-cursor moving sequence \x1b[1T", // Scroll Down
|
||
|
"line with \x1b[31;1mcolor\x1b[0m then reset", // "color" in Bold Red
|
||
|
"cursor forward \x1b[1C and backward \x1b[1D",
|
||
|
"invalid sequence \x1babcd",
|
||
|
"",
|
||
|
"after empty",
|
||
|
}
|
||
|
splitSequences := []string{
|
||
|
"\x1b[1A", // Cursor up
|
||
|
"\x1b[1B", // Cursor down
|
||
|
"\x1b[1E", // Cursor next line
|
||
|
"\x1b[1F", // Cursor previous line
|
||
|
"\x1b[1;1H", // Move cursor to position
|
||
|
"\x1b[1;1h", // Move cursor to position
|
||
|
"\n",
|
||
|
"\r\n",
|
||
|
"\n\r",
|
||
|
"\x1b[1A\r",
|
||
|
"\r\x1b[1A",
|
||
|
}
|
||
|
|
||
|
for _, sequence := range splitSequences {
|
||
|
scanner := bufio.NewScanner(strings.NewReader(strings.Join(lines, sequence)))
|
||
|
scanner.Split(ScanANSILines)
|
||
|
i := 0
|
||
|
for scanner.Scan() {
|
||
|
if i >= len(lines) {
|
||
|
t.Fatalf("Too many scanned lines")
|
||
|
}
|
||
|
scanned := scanner.Text()
|
||
|
if scanned != lines[i] {
|
||
|
t.Fatalf("Wrong line scanned with sequence %q\n\tExpected: %q\n\tActual: %q", sequence, lines[i], scanned)
|
||
|
}
|
||
|
i++
|
||
|
}
|
||
|
if i < len(lines) {
|
||
|
t.Errorf("Wrong number of lines for sequence %q: %d, expected %d", sequence, i, len(lines))
|
||
|
}
|
||
|
}
|
||
|
}
|