errors_test.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //go:build go1.20
  2. package union
  3. import (
  4. "errors"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. var (
  9. err1 = errors.New("Error 1")
  10. err2 = errors.New("Error 2")
  11. err3 = errors.New("Error 3")
  12. )
  13. func TestErrorsMap(t *testing.T) {
  14. es := Errors{
  15. nil,
  16. err1,
  17. err2,
  18. }
  19. want := Errors{
  20. err2,
  21. }
  22. got := es.Map(func(e error) error {
  23. if e == err1 {
  24. return nil
  25. }
  26. return e
  27. })
  28. assert.Equal(t, want, got)
  29. }
  30. func TestErrorsFilterNil(t *testing.T) {
  31. es := Errors{
  32. nil,
  33. err1,
  34. nil,
  35. err2,
  36. nil,
  37. }
  38. want := Errors{
  39. err1,
  40. err2,
  41. }
  42. got := es.FilterNil()
  43. assert.Equal(t, want, got)
  44. }
  45. func TestErrorsErr(t *testing.T) {
  46. // Check not all nil case
  47. es := Errors{
  48. nil,
  49. err1,
  50. nil,
  51. err2,
  52. nil,
  53. }
  54. want := Errors{
  55. err1,
  56. err2,
  57. }
  58. got := es.Err()
  59. // Check all nil case
  60. assert.Equal(t, want, got)
  61. es = Errors{
  62. nil,
  63. nil,
  64. nil,
  65. }
  66. assert.Nil(t, es.Err())
  67. }
  68. func TestErrorsError(t *testing.T) {
  69. assert.Equal(t, "no error", Errors{}.Error())
  70. assert.Equal(t, "1 error: Error 1", Errors{err1}.Error())
  71. assert.Equal(t, "1 error: nil error", Errors{nil}.Error())
  72. assert.Equal(t, "2 errors: Error 1; Error 2", Errors{err1, err2}.Error())
  73. }
  74. func TestErrorsUnwrap(t *testing.T) {
  75. es := Errors{
  76. err1,
  77. err2,
  78. }
  79. assert.Equal(t, []error{err1, err2}, es.Unwrap())
  80. assert.True(t, errors.Is(es, err1))
  81. assert.True(t, errors.Is(es, err2))
  82. assert.False(t, errors.Is(es, err3))
  83. }