ginger/lex_test.go

72 lines
1.4 KiB
Go
Raw Normal View History

package ginger
import (
"bytes"
"io"
. "testing"
"github.com/mediocregopher/lexgo"
"github.com/stretchr/testify/assert"
)
var lexTestSrc = `
// this is a comment
// // this is also a comment
a
anIdentifier
1
100
1.5
1.5e9
/* block comment */
prefix /*
Another block comment
/* Embedded */
/*
Super embedded
*/
*/ suffix
// this one is kind of fun, technically it's a comment
/*/
(punctuation,is{cool}<> )
-tab
`
func TestLex(t *T) {
l := newLexer(bytes.NewBufferString(lexTestSrc))
assertNext := func(typ lexgo.TokenType, val string) {
t.Logf("asserting %q", val)
tok := l.Next()
assert.Equal(t, typ, tok.TokenType)
assert.Equal(t, val, tok.Val)
}
assertNext(identifier, "a")
assertNext(identifier, "anIdentifier")
assertNext(number, "1")
assertNext(number, "100")
assertNext(number, "1.5")
assertNext(number, "1.5e9")
assertNext(identifier, "prefix")
assertNext(identifier, "suffix")
assertNext(punctuation, "(")
assertNext(identifier, "punctuation")
assertNext(punctuation, ",")
assertNext(identifier, "is")
assertNext(punctuation, "{")
assertNext(identifier, "cool")
assertNext(punctuation, "}")
assertNext(punctuation, "<")
assertNext(punctuation, ">")
assertNext(punctuation, ")")
assertNext(identifier, "-tab")
tok := l.Next()
assert.Equal(t, tok.TokenType, lexgo.Err)
assert.Equal(t, tok.Err, io.EOF)
}