git.deanishe.net/deanishe/awgo.git@v0.15.0/util/util_test.go (about) 1 // 2 // Copyright (c) 2016 Dean Jackson <deanishe@deanishe.net> 3 // 4 // MIT Licence. See http://opensource.org/licenses/MIT 5 // 6 // Created on 2016-05-23 7 // 8 9 package util 10 11 import ( 12 "io/ioutil" 13 "os" 14 "path/filepath" 15 "testing" 16 ) 17 18 func inTempDir(fun func(dir string)) error { 19 20 curdir, err := os.Getwd() 21 if err != nil { 22 return err 23 } 24 25 dir, err := ioutil.TempDir("", "awgo-util-") 26 if err != nil { 27 return err 28 } 29 30 dir, err = filepath.EvalSymlinks(dir) 31 if err != nil { 32 return err 33 } 34 35 defer func() { 36 if err := os.RemoveAll(dir); err != nil { 37 panic(err) 38 } 39 }() 40 41 // Change to temporary directory 42 if err := os.Chdir(dir); err != nil { 43 return err 44 } 45 46 // Change back after we're done 47 defer func() { 48 if err := os.Chdir(curdir); err != nil { 49 panic(err) 50 } 51 }() 52 53 fun(dir) 54 55 return nil 56 } 57 58 func TestMustExist(t *testing.T) { 59 60 err := inTempDir(func(dir string) { 61 62 name := "testdir" 63 64 // Create directory 65 s := MustExist(name) 66 if s != name { 67 t.Errorf("Bad Dirname. Expected=%s, Got=%s", name, s) 68 } 69 70 if _, err := os.Stat(s); err != nil { 71 t.Errorf("Couldn't stat dir %#v: %v", s, err) 72 } 73 74 // Check path is as expected 75 p := filepath.Join(dir, name) 76 p2, err := filepath.Abs(s) 77 if err != nil { 78 t.Fatal(err) 79 } 80 81 if p != p2 { 82 t.Errorf("Bad Path. Expected=%v, Got=%v", p2, p) 83 } 84 85 }) 86 87 if err != nil { 88 t.Fatal(err) 89 } 90 } 91 92 func TestPathExists(t *testing.T) { 93 94 err := inTempDir(func(dir string) { 95 96 name := "existingdir" 97 path := filepath.Join(dir, name) 98 badName := "nodir" 99 badPath := filepath.Join(dir, badName) 100 101 if err := os.MkdirAll(name, 0700); err != nil { 102 t.Fatal(err) 103 } 104 105 data := []struct { 106 p string 107 x bool 108 }{ 109 {dir, true}, 110 {name, true}, 111 {path, true}, 112 {badName, false}, 113 {badPath, false}, 114 } 115 116 for _, td := range data { 117 v := PathExists(td.p) 118 if v != td.x { 119 t.Errorf("Bad PathExists for %#v. Expected=%v, Got=%v", td.p, td.x, v) 120 } 121 122 } 123 124 }) 125 126 if err != nil { 127 t.Fatal(err) 128 } 129 }