Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / godoc / vfs / zipfs / zipfs_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/godoc/vfs/zipfs/zipfs_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/godoc/vfs/zipfs/zipfs_test.go
new file mode 100644 (file)
index 0000000..2c52a60
--- /dev/null
@@ -0,0 +1,206 @@
+// Copyright 2015 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 zipfs
+package zipfs
+
+import (
+       "archive/zip"
+       "bytes"
+       "fmt"
+       "io"
+       "io/ioutil"
+       "os"
+       "reflect"
+       "testing"
+
+       "golang.org/x/tools/godoc/vfs"
+)
+
+var (
+
+       // files to use to build zip used by zipfs in testing; maps path : contents
+       files = map[string]string{"foo": "foo", "bar/baz": "baz", "a/b/c": "c"}
+
+       // expected info for each entry in a file system described by files
+       tests = []struct {
+               Path      string
+               IsDir     bool
+               IsRegular bool
+               Name      string
+               Contents  string
+               Files     map[string]bool
+       }{
+               {"/", true, false, "", "", map[string]bool{"foo": true, "bar": true, "a": true}},
+               {"//", true, false, "", "", map[string]bool{"foo": true, "bar": true, "a": true}},
+               {"/foo", false, true, "foo", "foo", nil},
+               {"/foo/", false, true, "foo", "foo", nil},
+               {"/foo//", false, true, "foo", "foo", nil},
+               {"/bar", true, false, "bar", "", map[string]bool{"baz": true}},
+               {"/bar/", true, false, "bar", "", map[string]bool{"baz": true}},
+               {"/bar/baz", false, true, "baz", "baz", nil},
+               {"//bar//baz", false, true, "baz", "baz", nil},
+               {"/a/b", true, false, "b", "", map[string]bool{"c": true}},
+       }
+
+       // to be initialized in setup()
+       fs        vfs.FileSystem
+       statFuncs []statFunc
+)
+
+type statFunc struct {
+       Name string
+       Func func(string) (os.FileInfo, error)
+}
+
+func TestMain(t *testing.M) {
+       if err := setup(); err != nil {
+               fmt.Fprintf(os.Stderr, "Error setting up zipfs testing state: %v.\n", err)
+               os.Exit(1)
+       }
+       os.Exit(t.Run())
+}
+
+// setups state each of the tests uses
+func setup() error {
+       // create zipfs
+       b := new(bytes.Buffer)
+       zw := zip.NewWriter(b)
+       for file, contents := range files {
+               w, err := zw.Create(file)
+               if err != nil {
+                       return err
+               }
+               _, err = io.WriteString(w, contents)
+               if err != nil {
+                       return err
+               }
+       }
+       zw.Close()
+       zr, err := zip.NewReader(bytes.NewReader(b.Bytes()), int64(b.Len()))
+       if err != nil {
+               return err
+       }
+       rc := &zip.ReadCloser{
+               Reader: *zr,
+       }
+       fs = New(rc, "foo")
+
+       // pull out different stat functions
+       statFuncs = []statFunc{
+               {"Stat", fs.Stat},
+               {"Lstat", fs.Lstat},
+       }
+
+       return nil
+}
+
+func TestZipFSReadDir(t *testing.T) {
+       for _, test := range tests {
+               if test.IsDir {
+                       infos, err := fs.ReadDir(test.Path)
+                       if err != nil {
+                               t.Errorf("Failed to read directory %v\n", test.Path)
+                               continue
+                       }
+                       got := make(map[string]bool)
+                       for _, info := range infos {
+                               got[info.Name()] = true
+                       }
+                       if want := test.Files; !reflect.DeepEqual(got, want) {
+                               t.Errorf("ReadDir %v got %v\nwanted %v\n", test.Path, got, want)
+                       }
+               }
+       }
+}
+
+func TestZipFSStatFuncs(t *testing.T) {
+       for _, test := range tests {
+               for _, statFunc := range statFuncs {
+
+                       // test can stat
+                       info, err := statFunc.Func(test.Path)
+                       if err != nil {
+                               t.Errorf("Unexpected error using %v for %v: %v\n", statFunc.Name, test.Path, err)
+                               continue
+                       }
+
+                       // test info.Name()
+                       if got, want := info.Name(), test.Name; got != want {
+                               t.Errorf("Using %v for %v info.Name() got %v wanted %v\n", statFunc.Name, test.Path, got, want)
+                       }
+                       // test info.IsDir()
+                       if got, want := info.IsDir(), test.IsDir; got != want {
+                               t.Errorf("Using %v for %v info.IsDir() got %v wanted %v\n", statFunc.Name, test.Path, got, want)
+                       }
+                       // test info.Mode().IsDir()
+                       if got, want := info.Mode().IsDir(), test.IsDir; got != want {
+                               t.Errorf("Using %v for %v info.Mode().IsDir() got %v wanted %v\n", statFunc.Name, test.Path, got, want)
+                       }
+                       // test info.Mode().IsRegular()
+                       if got, want := info.Mode().IsRegular(), test.IsRegular; got != want {
+                               t.Errorf("Using %v for %v info.Mode().IsRegular() got %v wanted %v\n", statFunc.Name, test.Path, got, want)
+                       }
+                       // test info.Size()
+                       if test.IsRegular {
+                               if got, want := info.Size(), int64(len(test.Contents)); got != want {
+                                       t.Errorf("Using %v for %v inf.Size() got %v wanted %v", statFunc.Name, test.Path, got, want)
+                               }
+                       }
+               }
+       }
+}
+
+func TestZipFSNotExist(t *testing.T) {
+       _, err := fs.Open("/does-not-exist")
+       if err == nil {
+               t.Fatalf("Expected an error.\n")
+       }
+       if !os.IsNotExist(err) {
+               t.Errorf("Expected an error satisfying os.IsNotExist: %v\n", err)
+       }
+}
+
+func TestZipFSOpenSeek(t *testing.T) {
+       for _, test := range tests {
+               if test.IsRegular {
+
+                       // test Open()
+                       f, err := fs.Open(test.Path)
+                       if err != nil {
+                               t.Error(err)
+                               return
+                       }
+                       defer f.Close()
+
+                       // test Seek() multiple times
+                       for i := 0; i < 3; i++ {
+                               all, err := ioutil.ReadAll(f)
+                               if err != nil {
+                                       t.Error(err)
+                                       return
+                               }
+                               if got, want := string(all), test.Contents; got != want {
+                                       t.Errorf("File contents for %v got %v wanted %v\n", test.Path, got, want)
+                               }
+                               f.Seek(0, 0)
+                       }
+               }
+       }
+}
+
+func TestRootType(t *testing.T) {
+       tests := []struct {
+               path   string
+               fsType vfs.RootType
+       }{
+               {"/src/net/http", vfs.RootTypeGoRoot},
+               {"/src/badpath", ""},
+               {"/", vfs.RootTypeGoRoot},
+       }
+
+       for _, item := range tests {
+               if fs.RootType(item.path) != item.fsType {
+                       t.Errorf("unexpected fsType. Expected- %v, Got- %v", item.fsType, fs.RootType(item.path))
+               }
+       }
+}