package chroma import ( "testing" "github.com/alecthomas/assert" "github.com/stretchr/testify/require" ) func TestNewlineAtEndOfFile(t *testing.T) { l := Coalesce(MustNewLexer(&Config{EnsureNL: true}, Rules{ "root": { {`(\w+)(\n)`, ByGroups(Keyword, Whitespace), nil}, }, })) it, err := l.Tokenise(nil, `hello`) assert.NoError(t, err) assert.Equal(t, []Token{{Keyword, "hello"}, {Whitespace, "\n"}}, it.Tokens()) l = Coalesce(MustNewLexer(nil, Rules{ "root": { {`(\w+)(\n)`, ByGroups(Keyword, Whitespace), nil}, }, })) it, err = l.Tokenise(nil, `hello`) assert.NoError(t, err) assert.Equal(t, []Token{{Error, "hello"}}, it.Tokens()) } func TestMatchingAtStart(t *testing.T) { l := Coalesce(MustNewLexer(&Config{}, Rules{ "root": { {`\s+`, Whitespace, nil}, {`^-`, Punctuation, Push("directive")}, {`->`, Operator, nil}, }, "directive": { {"module", NameEntity, Pop(1)}, }, })) it, err := l.Tokenise(nil, `-module ->`) assert.NoError(t, err) require.Equal(t, []Token{{Punctuation, "-"}, {NameEntity, "module"}, {Whitespace, " "}, {Operator, "->"}}, it.Tokens()) }