package query
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestTokenize(t *testing.T) {
var tests = []struct {
input string
tokens []token
}{
{"gibberish", nil},
{"status:", nil},
{":value", nil},
{"status:open", []token{{"status", "open"}}},
{"status:closed", []token{{"status", "closed"}}},
{"author:rene", []token{{"author", "rene"}}},
{`author:"René Descartes"`, []token{{"author", "René Descartes"}}},
{
`status:open status:closed author:rene author:"René Descartes"`,
[]token{
{"status", "open"},
{"status", "closed"},
{"author", "rene"},
{"author", "René Descartes"},
},
},
// quotes
{`key:"value value"`, []token{{"key", "value value"}}},
{`key:'value value'`, []token{{"key", "value value"}}},
// unmatched quotes
{`key:'value value`, nil},
{`key:value value'`, nil},
}
for _, tc := range tests {
tokens, err := tokenize(tc.input)
if tc.tokens == nil {
assert.Error(t, err)
assert.Nil(t, tokens)
} else {
assert.NoError(t, err)
assert.Equal(t, tc.tokens, tokens)
}
}
}