github.com/jspc/eggos@v0.5.1-0.20221028160421-556c75c878a5/drivers/cga/ansi_test.go (about) 1 package cga 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestAnsi(t *testing.T) { 9 var cases = []struct { 10 str string 11 action byte 12 params []string 13 err error 14 }{ 15 { 16 str: "\x1b[12;24G", 17 action: 'G', 18 params: []string{"12", "24"}, 19 }, 20 { 21 str: "\x1b[12;;24G", 22 action: 'G', 23 params: []string{"12", "", "24"}, 24 }, 25 { 26 str: "\x1b[G", 27 action: 'G', 28 params: []string{}, 29 }, 30 { 31 str: "X\x1b[G", 32 err: errNormalChar, 33 }, 34 { 35 str: "\x1bX[G", 36 err: errInvalidChar, 37 }, 38 { 39 str: "\x1b[\x00G", 40 err: errInvalidChar, 41 }, 42 { 43 str: "\x1b[12\x00", 44 err: errInvalidChar, 45 }, 46 } 47 48 p := ansiParser{} 49 for _, test := range cases { 50 p.Reset() 51 runcase: 52 for i := range test.str { 53 err := p.step(test.str[i]) 54 if err == nil { 55 continue 56 } 57 if err != errCSIDone { 58 if err == test.err { 59 break runcase 60 } else { 61 t.Fatalf("%q[%d] expect %v got %v", test.str, i, test.err, err) 62 } 63 } 64 if test.action != p.Action() { 65 t.Fatalf("%q[%d] expect %v got %v", test.str, i, test.action, p.Action()) 66 } 67 if !reflect.DeepEqual(test.params, p.Params()) { 68 t.Fatalf("%q[%d] expect %q got %q", test.str, i, test.params, p.Params()) 69 } 70 } 71 } 72 }