github.com/aloncn/graphics-go@v0.0.1/src/os/error_test.go (about) 1 // Copyright 2012 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 5 package os_test 6 7 import ( 8 "fmt" 9 "io/ioutil" 10 "os" 11 "path/filepath" 12 "testing" 13 ) 14 15 func TestErrIsExist(t *testing.T) { 16 f, err := ioutil.TempFile("", "_Go_ErrIsExist") 17 if err != nil { 18 t.Fatalf("open ErrIsExist tempfile: %s", err) 19 return 20 } 21 defer os.Remove(f.Name()) 22 defer f.Close() 23 f2, err := os.OpenFile(f.Name(), os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600) 24 if err == nil { 25 f2.Close() 26 t.Fatal("Open should have failed") 27 return 28 } 29 if s := checkErrorPredicate("os.IsExist", os.IsExist, err); s != "" { 30 t.Fatal(s) 31 return 32 } 33 } 34 35 func testErrNotExist(name string) string { 36 f, err := os.Open(name) 37 if err == nil { 38 f.Close() 39 return "Open should have failed" 40 } 41 if s := checkErrorPredicate("os.IsNotExist", os.IsNotExist, err); s != "" { 42 return s 43 } 44 45 err = os.Chdir(name) 46 if err == nil { 47 return "Chdir should have failed" 48 } 49 if s := checkErrorPredicate("os.IsNotExist", os.IsNotExist, err); s != "" { 50 return s 51 } 52 return "" 53 } 54 55 func TestErrIsNotExist(t *testing.T) { 56 tmpDir, err := ioutil.TempDir("", "_Go_ErrIsNotExist") 57 if err != nil { 58 t.Fatalf("create ErrIsNotExist tempdir: %s", err) 59 return 60 } 61 defer os.RemoveAll(tmpDir) 62 63 name := filepath.Join(tmpDir, "NotExists") 64 if s := testErrNotExist(name); s != "" { 65 t.Fatal(s) 66 return 67 } 68 69 name = filepath.Join(name, "NotExists2") 70 if s := testErrNotExist(name); s != "" { 71 t.Fatal(s) 72 return 73 } 74 } 75 76 func checkErrorPredicate(predName string, pred func(error) bool, err error) string { 77 if !pred(err) { 78 return fmt.Sprintf("%s does not work as expected for %#v", predName, err) 79 } 80 return "" 81 } 82 83 var isExistTests = []struct { 84 err error 85 is bool 86 isnot bool 87 }{ 88 {&os.PathError{Err: os.ErrInvalid}, false, false}, 89 {&os.PathError{Err: os.ErrPermission}, false, false}, 90 {&os.PathError{Err: os.ErrExist}, true, false}, 91 {&os.PathError{Err: os.ErrNotExist}, false, true}, 92 {&os.LinkError{Err: os.ErrInvalid}, false, false}, 93 {&os.LinkError{Err: os.ErrPermission}, false, false}, 94 {&os.LinkError{Err: os.ErrExist}, true, false}, 95 {&os.LinkError{Err: os.ErrNotExist}, false, true}, 96 {&os.SyscallError{Err: os.ErrNotExist}, false, true}, 97 {&os.SyscallError{Err: os.ErrExist}, true, false}, 98 {nil, false, false}, 99 } 100 101 func TestIsExist(t *testing.T) { 102 for _, tt := range isExistTests { 103 if is := os.IsExist(tt.err); is != tt.is { 104 t.Errorf("os.IsExist(%T %v) = %v, want %v", tt.err, tt.err, is, tt.is) 105 } 106 if isnot := os.IsNotExist(tt.err); isnot != tt.isnot { 107 t.Errorf("os.IsNotExist(%T %v) = %v, want %v", tt.err, tt.err, isnot, tt.isnot) 108 } 109 } 110 } 111 112 var isPermissionTests = []struct { 113 err error 114 want bool 115 }{ 116 {nil, false}, 117 {&os.PathError{Err: os.ErrPermission}, true}, 118 {&os.SyscallError{Err: os.ErrPermission}, true}, 119 } 120 121 func TestIsPermission(t *testing.T) { 122 for _, tt := range isPermissionTests { 123 if got := os.IsPermission(tt.err); got != tt.want { 124 t.Errorf("os.IsPermission(%#v) = %v; want %v", tt.err, got, tt.want) 125 } 126 } 127 } 128 129 func TestErrPathNUL(t *testing.T) { 130 f, err := ioutil.TempFile("", "_Go_ErrPathNUL\x00") 131 if err == nil { 132 f.Close() 133 t.Fatal("TempFile should have failed") 134 } 135 f, err = ioutil.TempFile("", "_Go_ErrPathNUL") 136 if err != nil { 137 t.Fatalf("open ErrPathNUL tempfile: %s", err) 138 } 139 defer os.Remove(f.Name()) 140 defer f.Close() 141 f2, err := os.OpenFile(f.Name(), os.O_RDWR, 0600) 142 if err != nil { 143 t.Fatalf("open ErrPathNUL: %s", err) 144 } 145 f2.Close() 146 f2, err = os.OpenFile(f.Name()+"\x00", os.O_RDWR, 0600) 147 if err == nil { 148 f2.Close() 149 t.Fatal("Open should have failed") 150 } 151 }