| // Copyright 2018 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 godoc |
| |
| import ( |
| "go/build" |
| "path/filepath" |
| "runtime" |
| "sort" |
| "testing" |
| |
| "golang.org/x/tools/godoc/vfs" |
| "golang.org/x/tools/godoc/vfs/gatefs" |
| ) |
| |
| func TestNewDirTree(t *testing.T) { |
| fsGate := make(chan bool, 20) |
| rootfs := gatefs.New(vfs.OS(runtime.GOROOT()), fsGate) |
| fs := vfs.NameSpace{} |
| fs.Bind("/", rootfs, "/", vfs.BindReplace) |
| |
| c := NewCorpus(fs) |
| // 3 levels deep is enough for testing |
| dir := c.newDirectory("/", 3) |
| |
| processDir(t, dir) |
| } |
| |
| func processDir(t *testing.T, dir *Directory) { |
| var list []string |
| for _, d := range dir.Dirs { |
| list = append(list, d.Name) |
| // recursively process the lower level |
| processDir(t, d) |
| } |
| |
| if sort.StringsAreSorted(list) == false { |
| t.Errorf("list: %v is not sorted\n", list) |
| } |
| } |
| |
| func BenchmarkNewDirectory(b *testing.B) { |
| if testing.Short() { |
| b.Skip("not running tests requiring large file scan in short mode") |
| } |
| |
| fsGate := make(chan bool, 20) |
| |
| goroot := runtime.GOROOT() |
| rootfs := gatefs.New(vfs.OS(goroot), fsGate) |
| fs := vfs.NameSpace{} |
| fs.Bind("/", rootfs, "/", vfs.BindReplace) |
| for _, p := range filepath.SplitList(build.Default.GOPATH) { |
| fs.Bind("/src/golang.org", gatefs.New(vfs.OS(p), fsGate), "/src/golang.org", vfs.BindAfter) |
| } |
| b.ResetTimer() |
| b.ReportAllocs() |
| for tries := 0; tries < b.N; tries++ { |
| corpus := NewCorpus(fs) |
| corpus.newDirectory("/", -1) |
| } |
| } |