]> Cypherpunks repositories - gostls13.git/commitdiff
os: test that IsExist and IsNotExist handle PathError and LinkError
authorAlex Brainman <alex.brainman@gmail.com>
Fri, 3 Aug 2012 04:25:35 +0000 (14:25 +1000)
committerAlex Brainman <alex.brainman@gmail.com>
Fri, 3 Aug 2012 04:25:35 +0000 (14:25 +1000)
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6442080

src/pkg/os/error_plan9.go
src/pkg/os/error_posix.go
src/pkg/os/error_test.go
src/pkg/os/error_windows.go

index f083a2d1de38dd35d3a940f20c6d5c6a8805b3c0..85260c82aeab651d07222c5b16390d655e1d869a 100644 (file)
@@ -5,30 +5,36 @@
 package os
 
 func isExist(err error) bool {
-       if err == nil {
+       switch pe := err.(type) {
+       case nil:
                return false
-       }
-       if pe, ok := err.(*PathError); ok {
+       case *PathError:
+               err = pe.Err
+       case *LinkError:
                err = pe.Err
        }
        return contains(err.Error(), " exists")
 }
 
 func isNotExist(err error) bool {
-       if err == nil {
+       switch pe := err.(type) {
+       case nil:
                return false
-       }
-       if pe, ok := err.(*PathError); ok {
+       case *PathError:
+               err = pe.Err
+       case *LinkError:
                err = pe.Err
        }
        return contains(err.Error(), "does not exist")
 }
 
 func isPermission(err error) bool {
-       if err == nil {
+       switch pe := err.(type) {
+       case nil:
                return false
-       }
-       if pe, ok := err.(*PathError); ok {
+       case *PathError:
+               err = pe.Err
+       case *LinkError:
                err = pe.Err
        }
        return contains(err.Error(), "permission denied")
index 1685c1f2132287caa221566f8afc36a888b215d8..81b626aecb28e1ddebfd01dcaad285fc976b616b 100644 (file)
@@ -9,21 +9,36 @@ package os
 import "syscall"
 
 func isExist(err error) bool {
-       if pe, ok := err.(*PathError); ok {
+       switch pe := err.(type) {
+       case nil:
+               return false
+       case *PathError:
+               err = pe.Err
+       case *LinkError:
                err = pe.Err
        }
        return err == syscall.EEXIST || err == ErrExist
 }
 
 func isNotExist(err error) bool {
-       if pe, ok := err.(*PathError); ok {
+       switch pe := err.(type) {
+       case nil:
+               return false
+       case *PathError:
+               err = pe.Err
+       case *LinkError:
                err = pe.Err
        }
        return err == syscall.ENOENT || err == ErrNotExist
 }
 
 func isPermission(err error) bool {
-       if pe, ok := err.(*PathError); ok {
+       switch pe := err.(type) {
+       case nil:
+               return false
+       case *PathError:
+               err = pe.Err
+       case *LinkError:
                err = pe.Err
        }
        return err == syscall.EACCES || err == syscall.EPERM || err == ErrPermission
index 42f846fa3c59b8fcf47071272be18047c32ab775..054bb3fcbcc0d2b2d4beb255f017659826e723e9 100644 (file)
@@ -79,3 +79,30 @@ func checkErrorPredicate(predName string, pred func(error) bool, err error) stri
        }
        return ""
 }
+
+var isExistTests = []struct {
+       err   error
+       is    bool
+       isnot bool
+}{
+       {&os.PathError{Err: os.ErrInvalid}, false, false},
+       {&os.PathError{Err: os.ErrPermission}, false, false},
+       {&os.PathError{Err: os.ErrExist}, true, false},
+       {&os.PathError{Err: os.ErrNotExist}, false, true},
+       {&os.LinkError{Err: os.ErrInvalid}, false, false},
+       {&os.LinkError{Err: os.ErrPermission}, false, false},
+       {&os.LinkError{Err: os.ErrExist}, true, false},
+       {&os.LinkError{Err: os.ErrNotExist}, false, true},
+       {nil, false, false},
+}
+
+func TestIsExist(t *testing.T) {
+       for _, tt := range isExistTests {
+               if is := os.IsExist(tt.err); is != tt.is {
+                       t.Errorf("os.IsExist(%T %v) = %v, want %v", tt.err, tt.err, is, tt.is)
+               }
+               if isnot := os.IsNotExist(tt.err); isnot != tt.isnot {
+                       t.Errorf("os.IsNotExist(%T %v) = %v, want %v", tt.err, tt.err, isnot, tt.isnot)
+               }
+       }
+}
index 25624857264ac12e2d2dc1a60cb43cf7d34f6123..83db6c07845333266d5c5ffabb3d05a9436056f7 100644 (file)
@@ -7,10 +7,12 @@ package os
 import "syscall"
 
 func isExist(err error) bool {
-       if pe, ok := err.(*PathError); ok {
+       switch pe := err.(type) {
+       case nil:
+               return false
+       case *PathError:
                err = pe.Err
-       }
-       if pe, ok := err.(*LinkError); ok {
+       case *LinkError:
                err = pe.Err
        }
        return err == syscall.ERROR_ALREADY_EXISTS ||
@@ -18,7 +20,12 @@ func isExist(err error) bool {
 }
 
 func isNotExist(err error) bool {
-       if pe, ok := err.(*PathError); ok {
+       switch pe := err.(type) {
+       case nil:
+               return false
+       case *PathError:
+               err = pe.Err
+       case *LinkError:
                err = pe.Err
        }
        return err == syscall.ERROR_FILE_NOT_FOUND ||
@@ -26,7 +33,12 @@ func isNotExist(err error) bool {
 }
 
 func isPermission(err error) bool {
-       if pe, ok := err.(*PathError); ok {
+       switch pe := err.(type) {
+       case nil:
+               return false
+       case *PathError:
+               err = pe.Err
+       case *LinkError:
                err = pe.Err
        }
        return err == syscall.ERROR_ACCESS_DENIED || err == ErrPermission