// 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 app

import (
	"reflect"
	"testing"
)

func TestParseQueryString(t *testing.T) {
	tests := []struct {
		q          string
		wantPrefix string
		wantParts  []string
	}{
		{"prefix | one vs two", "prefix", []string{"one", "two"}},
		{"prefix one vs two", "", []string{"prefix one", "two"}},
		{"anything else", "", []string{"anything else"}},
		{`one vs "two vs three"`, "", []string{"one", `"two vs three"`}},
		{"mixed\ttabs \"and\tspaces\"", "", []string{"mixed tabs \"and\tspaces\""}},
	}
	for _, test := range tests {
		t.Run(test.q, func(t *testing.T) {
			havePrefix, haveParts := parseQueryString(test.q)
			if havePrefix != test.wantPrefix {
				t.Errorf("parseQueryString returned prefix %q, want %q", havePrefix, test.wantPrefix)
			}
			if !reflect.DeepEqual(haveParts, test.wantParts) {
				t.Errorf("parseQueryString returned parts %#v, want %#v", haveParts, test.wantParts)
			}
		})
	}
}
