kresult_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. package ktypes
  2. import (
  3. "fmt"
  4. "testing"
  5. )
  6. type testerResult struct {
  7. t *testing.T
  8. }
  9. func TestResult(t *testing.T) {
  10. sf := &testerResult{
  11. t: t,
  12. }
  13. sf.create()
  14. }
  15. // Создаёт новый Result
  16. func (sf *testerResult) create() {
  17. sf.t.Log("create")
  18. sf.createOkBad1()
  19. sf.createOkGood1()
  20. sf.createOkGood2()
  21. sf.createErrBad1()
  22. sf.createErrGood1()
  23. }
  24. func (sf *testerResult) createErrGood1() {
  25. sf.t.Log("createErrGood1")
  26. defer func() {
  27. if _panic := recover(); _panic != nil {
  28. sf.t.Fatalf("createErrGood1(): panic=%v", _panic)
  29. }
  30. }()
  31. err := fmt.Errorf("test err")
  32. res := NewErr[string](err)
  33. if res.IsOk() {
  34. sf.t.Fatalf("createErrGood1(): is ok")
  35. }
  36. if !res.IsErr() {
  37. sf.t.Fatalf("createErrGood1(): not err")
  38. }
  39. if val := res.ValOr("test2"); val != "test2" {
  40. sf.t.Fatalf("createErrGood1(): val bad")
  41. }
  42. if val := res.ValOr("test1"); val != "test1" {
  43. sf.t.Fatalf("createErrGood1(): val bad")
  44. }
  45. if val := res.ValOrFn(sf.fnWrap2); val != "test5" {
  46. sf.t.Fatalf("createErrGood1(): val bad")
  47. }
  48. if err := res.Err(); err == nil {
  49. sf.t.Fatalf("createErrGood1(): err == nil")
  50. }
  51. {
  52. res0 := WrapErr(res, err)
  53. if res0.IsOk() {
  54. sf.t.Fatalf("createErrGood1(): err == nil")
  55. }
  56. _ = res0.Error()
  57. }
  58. {
  59. res := NewOk("test_ok")
  60. if val := res.ValOr("test_ok1"); val != "test_ok" {
  61. sf.t.Fatalf("createErrGood1(): val(%v) != 'test_ok'", val)
  62. }
  63. }
  64. sf.unwrapErr(res)
  65. sf.hassert(res)
  66. sf.assert(res)
  67. }
  68. func (sf *testerResult) assert(res Result[string]) {
  69. sf.t.Log("assert")
  70. defer func() {
  71. if _panic := recover(); _panic == nil {
  72. sf.t.Fatalf("assert(): panic==nil")
  73. }
  74. }()
  75. res.Hassert("test assert")
  76. }
  77. func (sf *testerResult) hassert(res Result[string]) {
  78. sf.t.Log("hassert")
  79. defer func() {
  80. if _panic := recover(); _panic == nil {
  81. sf.t.Fatalf("hassert(): panic==nil")
  82. }
  83. }()
  84. res.Hassert("test hassert")
  85. }
  86. func (sf *testerResult) unwrapErr(res Result[string]) {
  87. sf.t.Log("unwrapErr")
  88. defer func() {
  89. if _panic := recover(); _panic == nil {
  90. sf.t.Fatalf("unwrapErr(): panic==nil")
  91. }
  92. }()
  93. _ = res.Val()
  94. }
  95. // Нет ошибки
  96. func (sf *testerResult) createErrBad1() {
  97. sf.t.Log("createErrBad1")
  98. defer func() {
  99. if _panic := recover(); _panic == nil {
  100. sf.t.Fatalf("createErrBad1(): panic==nil")
  101. }
  102. }()
  103. var err error
  104. _ = NewErr[bool](err)
  105. }
  106. func (sf *testerResult) createOkGood2() {
  107. sf.t.Log("createOkGood2")
  108. defer func() {
  109. if _panic := recover(); _panic != nil {
  110. sf.t.Fatalf("createOkGood2(): panic=%v", _panic)
  111. }
  112. }()
  113. str := "test val"
  114. res := NewOk(str)
  115. if !res.IsOk() {
  116. sf.t.Fatalf("createOkGood1(): not ok")
  117. }
  118. if res.IsErr() {
  119. sf.t.Fatalf("createOkGood1(): is err")
  120. }
  121. if val := res.Val(); val != "test val" {
  122. sf.t.Fatalf("createOkGood1(): val bad")
  123. }
  124. if val := res.ValOr("test1"); val != "test val" {
  125. sf.t.Fatalf("createOkGood1(): val bad")
  126. }
  127. if val := res.ValOr("test1"); val != "test val" {
  128. sf.t.Fatalf("createOkGood1(): val bad")
  129. }
  130. if val := res.ValOrFn(sf.fnWrap); val != "test val" {
  131. sf.t.Fatalf("createOkGood1(): val bad")
  132. }
  133. res0 := NewErr[any](fmt.Errorf("test_error"))
  134. if err := res0.Err(); err == nil {
  135. sf.t.Fatalf("createOkGood1(): err ==nil")
  136. }
  137. res.Hassert("test")
  138. res.Assert("test")
  139. }
  140. // Функция высшего порядка для замещения ошибки
  141. func (sf *testerResult) fnWrap2() string {
  142. return "test5"
  143. }
  144. // Функция высшего порядка для замещения ошибки
  145. func (sf *testerResult) fnWrap() string {
  146. return "test1"
  147. }
  148. func (sf *testerResult) createOkGood1() {
  149. sf.t.Log("createOkGood1")
  150. defer func() {
  151. if _panic := recover(); _panic != nil {
  152. sf.t.Fatalf("createOkGood1(): panic=%v", _panic)
  153. }
  154. }()
  155. str := "test val"
  156. _ = NewOk(&str)
  157. }
  158. // Нет результата
  159. func (sf *testerResult) createOkBad1() {
  160. sf.t.Log("createOkBad1")
  161. defer func() {
  162. if _panic := recover(); _panic == nil {
  163. sf.t.Fatalf("createOkBad1(): panic==nil")
  164. }
  165. }()
  166. var str *string
  167. _ = NewOk(str)
  168. }