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