github.com/qiniu/x@v1.11.9/cmdline/cmdline_test.go (about) 1 package cmdline 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 // --------------------------------------------------------------------------- 9 10 func equalErr(err error, errExp interface{}) bool { 11 12 if err == nil || errExp == nil { 13 return err == nil && errExp == nil 14 } 15 return err.Error() == errExp.(string) 16 } 17 18 // --------------------------------------------------------------------------- 19 20 func TestComment(t *testing.T) { 21 22 execSub := false 23 ctx := Parser{ 24 ExecSub: func(code string) (string, error) { 25 execSub = true 26 return "[" + code + "]", nil 27 }, 28 Escape: func(c byte) string { 29 return string(c) 30 }, 31 } 32 33 cmd, codeNext, err := ctx.ParseCode("#abc `calc $(a)+$(b)`") 34 if err != EOF || codeNext != "" { 35 t.Fatal("ParseCode: eof is expected") 36 } 37 if execSub { 38 t.Fatal("don't execSub") 39 } 40 if len(cmd) != 0 { 41 t.Fatal("len(cmd) != 0") 42 } 43 } 44 45 // --------------------------------------------------------------------------- 46 47 type caseParse struct { 48 code string 49 cmd []string 50 codeNext string 51 err interface{} 52 } 53 54 func TestParse(t *testing.T) { 55 56 cases := []caseParse{ 57 { 58 code: ";b", 59 cmd: []string{"b"}, 60 codeNext: "", 61 err: "end of file", 62 }, 63 { 64 code: ";b;abc", 65 cmd: []string{"b"}, 66 codeNext: "abc", 67 err: nil, 68 }, 69 { 70 code: "a`b`\\c", 71 cmd: []string{"a[b]c"}, 72 codeNext: "", 73 err: "end of file", 74 }, 75 { 76 code: "a`b`c 'c\\n`123`' \"c\\n\"", 77 cmd: []string{"a[b]c", "c\\n`123`", "cn"}, 78 codeNext: "", 79 err: "end of file", 80 }, 81 { 82 code: "auth qboxtest 'mac AccessKey SecretKey'", 83 cmd: []string{"auth", "qboxtest", "mac AccessKey SecretKey"}, 84 codeNext: "", 85 err: "end of file", 86 }, 87 { 88 code: "post http://rs.qiniu.com/delete/`base64 Bucket:Key`", 89 cmd: []string{"post", "http://rs.qiniu.com/delete/[base64 Bucket:Key]"}, 90 codeNext: "", 91 err: "end of file", 92 }, 93 { 94 code: "post http://rs.qiniu.com/delete `base64 Bucket:Key`", 95 cmd: []string{"post", "http://rs.qiniu.com/delete", "[base64 Bucket:Key]"}, 96 codeNext: "", 97 err: "end of file", 98 }, 99 { 100 code: "post http://rs.qiniu.com/delete/|base64 Bucket:Key|", 101 cmd: []string{"post", "http://rs.qiniu.com/delete/[base64 Bucket:Key]"}, 102 codeNext: "", 103 err: "end of file", 104 }, 105 { 106 code: `json '[ 107 {"code": 200}, {"code": 612} 108 ]'`, 109 cmd: []string{"json", `[ 110 {"code": 200}, {"code": 612} 111 ]`}, 112 codeNext: "", 113 err: "end of file", 114 }, 115 { 116 code: "auth qboxtest ```\nmac AccessKey SecretKey```", 117 cmd: []string{"auth", "qboxtest", "mac AccessKey SecretKey"}, 118 codeNext: "", 119 err: "end of file", 120 }, 121 { 122 code: "auth qboxtest ===\nmac AccessKey SecretKey```", 123 cmd: []string{"auth", "qboxtest"}, 124 codeNext: "mac AccessKey SecretKey```", 125 err: "incomplete string, expect ===", 126 }, 127 { 128 code: "auth qboxtest ===\rmac AccessKey SecretKey===", 129 cmd: []string{"auth", "qboxtest", "mac AccessKey SecretKey"}, 130 codeNext: "", 131 err: "end of file", 132 }, 133 { 134 code: "auth qboxtest ===\n\rmac AccessKey SecretKey===", 135 cmd: []string{"auth", "qboxtest", "\rmac AccessKey SecretKey"}, 136 codeNext: "", 137 err: "end of file", 138 }, 139 { 140 code: "auth qboxtest ===\r\n\nmac AccessKey SecretKey===", 141 cmd: []string{"auth", "qboxtest", "\nmac AccessKey SecretKey"}, 142 codeNext: "", 143 err: "end of file", 144 }, 145 { 146 code: "auth qboxtest ===mac AccessKey SecretKey===", 147 cmd: []string{"auth", "qboxtest", "mac AccessKey SecretKey"}, 148 codeNext: "", 149 err: "end of file", 150 }, 151 } 152 153 ctx := Parser{ 154 ExecSub: func(code string) (string, error) { 155 return "[" + code + "]", nil 156 }, 157 Escape: func(c byte) string { 158 return string(c) 159 }, 160 } 161 for _, c := range cases { 162 cmd, codeNext, err := ctx.ParseCode(c.code) 163 if !equalErr(err, c.err) { 164 t.Fatal("Parse failed:", c, err) 165 } 166 if !reflect.DeepEqual(cmd, c.cmd) || codeNext != c.codeNext { 167 t.Fatal("Parse failed:", c, cmd, codeNext) 168 } 169 } 170 } 171 172 // ---------------------------------------------------------------------------