errors_test.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package errors
  2. import (
  3. "io"
  4. "reflect"
  5. "testing"
  6. )
  7. func TestNew(t *testing.T) {
  8. got := New("test error")
  9. want := errorString("test error")
  10. if !reflect.DeepEqual(got, want) {
  11. t.Errorf("New: got %#v, want %#v", got, want)
  12. }
  13. }
  14. func TestNewError(t *testing.T) {
  15. tests := []struct {
  16. err string
  17. want error
  18. }{
  19. {"", errorString("")},
  20. {"foo", errorString("foo")},
  21. {"foo", New("foo")},
  22. }
  23. for _, tt := range tests {
  24. got := New(tt.err)
  25. if got.Error() != tt.want.Error() {
  26. t.Errorf("New.Error(): got: %q, want %q", got, tt.want)
  27. }
  28. }
  29. }
  30. type nilError struct{}
  31. func (nilError) Error() string { return "nil error" }
  32. type causeError struct {
  33. err error
  34. }
  35. func (e *causeError) Error() string { return "cause error" }
  36. func (e *causeError) Cause() error { return e.err }
  37. func TestCause(t *testing.T) {
  38. tests := []struct {
  39. err error
  40. want error
  41. }{{
  42. // nil error is nil
  43. err: nil,
  44. want: nil,
  45. }, {
  46. // explicit nil error is nil
  47. err: (error)(nil),
  48. want: nil,
  49. }, {
  50. // typed nil is nil
  51. err: (*nilError)(nil),
  52. want: (*nilError)(nil),
  53. }, {
  54. // uncaused error is unaffected
  55. err: io.EOF,
  56. want: io.EOF,
  57. }, {
  58. // caused error returns cause
  59. err: &causeError{err: io.EOF},
  60. want: io.EOF,
  61. }}
  62. for i, tt := range tests {
  63. got := Cause(tt.err)
  64. if !reflect.DeepEqual(got, tt.want) {
  65. t.Errorf("test %d: got %#v, want %#v", i+1, got, tt.want)
  66. }
  67. }
  68. }