Added more tokenizer tests

This commit is contained in:
Eduard Urbach 2025-02-01 14:44:24 +01:00
parent 8b54823f6e
commit 1be26f288c
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
3 changed files with 102 additions and 2 deletions

View File

@ -30,8 +30,37 @@ func TestSplit(t *testing.T) {
assert.Nil(t, err)
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")
})

View File

@ -45,8 +45,14 @@ func TestTokenGroups(t *testing.T) {
assignment := token.Token{Kind: token.Assign}
operator := token.Token{Kind: token.Add}
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, operator.IsOperator())
assert.True(t, keyword.IsKeyword())
assert.True(t, unary.IsUnaryOperator())
assert.True(t, number.IsNumeric())
assert.True(t, comparison.IsComparison())
}

View File

@ -121,9 +121,11 @@ func TestOperator(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{
token.Identifier,
token.Assign,
token.Identifier,
token.AddAssign,
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) {
tokens := token.Tokenize([]byte(`-a`))