+++ /dev/null
-// Copyright 2016 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 vfs_test
-
-import (
- "fmt"
- "strings"
- "testing"
- "time"
-
- "golang.org/x/tools/godoc/vfs"
- "golang.org/x/tools/godoc/vfs/mapfs"
-)
-
-func TestNewNameSpace(t *testing.T) {
-
- // We will mount this filesystem under /fs1
- mount := mapfs.New(map[string]string{"fs1file": "abcdefgh"})
-
- // Existing process. This should give error on Stat("/")
- t1 := vfs.NameSpace{}
- t1.Bind("/fs1", mount, "/", vfs.BindReplace)
-
- // using NewNameSpace. This should work fine.
- t2 := vfs.NewNameSpace()
- t2.Bind("/fs1", mount, "/", vfs.BindReplace)
-
- testcases := map[string][]bool{
- "/": {false, true},
- "/fs1": {true, true},
- "/fs1/fs1file": {true, true},
- }
-
- fss := []vfs.FileSystem{t1, t2}
-
- for j, fs := range fss {
- for k, v := range testcases {
- _, err := fs.Stat(k)
- result := err == nil
- if result != v[j] {
- t.Errorf("fs: %d, testcase: %s, want: %v, got: %v, err: %s", j, k, v[j], result, err)
- }
- }
- }
-
- fi, err := t2.Stat("/")
- if err != nil {
- t.Fatal(err)
- }
-
- if fi.Name() != "/" {
- t.Errorf("t2.Name() : want:%s got:%s", "/", fi.Name())
- }
-
- if !fi.ModTime().IsZero() {
- t.Errorf("t2.ModTime() : want:%v got:%v", time.Time{}, fi.ModTime())
- }
-}
-
-func TestReadDirUnion(t *testing.T) {
- for _, tc := range []struct {
- desc string
- ns vfs.NameSpace
- path, want string
- }{
- {
- desc: "no_go_files",
- ns: func() vfs.NameSpace {
- rootFs := mapfs.New(map[string]string{
- "doc/a.txt": "1",
- "doc/b.txt": "1",
- "doc/dir1/d1.txt": "",
- })
- docFs := mapfs.New(map[string]string{
- "doc/a.txt": "22",
- "doc/dir2/d2.txt": "",
- })
- ns := vfs.NameSpace{}
- ns.Bind("/", rootFs, "/", vfs.BindReplace)
- ns.Bind("/doc", docFs, "/doc", vfs.BindBefore)
- return ns
- }(),
- path: "/doc",
- want: "a.txt:2,b.txt:1,dir1:0,dir2:0",
- }, {
- desc: "have_go_files",
- ns: func() vfs.NameSpace {
- a := mapfs.New(map[string]string{
- "src/x/a.txt": "",
- "src/x/suba/sub.txt": "",
- })
- b := mapfs.New(map[string]string{
- "src/x/b.go": "package b",
- "src/x/subb/sub.txt": "",
- })
- c := mapfs.New(map[string]string{
- "src/x/c.txt": "",
- "src/x/subc/sub.txt": "",
- })
- ns := vfs.NameSpace{}
- ns.Bind("/", a, "/", vfs.BindReplace)
- ns.Bind("/", b, "/", vfs.BindAfter)
- ns.Bind("/", c, "/", vfs.BindAfter)
- return ns
- }(),
- path: "/src/x",
- want: "b.go:9,suba:0,subb:0,subc:0",
- }, {
- desc: "empty_mount",
- ns: func() vfs.NameSpace {
- ns := vfs.NameSpace{}
- ns.Bind("/empty", mapfs.New(nil), "/empty", vfs.BindReplace)
- return ns
- }(),
- path: "/",
- want: "empty:0",
- },
- } {
- t.Run(tc.desc, func(t *testing.T) {
- fis, err := tc.ns.ReadDir(tc.path)
- if err != nil {
- t.Fatal(err)
- }
- buf := &strings.Builder{}
- sep := ""
- for _, fi := range fis {
- fmt.Fprintf(buf, "%s%s:%d", sep, fi.Name(), fi.Size())
- sep = ","
- }
- if got := buf.String(); got != tc.want {
- t.Errorf("got %q; want %q", got, tc.want)
- }
- })
- }
-}