.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / internal / lsp / fuzzy / input_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/internal/lsp/fuzzy/input_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/internal/lsp/fuzzy/input_test.go
new file mode 100644 (file)
index 0000000..dffafa5
--- /dev/null
@@ -0,0 +1,141 @@
+// Copyright 2019 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 fuzzy_test
+
+import (
+       "bytes"
+       "sort"
+       "testing"
+
+       "golang.org/x/tools/internal/lsp/fuzzy"
+)
+
+var rolesTests = []struct {
+       str  string
+       want string
+}{
+       {str: "abc::def::goo", want: "Ccc//Ccc//Ccc"},
+       {str: "proto::Message", want: "Ccccc//Ccccccc"},
+       {str: "AbstractSWTFactory", want: "CcccccccCuuCcccccc"},
+       {str: "Abs012", want: "Cccccc"},
+       {str: "/", want: " "},
+       {str: "fOO", want: "CCu"},
+       {str: "fo_oo.o_oo", want: "Cc Cc/C Cc"},
+}
+
+func rolesString(roles []fuzzy.RuneRole) string {
+       var buf bytes.Buffer
+       for _, r := range roles {
+               buf.WriteByte(" /cuC"[int(r)])
+       }
+       return buf.String()
+}
+
+func TestRoles(t *testing.T) {
+       for _, tc := range rolesTests {
+               gotRoles := make([]fuzzy.RuneRole, len(tc.str))
+               fuzzy.RuneRoles(tc.str, gotRoles)
+               got := rolesString(gotRoles)
+               if got != tc.want {
+                       t.Errorf("roles(%s) = %v; want %v", tc.str, got, tc.want)
+               }
+       }
+}
+
+var wordSplitTests = []struct {
+       input string
+       want  []string
+}{
+       {
+               input: "foo bar baz",
+               want:  []string{"foo", "bar", "baz"},
+       },
+       {
+               input: "fooBarBaz",
+               want:  []string{"foo", "Bar", "Baz"},
+       },
+       {
+               input: "FOOBarBAZ",
+               want:  []string{"FOO", "Bar", "BAZ"},
+       },
+       {
+               input: "foo123_bar2Baz3",
+               want:  []string{"foo123", "bar2", "Baz3"},
+       },
+}
+
+func TestWordSplit(t *testing.T) {
+       for _, tc := range wordSplitTests {
+               roles := fuzzy.RuneRoles(tc.input, nil)
+
+               var got []string
+               consumer := func(i, j int) {
+                       got = append(got, tc.input[i:j])
+               }
+               fuzzy.Words(roles, consumer)
+
+               if eq := diffStringLists(tc.want, got); !eq {
+                       t.Errorf("input %v: (want %v -> got %v)", tc.input, tc.want, got)
+               }
+       }
+}
+
+func diffStringLists(a, b []string) bool {
+       if len(a) != len(b) {
+               return false
+       }
+       sort.Strings(a)
+       sort.Strings(b)
+       for i := range a {
+               if a[i] != b[i] {
+                       return false
+               }
+       }
+       return true
+}
+
+var lastSegmentSplitTests = []struct {
+       str  string
+       want string
+}{
+       {
+               str:  "identifier",
+               want: "identifier",
+       },
+       {
+               str:  "two_words",
+               want: "two_words",
+       },
+       {
+               str:  "first::second",
+               want: "second",
+       },
+       {
+               str:  "foo.bar.FOOBar_buz123_test",
+               want: "FOOBar_buz123_test",
+       },
+}
+
+func TestLastSegment(t *testing.T) {
+       for _, tc := range lastSegmentSplitTests {
+               roles := fuzzy.RuneRoles(tc.str, nil)
+
+               got := fuzzy.LastSegment(tc.str, roles)
+
+               if got != tc.want {
+                       t.Errorf("str %v: want %v; got %v", tc.str, tc.want, got)
+               }
+       }
+}
+
+func BenchmarkRoles(b *testing.B) {
+       str := "AbstractSWTFactory"
+       out := make([]fuzzy.RuneRole, len(str))
+
+       for i := 0; i < b.N; i++ {
+               fuzzy.RuneRoles(str, out)
+       }
+       b.SetBytes(int64(len(str)))
+}