error_test.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package validate
  2. import (
  3. "errors"
  4. "testing"
  5. )
  6. func TestErrorIs(t *testing.T) {
  7. type TestCase struct {
  8. Err error
  9. Target error
  10. Is bool
  11. }
  12. testCases := []TestCase{
  13. // Is any validation error
  14. {Err: Err, Target: Err, Is: true},
  15. {Err: ErrDisallowedChars, Target: Err, Is: true},
  16. {Err: ErrMustBeGreater, Target: Err, Is: true},
  17. // Is specific validation error
  18. {Err: ErrDisallowedChars, Target: ErrDisallowedChars, Is: true},
  19. {Err: ErrMustBeGreater, Target: ErrMustBeGreater, Is: true},
  20. // Is not specific validation error
  21. {Err: Err, Target: ErrDisallowedChars},
  22. {Err: Err, Target: ErrMustBeGreater},
  23. {Err: ErrMustBeGreater, Target: ErrDisallowedChars},
  24. {Err: ErrDisallowedChars, Target: ErrMustBeGreater},
  25. // Is not any other error
  26. {Err: ErrDisallowedChars, Target: errors.New("contains disallowed characters")},
  27. {Err: ErrMustBeGreater, Target: errors.New("must be greater than %v")},
  28. }
  29. for i, tc := range testCases {
  30. t.Logf("(%d) Testing %v against %v", i, tc.Err, tc.Target)
  31. if errors.Is(tc.Err, tc.Target) {
  32. if !tc.Is {
  33. t.Errorf("%v should not equal %v", tc.Err, tc.Target)
  34. }
  35. } else {
  36. if tc.Is {
  37. t.Errorf("%v should equal %v", tc.Err, tc.Target)
  38. }
  39. }
  40. }
  41. }