mirror of
https://github.com/golang/go
synced 2024-11-06 15:36:24 -07:00
340205e581
Packages found in the module cache do not change. When we encounter a directory we have already processed in the module cache, skip that directory and add the packages that have already been computed. Change-Id: Ib1bf0bf22727110b8073b415b145034acceb6787 Reviewed-on: https://go-review.googlesource.com/c/tools/+/186921 Run-TryBot: Suzy Mueller <suzmue@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com>
124 lines
2.4 KiB
Go
124 lines
2.4 KiB
Go
package imports
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
"testing"
|
|
)
|
|
|
|
func TestDirectoryPackageInfoReachedStatus(t *testing.T) {
|
|
tests := []struct {
|
|
info directoryPackageInfo
|
|
target directoryPackageStatus
|
|
wantStatus bool
|
|
wantError bool
|
|
}{
|
|
{
|
|
info: directoryPackageInfo{
|
|
status: directoryScanned,
|
|
err: nil,
|
|
},
|
|
target: directoryScanned,
|
|
wantStatus: true,
|
|
},
|
|
{
|
|
info: directoryPackageInfo{
|
|
status: directoryScanned,
|
|
err: fmt.Errorf("error getting to directory scanned"),
|
|
},
|
|
target: directoryScanned,
|
|
wantStatus: true,
|
|
wantError: true,
|
|
},
|
|
{
|
|
info: directoryPackageInfo{},
|
|
target: directoryScanned,
|
|
wantStatus: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
gotStatus, gotErr := tt.info.reachedStatus(tt.target)
|
|
if gotErr != nil {
|
|
if !tt.wantError {
|
|
t.Errorf("unexpected error: %s", gotErr)
|
|
}
|
|
continue
|
|
}
|
|
|
|
if tt.wantStatus != gotStatus {
|
|
t.Errorf("reached status expected: %v, got: %v", tt.wantStatus, gotStatus)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestModCacheInfo(t *testing.T) {
|
|
m := &moduleCacheInfo{
|
|
modCacheDirInfo: make(map[string]*directoryPackageInfo),
|
|
}
|
|
|
|
dirInfo := []struct {
|
|
dir string
|
|
info directoryPackageInfo
|
|
}{
|
|
{
|
|
dir: "mypackage",
|
|
info: directoryPackageInfo{
|
|
status: directoryScanned,
|
|
dir: "mypackage",
|
|
nonCanonicalImportPath: "example.com/mypackage",
|
|
needsReplace: false,
|
|
},
|
|
},
|
|
{
|
|
dir: "bad package",
|
|
info: directoryPackageInfo{
|
|
status: directoryScanned,
|
|
err: fmt.Errorf("bad package"),
|
|
},
|
|
},
|
|
{
|
|
dir: "mypackage/other",
|
|
info: directoryPackageInfo{
|
|
dir: "mypackage/other",
|
|
nonCanonicalImportPath: "example.com/mypackage/other",
|
|
needsReplace: false,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, d := range dirInfo {
|
|
m.Store(d.dir, d.info)
|
|
}
|
|
|
|
for _, d := range dirInfo {
|
|
val, ok := m.Load(d.dir)
|
|
if !ok {
|
|
t.Errorf("directory not loaded: %s", d.dir)
|
|
}
|
|
|
|
if val != d.info {
|
|
t.Errorf("expected: %v, got: %v", d.info, val)
|
|
}
|
|
}
|
|
|
|
var wantKeys []string
|
|
for _, d := range dirInfo {
|
|
wantKeys = append(wantKeys, d.dir)
|
|
}
|
|
sort.Strings(wantKeys)
|
|
|
|
gotKeys := m.Keys()
|
|
sort.Strings(gotKeys)
|
|
|
|
if len(gotKeys) != len(wantKeys) {
|
|
t.Errorf("different length of keys. expected: %d, got: %d", len(wantKeys), len(gotKeys))
|
|
}
|
|
|
|
for i, want := range wantKeys {
|
|
if want != gotKeys[i] {
|
|
t.Errorf("%d: expected %s, got %s", i, want, gotKeys[i])
|
|
}
|
|
}
|
|
}
|