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)) } } }