summaryrefslogtreecommitdiff
path: root/libgo/go/internal/oserror/errors_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/internal/oserror/errors_test.go')
-rw-r--r--libgo/go/internal/oserror/errors_test.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/libgo/go/internal/oserror/errors_test.go b/libgo/go/internal/oserror/errors_test.go
new file mode 100644
index 00000000000..6d6a56a0c74
--- /dev/null
+++ b/libgo/go/internal/oserror/errors_test.go
@@ -0,0 +1,63 @@
+package oserror_test
+
+import (
+ "errors"
+ "fmt"
+ "internal/oserror"
+ "os"
+ "testing"
+)
+
+type ttError struct {
+ timeout bool
+ temporary bool
+}
+
+func (e ttError) Error() string {
+ return fmt.Sprintf("ttError{timeout:%v temporary:%v}", e.timeout, e.temporary)
+}
+func (e ttError) Timeout() bool { return e.timeout }
+func (e ttError) Temporary() bool { return e.temporary }
+
+type isError struct {
+ err error
+}
+
+func (e isError) Error() string { return fmt.Sprintf("isError(%v)", e.err) }
+func (e isError) Is(target error) bool { return e.err == target }
+
+func TestIsTimeout(t *testing.T) {
+ for _, test := range []struct {
+ want bool
+ err error
+ }{
+ {true, ttError{timeout: true}},
+ {true, isError{os.ErrTimeout}},
+ {true, os.ErrTimeout},
+ {true, fmt.Errorf("wrap: %w", os.ErrTimeout)},
+ {false, ttError{timeout: false}},
+ {false, errors.New("error")},
+ } {
+ if got, want := oserror.IsTimeout(test.err), test.want; got != want {
+ t.Errorf("IsTimeout(err) = %v, want %v\n%+v", got, want, test.err)
+ }
+ }
+}
+
+func TestIsTemporary(t *testing.T) {
+ for _, test := range []struct {
+ want bool
+ err error
+ }{
+ {true, ttError{temporary: true}},
+ {true, isError{os.ErrTemporary}},
+ {true, os.ErrTemporary},
+ {true, fmt.Errorf("wrap: %w", os.ErrTemporary)},
+ {false, ttError{temporary: false}},
+ {false, errors.New("error")},
+ } {
+ if got, want := oserror.IsTemporary(test.err), test.want; got != want {
+ t.Errorf("IsTemporary(err) = %v, want %v\n%+v", got, want, test.err)
+ }
+ }
+}