OSDN Git Service

add package
[bytom/vapor.git] / vendor / github.com / mitchellh / go-homedir / homedir_test.go
diff --git a/vendor/github.com/mitchellh/go-homedir/homedir_test.go b/vendor/github.com/mitchellh/go-homedir/homedir_test.go
new file mode 100644 (file)
index 0000000..cd52127
--- /dev/null
@@ -0,0 +1,129 @@
+package homedir
+
+import (
+       "os"
+       "os/user"
+       "path/filepath"
+       "testing"
+)
+
+func patchEnv(key, value string) func() {
+       bck := os.Getenv(key)
+       deferFunc := func() {
+               os.Setenv(key, bck)
+       }
+
+       if value != "" {
+               os.Setenv(key, value)
+       } else {
+               os.Unsetenv(key)
+       }
+
+       return deferFunc
+}
+
+func BenchmarkDir(b *testing.B) {
+       // We do this for any "warmups"
+       for i := 0; i < 10; i++ {
+               Dir()
+       }
+
+       b.ResetTimer()
+       for i := 0; i < b.N; i++ {
+               Dir()
+       }
+}
+
+func TestDir(t *testing.T) {
+       u, err := user.Current()
+       if err != nil {
+               t.Fatalf("err: %s", err)
+       }
+
+       dir, err := Dir()
+       if err != nil {
+               t.Fatalf("err: %s", err)
+       }
+
+       if u.HomeDir != dir {
+               t.Fatalf("%#v != %#v", u.HomeDir, dir)
+       }
+
+       DisableCache = true
+       defer func() { DisableCache = false }()
+       defer patchEnv("HOME", "")()
+       dir, err = Dir()
+       if err != nil {
+               t.Fatalf("err: %s", err)
+       }
+
+       if u.HomeDir != dir {
+               t.Fatalf("%#v != %#v", u.HomeDir, dir)
+       }
+}
+
+func TestExpand(t *testing.T) {
+       u, err := user.Current()
+       if err != nil {
+               t.Fatalf("err: %s", err)
+       }
+
+       cases := []struct {
+               Input  string
+               Output string
+               Err    bool
+       }{
+               {
+                       "/foo",
+                       "/foo",
+                       false,
+               },
+
+               {
+                       "~/foo",
+                       filepath.Join(u.HomeDir, "foo"),
+                       false,
+               },
+
+               {
+                       "",
+                       "",
+                       false,
+               },
+
+               {
+                       "~",
+                       u.HomeDir,
+                       false,
+               },
+
+               {
+                       "~foo/foo",
+                       "",
+                       true,
+               },
+       }
+
+       for _, tc := range cases {
+               actual, err := Expand(tc.Input)
+               if (err != nil) != tc.Err {
+                       t.Fatalf("Input: %#v\n\nErr: %s", tc.Input, err)
+               }
+
+               if actual != tc.Output {
+                       t.Fatalf("Input: %#v\n\nOutput: %#v", tc.Input, actual)
+               }
+       }
+
+       DisableCache = true
+       defer func() { DisableCache = false }()
+       defer patchEnv("HOME", "/custom/path/")()
+       expected := filepath.Join("/", "custom", "path", "foo/bar")
+       actual, err := Expand("~/foo/bar")
+
+       if err != nil {
+               t.Errorf("No error is expected, got: %v", err)
+       } else if actual != expected {
+               t.Errorf("Expected: %v; actual: %v", expected, actual)
+       }
+}