github.com/varialus/godfly@v0.0.0-20130904042352-1934f9f095ab/src/pkg/path/filepath/path_windows_test.go (about) 1 package filepath_test 2 3 import ( 4 "io/ioutil" 5 "os" 6 "os/exec" 7 "path/filepath" 8 "reflect" 9 "testing" 10 ) 11 12 func TestWinSplitListTestsAreValid(t *testing.T) { 13 comspec := os.Getenv("ComSpec") 14 if comspec == "" { 15 t.Fatal("%ComSpec% must be set") 16 } 17 18 for ti, tt := range winsplitlisttests { 19 testWinSplitListTestIsValid(t, ti, tt, comspec) 20 } 21 } 22 23 func testWinSplitListTestIsValid(t *testing.T, ti int, tt SplitListTest, 24 comspec string) { 25 26 const ( 27 cmdfile = `printdir.cmd` 28 perm os.FileMode = 0700 29 ) 30 31 tmp, err := ioutil.TempDir("", "testWinSplitListTestIsValid") 32 if err != nil { 33 t.Fatalf("TempDir failed: %v", err) 34 } 35 defer os.RemoveAll(tmp) 36 37 for i, d := range tt.result { 38 if d == "" { 39 continue 40 } 41 if cd := filepath.Clean(d); filepath.VolumeName(cd) != "" || 42 cd[0] == '\\' || cd == ".." || (len(cd) >= 3 && cd[0:3] == `..\`) { 43 t.Errorf("%d,%d: %#q refers outside working directory", ti, i, d) 44 return 45 } 46 dd := filepath.Join(tmp, d) 47 if _, err := os.Stat(dd); err == nil { 48 t.Errorf("%d,%d: %#q already exists", ti, i, d) 49 return 50 } 51 if err = os.MkdirAll(dd, perm); err != nil { 52 t.Errorf("%d,%d: MkdirAll(%#q) failed: %v", ti, i, dd, err) 53 return 54 } 55 fn, data := filepath.Join(dd, cmdfile), []byte("@echo "+d+"\r\n") 56 if err = ioutil.WriteFile(fn, data, perm); err != nil { 57 t.Errorf("%d,%d: WriteFile(%#q) failed: %v", ti, i, fn, err) 58 return 59 } 60 } 61 62 for i, d := range tt.result { 63 if d == "" { 64 continue 65 } 66 exp := []byte(d + "\r\n") 67 cmd := &exec.Cmd{ 68 Path: comspec, 69 Args: []string{`/c`, cmdfile}, 70 Env: []string{`Path=` + tt.list}, 71 Dir: tmp, 72 } 73 out, err := cmd.CombinedOutput() 74 switch { 75 case err != nil: 76 t.Errorf("%d,%d: execution error %v\n%q", ti, i, err, out) 77 return 78 case !reflect.DeepEqual(out, exp): 79 t.Errorf("%d,%d: expected %#q, got %#q", ti, i, exp, out) 80 return 81 default: 82 // unshadow cmdfile in next directory 83 err = os.Remove(filepath.Join(tmp, d, cmdfile)) 84 if err != nil { 85 t.Fatalf("Remove test command failed: %v", err) 86 } 87 } 88 } 89 }