GoPLS Viewer

Home|gopls/godoc/vfs/namespace_test.go
1// Copyright 2016 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package vfs_test
6
7import (
8    "fmt"
9    "strings"
10    "testing"
11    "time"
12
13    "golang.org/x/tools/godoc/vfs"
14    "golang.org/x/tools/godoc/vfs/mapfs"
15)
16
17func TestNewNameSpace(t *testing.T) {
18
19    // We will mount this filesystem under /fs1
20    mount := mapfs.New(map[string]string{"fs1file""abcdefgh"})
21
22    // Existing process. This should give error on Stat("/")
23    t1 := vfs.NameSpace{}
24    t1.Bind("/fs1"mount"/"vfs.BindReplace)
25
26    // using NewNameSpace. This should work fine.
27    t2 := vfs.NewNameSpace()
28    t2.Bind("/fs1"mount"/"vfs.BindReplace)
29
30    testcases := map[string][]bool{
31        "/":            {falsetrue},
32        "/fs1":         {truetrue},
33        "/fs1/fs1file": {truetrue},
34    }
35
36    fss := []vfs.FileSystem{t1t2}
37
38    for jfs := range fss {
39        for kv := range testcases {
40            _err := fs.Stat(k)
41            result := err == nil
42            if result != v[j] {
43                t.Errorf("fs: %d, testcase: %s, want: %v, got: %v, err: %s"jkv[j], resulterr)
44            }
45        }
46    }
47
48    fierr := t2.Stat("/")
49    if err != nil {
50        t.Fatal(err)
51    }
52
53    if fi.Name() != "/" {
54        t.Errorf("t2.Name() : want:%s got:%s""/"fi.Name())
55    }
56
57    if !fi.ModTime().IsZero() {
58        t.Errorf("t2.ModTime() : want:%v got:%v"time.Time{}, fi.ModTime())
59    }
60}
61
62func TestReadDirUnion(t *testing.T) {
63    for _tc := range []struct {
64        desc       string
65        ns         vfs.NameSpace
66        pathwant string
67    }{
68        {
69            desc"no_go_files",
70            ns: func() vfs.NameSpace {
71                rootFs := mapfs.New(map[string]string{
72                    "doc/a.txt":       "1",
73                    "doc/b.txt":       "1",
74                    "doc/dir1/d1.txt""",
75                })
76                docFs := mapfs.New(map[string]string{
77                    "doc/a.txt":       "22",
78                    "doc/dir2/d2.txt""",
79                })
80                ns := vfs.NameSpace{}
81                ns.Bind("/"rootFs"/"vfs.BindReplace)
82                ns.Bind("/doc"docFs"/doc"vfs.BindBefore)
83                return ns
84            }(),
85            path"/doc",
86            want"a.txt:2,b.txt:1,dir1:0,dir2:0",
87        }, {
88            desc"have_go_files",
89            ns: func() vfs.NameSpace {
90                a := mapfs.New(map[string]string{
91                    "src/x/a.txt":        "",
92                    "src/x/suba/sub.txt""",
93                })
94                b := mapfs.New(map[string]string{
95                    "src/x/b.go":         "package b",
96                    "src/x/subb/sub.txt""",
97                })
98                c := mapfs.New(map[string]string{
99                    "src/x/c.txt":        "",
100                    "src/x/subc/sub.txt""",
101                })
102                ns := vfs.NameSpace{}
103                ns.Bind("/"a"/"vfs.BindReplace)
104                ns.Bind("/"b"/"vfs.BindAfter)
105                ns.Bind("/"c"/"vfs.BindAfter)
106                return ns
107            }(),
108            path"/src/x",
109            want"b.go:9,suba:0,subb:0,subc:0",
110        }, {
111            desc"empty_mount",
112            ns: func() vfs.NameSpace {
113                ns := vfs.NameSpace{}
114                ns.Bind("/empty"mapfs.New(nil), "/empty"vfs.BindReplace)
115                return ns
116            }(),
117            path"/",
118            want"empty:0",
119        },
120    } {
121        t.Run(tc.desc, func(t *testing.T) {
122            fiserr := tc.ns.ReadDir(tc.path)
123            if err != nil {
124                t.Fatal(err)
125            }
126            buf := &strings.Builder{}
127            sep := ""
128            for _fi := range fis {
129                fmt.Fprintf(buf"%s%s:%d"sepfi.Name(), fi.Size())
130                sep = ","
131            }
132            if got := buf.String(); got != tc.want {
133                t.Errorf("got %q; want %q"gottc.want)
134            }
135        })
136    }
137}
138
MembersX
TestNewNameSpace.t1
TestNewNameSpace.testcases
TestNewNameSpace.RangeStmt_863.BlockStmt.RangeStmt_890.v
TestReadDirUnion.RangeStmt_1384.BlockStmt.BlockStmt.RangeStmt_2993.fi
testing
vfs
mapfs
TestNewNameSpace.RangeStmt_863.j
TestNewNameSpace.RangeStmt_863.BlockStmt.RangeStmt_890.BlockStmt.err
TestReadDirUnion.RangeStmt_1384.tc
TestReadDirUnion.RangeStmt_1384.BlockStmt.BlockStmt.fis
TestNewNameSpace.mount
TestNewNameSpace.t2
TestReadDirUnion.RangeStmt_1384.Elts.Elts.ns
TestReadDirUnion.RangeStmt_1384.BlockStmt.BlockStmt.err
TestNewNameSpace.t
TestNewNameSpace.RangeStmt_863.BlockStmt.RangeStmt_890.BlockStmt._
TestReadDirUnion.RangeStmt_1384.BlockStmt.BlockStmt.sep
TestReadDirUnion.RangeStmt_1384.BlockStmt.BlockStmt.got
TestReadDirUnion
TestReadDirUnion.RangeStmt_1384.Elts.Elts.BlockStmt.a
TestReadDirUnion.RangeStmt_1384.Elts.Elts.BlockStmt.b
TestReadDirUnion.RangeStmt_1384.Elts.Elts.BlockStmt.c
TestNewNameSpace.err
TestReadDirUnion.RangeStmt_1384.Elts.Elts.docFs
TestNewNameSpace
TestNewNameSpace.RangeStmt_863.fs
TestNewNameSpace.RangeStmt_863.BlockStmt.RangeStmt_890.k
TestNewNameSpace.fi
TestReadDirUnion.RangeStmt_1384.Elts.Elts.rootFs
TestReadDirUnion.RangeStmt_1384.BlockStmt.BlockStmt.buf
TestNewNameSpace.fss
TestReadDirUnion.t
TestReadDirUnion.RangeStmt_1384.Elts.Elts.BlockStmt.ns
Members
X