result_test.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. package result
  2. import (
  3. "runtime"
  4. "testing"
  5. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  7. )
  8. type tester struct {
  9. t *testing.T
  10. }
  11. func TestResult(t *testing.T) {
  12. sf := &tester{
  13. t: t,
  14. }
  15. sf.create()
  16. sf.notCheck()
  17. }
  18. const (
  19. str1 = defs.ATxt("test result")
  20. )
  21. // Создаёт новый результат и не проверяет его.
  22. func (sf *tester) notCheck() {
  23. sf.t.Log("notCheck")
  24. defer func() {
  25. if _panic := recover(); _panic == nil {
  26. sf.t.Fatalf("notCheck(): panic==nil")
  27. }
  28. }()
  29. res := NewOk(str1)
  30. {
  31. val := res.Ok()
  32. if val != str1 {
  33. sf.t.Fatalf("notCheck() test!=test")
  34. }
  35. }
  36. runtime.Gosched()
  37. runtime.GC()
  38. _res := res.(*Result[defs.ATxt])
  39. _res.destroy(_res)
  40. }
  41. // Создаёт новый Result.
  42. func (sf *tester) create() {
  43. sf.t.Log("create")
  44. sf.createOkBad1()
  45. sf.createOkGood1()
  46. sf.createOkGood2()
  47. sf.createErrBad1()
  48. sf.createErrGood1()
  49. }
  50. func (sf *tester) createErrGood1() {
  51. sf.t.Log("createErrGood1")
  52. defer func() {
  53. if _panic := recover(); _panic != nil {
  54. sf.t.Fatalf("createErrGood1(): panic=%v", _panic)
  55. }
  56. }()
  57. err := defs.Err("test err")
  58. res := NewErr[defs.IErr](err)
  59. if res.IsOk() {
  60. sf.t.Fatalf("createErrGood1(): is ok")
  61. }
  62. if !res.IsErr() {
  63. sf.t.Fatalf("createErrGood1(): not err")
  64. }
  65. if val := res.OkOr(defs.Err("test2")); val.Get() != "test2" {
  66. sf.t.Fatalf("createErrGood1(): val bad")
  67. }
  68. if val := res.OkOr(defs.Err("test1")); val.Get() != "test1" {
  69. sf.t.Fatalf("createErrGood1(): val bad")
  70. }
  71. if val := res.OkOrFn(sf.fnWrap2); val.Get() != "test5" {
  72. sf.t.Fatalf("createErrGood1(): val bad")
  73. }
  74. if err := res.Err(); err == nil {
  75. sf.t.Fatalf("createErrGood1(): err == nil")
  76. }
  77. {
  78. res0 := WrapErr(res, err)
  79. if res0.IsOk() {
  80. sf.t.Fatalf("createErrGood1(): err == nil")
  81. }
  82. _ = res0.Error()
  83. }
  84. {
  85. res := NewOk("test_ok")
  86. if val := res.OkOr("test_ok1"); val != "test_ok" {
  87. sf.t.Fatalf("createErrGood1(): val(%v) != 'test_ok'", val)
  88. }
  89. }
  90. sf.unwrapErr(res)
  91. sf.hassert(res)
  92. sf.hassert2(res)
  93. sf.assert2()
  94. }
  95. var (
  96. str2 = defs.Txt("test assert2")
  97. )
  98. func (sf *tester) assert2() {
  99. sf.t.Log("assert2")
  100. err := defs.Err("test_error")
  101. res := NewErr[mKs.EBool](err)
  102. defer func() {
  103. if _panic := recover(); _panic == nil {
  104. sf.t.Fatalf("assert2(): panic==nil")
  105. }
  106. }()
  107. res.Assert(str2)
  108. }
  109. var (
  110. str3 = defs.Txt("test hassert2")
  111. )
  112. func (sf *tester) hassert2(res mKs.IResult[defs.IErr]) {
  113. sf.t.Log("hassert2")
  114. defer func() {
  115. if _panic := recover(); _panic == nil {
  116. sf.t.Fatalf("assert(): panic==nil")
  117. }
  118. }()
  119. _ = res.Hassert(str3)
  120. }
  121. var (
  122. str4 = defs.Txt("test assert")
  123. )
  124. func (sf *tester) hassert(res mKs.IResult[defs.IErr]) {
  125. sf.t.Log("hassert")
  126. defer func() {
  127. if _panic := recover(); _panic == nil {
  128. sf.t.Fatalf("hassert(): panic==nil")
  129. }
  130. }()
  131. _ = res.Hassert(str4)
  132. }
  133. func (sf *tester) unwrapErr(res mKs.IResult[defs.IErr]) {
  134. sf.t.Log("unwrapErr")
  135. defer func() {
  136. if _panic := recover(); _panic == nil {
  137. sf.t.Fatalf("unwrapErr(): panic==nil")
  138. }
  139. }()
  140. _ = res.Ok()
  141. }
  142. // Нет ошибки.
  143. func (sf *tester) createErrBad1() {
  144. sf.t.Log("createErrBad1")
  145. defer func() {
  146. if _panic := recover(); _panic == nil {
  147. sf.t.Fatalf("createErrBad1(): panic==nil")
  148. }
  149. }()
  150. var err defs.IErr
  151. _ = NewErr[mKs.EBool](err)
  152. }
  153. var (
  154. str = defs.Txt("test val")
  155. )
  156. func (sf *tester) createOkGood2() {
  157. sf.t.Log("createOkGood2")
  158. defer func() {
  159. if _panic := recover(); _panic != nil {
  160. sf.t.Fatalf("createOkGood2(): panic=%v", _panic)
  161. }
  162. }()
  163. res := NewOk(str)
  164. if !res.IsOk() {
  165. sf.t.Fatalf("createOkGood1(): not ok")
  166. }
  167. if res.IsErr() {
  168. sf.t.Fatalf("createOkGood1(): is err")
  169. }
  170. if val := res.Ok(); val != str {
  171. sf.t.Fatalf("createOkGood1(): val bad")
  172. }
  173. txt1 := defs.Txt("test1")
  174. if val := res.OkOr(txt1); val != str {
  175. sf.t.Fatalf("createOkGood1(): val bad")
  176. }
  177. if val := res.OkOr(txt1); val != str {
  178. sf.t.Fatalf("createOkGood1(): val bad")
  179. }
  180. if val := res.OkOrFn(sf.fnWrap); val != str {
  181. sf.t.Fatalf("createOkGood1(): val bad")
  182. }
  183. res0 := NewErr[any](defs.Err("test_error"))
  184. if err := res0.Err(); err == nil {
  185. sf.t.Fatalf("createOkGood1(): err==nil")
  186. }
  187. str1 := defs.Txt("test assert")
  188. res.Hassert(str1)
  189. res.Assert(str1)
  190. }
  191. // Функция высшего порядка для замещения ошибки.
  192. func (sf *tester) fnWrap2() defs.IErr {
  193. return defs.Err("test5")
  194. }
  195. // Функция высшего порядка для замещения ошибки.
  196. func (sf *tester) fnWrap() *defs.KTxt {
  197. return defs.Txt("test1")
  198. }
  199. func (sf *tester) createOkGood1() {
  200. sf.t.Log("createOkGood1")
  201. defer func() {
  202. if _panic := recover(); _panic != nil {
  203. sf.t.Fatalf("createOkGood1(): panic=%v", _panic)
  204. }
  205. }()
  206. str := "test val"
  207. _ = NewOk(&str)
  208. }
  209. // Нет результата.
  210. func (sf *tester) createOkBad1() {
  211. sf.t.Log("createOkBad1")
  212. defer func() {
  213. if _panic := recover(); _panic == nil {
  214. sf.t.Fatalf("createOkBad1(): panic==nil")
  215. }
  216. }()
  217. var str defs.ITxtFix
  218. _ = NewOk(str)
  219. }