github.com/slava-ustovytski/docker@v1.8.2-rc1/pkg/ansiescape/split_test.go (about) 1 package ansiescape 2 3 import ( 4 "bufio" 5 "strings" 6 "testing" 7 ) 8 9 func TestSplit(t *testing.T) { 10 lines := []string{ 11 "test line 1", 12 "another test line", 13 "some test line", 14 "line with non-cursor moving sequence \x1b[1T", // Scroll Down 15 "line with \x1b[31;1mcolor\x1b[0m then reset", // "color" in Bold Red 16 "cursor forward \x1b[1C and backward \x1b[1D", 17 "invalid sequence \x1babcd", 18 "", 19 "after empty", 20 } 21 splitSequences := []string{ 22 "\x1b[1A", // Cursor up 23 "\x1b[1B", // Cursor down 24 "\x1b[1E", // Cursor next line 25 "\x1b[1F", // Cursor previous line 26 "\x1b[1;1H", // Move cursor to position 27 "\x1b[1;1h", // Move cursor to position 28 "\n", 29 "\r\n", 30 "\n\r", 31 "\x1b[1A\r", 32 "\r\x1b[1A", 33 } 34 35 for _, sequence := range splitSequences { 36 scanner := bufio.NewScanner(strings.NewReader(strings.Join(lines, sequence))) 37 scanner.Split(ScanANSILines) 38 i := 0 39 for scanner.Scan() { 40 if i >= len(lines) { 41 t.Fatalf("Too many scanned lines") 42 } 43 scanned := scanner.Text() 44 if scanned != lines[i] { 45 t.Fatalf("Wrong line scanned with sequence %q\n\tExpected: %q\n\tActual: %q", sequence, lines[i], scanned) 46 } 47 i++ 48 } 49 if i < len(lines) { 50 t.Errorf("Wrong number of lines for sequence %q: %d, expected %d", sequence, i, len(lines)) 51 } 52 } 53 }