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 / internal / imports / mod_cache_test.go
1 package imports
2
3 import (
4         "fmt"
5         "reflect"
6         "sort"
7         "testing"
8 )
9
10 func TestDirectoryPackageInfoReachedStatus(t *testing.T) {
11         tests := []struct {
12                 info       directoryPackageInfo
13                 target     directoryPackageStatus
14                 wantStatus bool
15                 wantError  bool
16         }{
17                 {
18                         info: directoryPackageInfo{
19                                 status: directoryScanned,
20                                 err:    nil,
21                         },
22                         target:     directoryScanned,
23                         wantStatus: true,
24                 },
25                 {
26                         info: directoryPackageInfo{
27                                 status: directoryScanned,
28                                 err:    fmt.Errorf("error getting to directory scanned"),
29                         },
30                         target:     directoryScanned,
31                         wantStatus: true,
32                         wantError:  true,
33                 },
34                 {
35                         info:       directoryPackageInfo{},
36                         target:     directoryScanned,
37                         wantStatus: false,
38                 },
39         }
40
41         for _, tt := range tests {
42                 gotStatus, gotErr := tt.info.reachedStatus(tt.target)
43                 if gotErr != nil {
44                         if !tt.wantError {
45                                 t.Errorf("unexpected error: %s", gotErr)
46                         }
47                         continue
48                 }
49
50                 if tt.wantStatus != gotStatus {
51                         t.Errorf("reached status expected: %v, got: %v", tt.wantStatus, gotStatus)
52                 }
53         }
54 }
55
56 func TestModCacheInfo(t *testing.T) {
57         m := &dirInfoCache{
58                 dirs: make(map[string]*directoryPackageInfo),
59         }
60
61         dirInfo := []struct {
62                 dir  string
63                 info directoryPackageInfo
64         }{
65                 {
66                         dir: "mypackage",
67                         info: directoryPackageInfo{
68                                 status:                 directoryScanned,
69                                 dir:                    "mypackage",
70                                 nonCanonicalImportPath: "example.com/mypackage",
71                         },
72                 },
73                 {
74                         dir: "bad package",
75                         info: directoryPackageInfo{
76                                 status: directoryScanned,
77                                 err:    fmt.Errorf("bad package"),
78                         },
79                 },
80                 {
81                         dir: "mypackage/other",
82                         info: directoryPackageInfo{
83                                 dir:                    "mypackage/other",
84                                 nonCanonicalImportPath: "example.com/mypackage/other",
85                         },
86                 },
87         }
88
89         for _, d := range dirInfo {
90                 m.Store(d.dir, d.info)
91         }
92
93         for _, d := range dirInfo {
94                 val, ok := m.Load(d.dir)
95                 if !ok {
96                         t.Errorf("directory not loaded: %s", d.dir)
97                 }
98
99                 if !reflect.DeepEqual(d.info, val) {
100                         t.Errorf("expected: %v, got: %v", d.info, val)
101                 }
102         }
103
104         var wantKeys []string
105         for _, d := range dirInfo {
106                 wantKeys = append(wantKeys, d.dir)
107         }
108         sort.Strings(wantKeys)
109
110         gotKeys := m.Keys()
111         sort.Strings(gotKeys)
112
113         if len(gotKeys) != len(wantKeys) {
114                 t.Errorf("different length of keys. expected: %d, got: %d", len(wantKeys), len(gotKeys))
115         }
116
117         for i, want := range wantKeys {
118                 if want != gotKeys[i] {
119                         t.Errorf("%d: expected %s, got %s", i, want, gotKeys[i])
120                 }
121         }
122 }