whatcanGOwrong
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
package argv
|
||||
|
||||
import (
|
||||
"math"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var (
|
||||
parseText = ` a aa a'aa' a"aa"a
|
||||
a$PATH a"$PATH" a'$PATH'
|
||||
a"$*" a"$0" a"$\"
|
||||
a| a|a
|
||||
a"\A" a"\a\b\f\n\r\t\v\\\$" \t a'\A' a'\t'` +
|
||||
" a`ls /` `ls ~`"
|
||||
)
|
||||
|
||||
func TestScanner(t *testing.T) {
|
||||
gots, err := Scan(
|
||||
parseText,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
expects := []Token{
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("aa")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringSingleQuote, Value: []rune("aa")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringDoubleQuote, Value: []rune("aa")},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a$PATH")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringDoubleQuote, Value: []rune("$PATH")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringSingleQuote, Value: []rune("$PATH")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringDoubleQuote, Value: []rune("$*")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringDoubleQuote, Value: []rune("$0")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringDoubleQuote, Value: []rune("$\\")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokPipe},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokPipe},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringDoubleQuote, Value: []rune("\\A")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringDoubleQuote, Value: []rune("\a\b\f\n\r\t\v\\$")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("t")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringSingleQuote, Value: []rune("\\A")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokStringSingleQuote, Value: []rune("\t")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokString, Value: []rune("a")},
|
||||
{Type: TokBackQuote, Value: []rune("ls /")},
|
||||
{Type: TokSpace},
|
||||
{Type: TokBackQuote, Value: []rune("ls ~")},
|
||||
{Type: TokEOF},
|
||||
}
|
||||
if len(gots) != len(expects) {
|
||||
t.Errorf("token count is not equal: expect %d, got %d", len(expects), len(gots))
|
||||
}
|
||||
l := int(math.Min(float64(len(gots)), float64(len(expects))))
|
||||
for i := 0; i < l; i++ {
|
||||
got := gots[i]
|
||||
expect := expects[i]
|
||||
if got.Type != expect.Type {
|
||||
t.Errorf("token type is not equal: %d: expect %d, got %d", i, expect.Type, got.Type)
|
||||
}
|
||||
|
||||
if expect.Type != TokSpace && string(got.Value) != string(expect.Value) {
|
||||
t.Errorf("token value is not equal: %d: expect %s, got %s", i, string(expect.Value), string(got.Value))
|
||||
}
|
||||
}
|
||||
|
||||
for _, text := range []string{
|
||||
`a"`, `a'`, `a"\`, "`ls ~", `a\`,
|
||||
} {
|
||||
_, err := Scan(text)
|
||||
if err != ErrInvalidSyntax {
|
||||
t.Errorf("expect unexpected eof error, but got: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user