Added more tokenizer tests
This commit is contained in:
parent
8b54823f6e
commit
1be26f288c
@ -30,8 +30,37 @@ func TestSplit(t *testing.T) {
|
|||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.DeepEqual(t, parameters, []string{"1+2", "3*4", "5*6", "7+8"})
|
assert.DeepEqual(t, parameters, []string{"1+2", "3*4", "5*6", "7+8"})
|
||||||
|
}
|
||||||
|
|
||||||
err = tokens.Split(func(parameter token.List) error {
|
func TestSplitGroups(t *testing.T) {
|
||||||
|
src := []byte("f(1,2),g(3,4)")
|
||||||
|
tokens := token.Tokenize(src)
|
||||||
|
parameters := []string{}
|
||||||
|
|
||||||
|
err := tokens.Split(func(parameter token.List) error {
|
||||||
|
parameters = append(parameters, parameter.Text(src))
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.DeepEqual(t, parameters, []string{"f(1,2)", "g(3,4)"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSplitEmpty(t *testing.T) {
|
||||||
|
tokens := token.List{}
|
||||||
|
|
||||||
|
err := tokens.Split(func(parameter token.List) error {
|
||||||
|
return errors.New("error")
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.Nil(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSplitError(t *testing.T) {
|
||||||
|
src := []byte("1,2,3")
|
||||||
|
tokens := token.Tokenize(src)
|
||||||
|
|
||||||
|
err := tokens.Split(func(parameter token.List) error {
|
||||||
return errors.New("error")
|
return errors.New("error")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -45,8 +45,14 @@ func TestTokenGroups(t *testing.T) {
|
|||||||
assignment := token.Token{Kind: token.Assign}
|
assignment := token.Token{Kind: token.Assign}
|
||||||
operator := token.Token{Kind: token.Add}
|
operator := token.Token{Kind: token.Add}
|
||||||
keyword := token.Token{Kind: token.If}
|
keyword := token.Token{Kind: token.If}
|
||||||
|
unary := token.Token{Kind: token.Not}
|
||||||
|
number := token.Token{Kind: token.Number}
|
||||||
|
comparison := token.Token{Kind: token.Equal}
|
||||||
|
|
||||||
assert.True(t, assignment.IsAssignment())
|
assert.True(t, assignment.IsAssignment())
|
||||||
assert.True(t, operator.IsOperator())
|
assert.True(t, operator.IsOperator())
|
||||||
assert.True(t, keyword.IsKeyword())
|
assert.True(t, keyword.IsKeyword())
|
||||||
|
assert.True(t, unary.IsUnaryOperator())
|
||||||
|
assert.True(t, number.IsNumeric())
|
||||||
|
assert.True(t, comparison.IsComparison())
|
||||||
}
|
}
|
||||||
|
@ -121,9 +121,11 @@ func TestOperator(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestOperatorAssign(t *testing.T) {
|
func TestOperatorAssign(t *testing.T) {
|
||||||
tokens := token.Tokenize([]byte(`a += b -= c *= d /= e %= f &= g |= h ^= i <<= j >>= k`))
|
tokens := token.Tokenize([]byte(`a = b += c -= d *= e /= f %= g &= h |= i ^= j <<= k >>= l`))
|
||||||
|
|
||||||
expected := []token.Kind{
|
expected := []token.Kind{
|
||||||
|
token.Identifier,
|
||||||
|
token.Assign,
|
||||||
token.Identifier,
|
token.Identifier,
|
||||||
token.AddAssign,
|
token.AddAssign,
|
||||||
token.Identifier,
|
token.Identifier,
|
||||||
@ -178,6 +180,69 @@ func TestOperatorEquality(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestOperatorLogical(t *testing.T) {
|
||||||
|
tokens := token.Tokenize([]byte(`a && b || c`))
|
||||||
|
|
||||||
|
expected := []token.Kind{
|
||||||
|
token.Identifier,
|
||||||
|
token.LogicalAnd,
|
||||||
|
token.Identifier,
|
||||||
|
token.LogicalOr,
|
||||||
|
token.Identifier,
|
||||||
|
token.EOF,
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, kind := range expected {
|
||||||
|
assert.Equal(t, tokens[i].Kind, kind)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDefine(t *testing.T) {
|
||||||
|
tokens := token.Tokenize([]byte(`a := b`))
|
||||||
|
|
||||||
|
expected := []token.Kind{
|
||||||
|
token.Identifier,
|
||||||
|
token.Define,
|
||||||
|
token.Identifier,
|
||||||
|
token.EOF,
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, kind := range expected {
|
||||||
|
assert.Equal(t, tokens[i].Kind, kind)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPeriod(t *testing.T) {
|
||||||
|
tokens := token.Tokenize([]byte(`a.b.c`))
|
||||||
|
|
||||||
|
expected := []token.Kind{
|
||||||
|
token.Identifier,
|
||||||
|
token.Period,
|
||||||
|
token.Identifier,
|
||||||
|
token.Period,
|
||||||
|
token.Identifier,
|
||||||
|
token.EOF,
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, kind := range expected {
|
||||||
|
assert.Equal(t, tokens[i].Kind, kind)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNot(t *testing.T) {
|
||||||
|
tokens := token.Tokenize([]byte(`!a`))
|
||||||
|
|
||||||
|
expected := []token.Kind{
|
||||||
|
token.Not,
|
||||||
|
token.Identifier,
|
||||||
|
token.EOF,
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, kind := range expected {
|
||||||
|
assert.Equal(t, tokens[i].Kind, kind)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNegateFirstToken(t *testing.T) {
|
func TestNegateFirstToken(t *testing.T) {
|
||||||
tokens := token.Tokenize([]byte(`-a`))
|
tokens := token.Tokenize([]byte(`-a`))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user