Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / go / pointer / query_test.go
1 package pointer
2
3 import (
4         "reflect"
5         "testing"
6
7         "golang.org/x/tools/go/loader"
8 )
9
10 func TestParseExtendedQuery(t *testing.T) {
11         const myprog = `
12 package pkg
13
14 import "reflect"
15
16 type T []*int
17
18 var V1 *int
19 var V2 **int
20 var V3 []*int
21 var V4 chan []*int
22 var V5 struct {F1, F2 chan *int}
23 var V6 [1]chan *int
24 var V7 int
25 var V8 T
26 var V9 reflect.Value
27 `
28         tests := []struct {
29                 in    string
30                 out   []interface{}
31                 v     string
32                 valid bool
33         }{
34                 {`x`, []interface{}{"x"}, "V1", true},
35                 {`x`, []interface{}{"x"}, "V9", true},
36                 {`*x`, []interface{}{"x", "load"}, "V2", true},
37                 {`x[0]`, []interface{}{"x", "sliceelem"}, "V3", true},
38                 {`x[0]`, []interface{}{"x", "sliceelem"}, "V8", true},
39                 {`<-x`, []interface{}{"x", "recv"}, "V4", true},
40                 {`(<-x)[0]`, []interface{}{"x", "recv", "sliceelem"}, "V4", true},
41                 {`<-x.F2`, []interface{}{"x", "field", 1, "recv"}, "V5", true},
42                 {`<-x[0]`, []interface{}{"x", "arrayelem", "recv"}, "V6", true},
43                 {`x`, nil, "V7", false},
44                 {`y`, nil, "V1", false},
45                 {`x; x`, nil, "V1", false},
46                 {`x()`, nil, "V1", false},
47                 {`close(x)`, nil, "V1", false},
48         }
49
50         var conf loader.Config
51         f, err := conf.ParseFile("file.go", myprog)
52         if err != nil {
53                 t.Fatal(err)
54         }
55         conf.CreateFromFiles("main", f)
56         lprog, err := conf.Load()
57         if err != nil {
58                 t.Fatal(err)
59         }
60         pkg := lprog.Created[0].Pkg
61
62         for _, test := range tests {
63                 typ := pkg.Scope().Lookup(test.v).Type()
64                 ops, _, err := parseExtendedQuery(typ, test.in)
65                 if test.valid && err != nil {
66                         t.Errorf("parseExtendedQuery(%q) = %s, expected no error", test.in, err)
67                 }
68                 if !test.valid && err == nil {
69                         t.Errorf("parseExtendedQuery(%q) succeeded, expected error", test.in)
70                 }
71
72                 if !reflect.DeepEqual(ops, test.out) {
73                         t.Errorf("parseExtendedQuery(%q) = %#v, want %#v", test.in, ops, test.out)
74                 }
75         }
76 }