1package query
 2
 3import (
 4	"testing"
 5
 6	"github.com/stretchr/testify/assert"
 7)
 8
 9func TestTokenize(t *testing.T) {
10	var tests = []struct {
11		input  string
12		tokens []token
13	}{
14		{"gibberish", nil},
15		{"status:", nil},
16		{":value", nil},
17
18		{"status:open", []token{{"status", "open"}}},
19		{"status:closed", []token{{"status", "closed"}}},
20
21		{"author:rene", []token{{"author", "rene"}}},
22		{`author:"René Descartes"`, []token{{"author", "René Descartes"}}},
23
24		{
25			`status:open status:closed author:rene author:"René Descartes"`,
26			[]token{
27				{"status", "open"},
28				{"status", "closed"},
29				{"author", "rene"},
30				{"author", "René Descartes"},
31			},
32		},
33
34		// quotes
35		{`key:"value value"`, []token{{"key", "value value"}}},
36		{`key:'value value'`, []token{{"key", "value value"}}},
37		// unmatched quotes
38		{`key:'value value`, nil},
39		{`key:value value'`, nil},
40	}
41
42	for _, tc := range tests {
43		tokens, err := tokenize(tc.input)
44		if tc.tokens == nil {
45			assert.Error(t, err)
46			assert.Nil(t, tokens)
47		} else {
48			assert.NoError(t, err)
49			assert.Equal(t, tc.tokens, tokens)
50		}
51	}
52}