// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package db

import "testing"

func TestParseWord(t *testing.T) {
	tests := []struct {
		word    string
		want    part
		wantErr bool
	}{
		{"key:value", part{"key", equals, "value", ""}, false},
		{"key>value", part{"key", gt, "value", ""}, false},
		{"key<value", part{"key", lt, "value", ""}, false},
		{"bogus query", part{}, true},
	}
	for _, test := range tests {
		t.Run(test.word, func(t *testing.T) {
			p, err := parseWord(test.word)
			if test.wantErr {
				if err == nil {
					t.Fatalf("have %#v, want error", p)
				}
				return
			}
			if err != nil {
				t.Fatalf("have error %v", err)
			}
			if p != test.want {
				t.Fatalf("parseWord = %#v, want %#v", p, test.want)
			}
			p, err = p.merge(part{p.key, gt, "", ""})
			if err != nil {
				t.Fatalf("failed to merge with noop: %v", err)
			}
			if p != test.want {
				t.Fatalf("merge with noop = %#v, want %#v", p, test.want)
			}
		})
	}
}
