safe_bool_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package safe_bool
  2. import (
  3. "os"
  4. "testing"
  5. . "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. sb ISafeBool
  11. }
  12. func TestSAfeBool(t *testing.T) {
  13. sf := &tester{
  14. t: t,
  15. }
  16. sf.create()
  17. sf.set()
  18. sf.reset()
  19. sf.newFromEnv()
  20. sf.newFromStr()
  21. }
  22. // Булево из строки.
  23. func (sf *tester) newFromStr() {
  24. sf.t.Log("newFromStr")
  25. sf.newFromStrBad1()
  26. sf.newFromStrGood1()
  27. }
  28. func (sf *tester) newFromStrGood1() {
  29. sf.t.Log("newFromStrGood1")
  30. res := NewSafeBoolFromStr(defs.Txt("tRuE"))
  31. if res.IsErr() {
  32. sf.t.Fatalf("newFromStrGood1(): err=%v", res.Err())
  33. }
  34. sb := res.Ok()
  35. if val := sb.Get(); val != true {
  36. sf.t.Fatalf("newFromStrGood1(): val==false")
  37. }
  38. }
  39. // Кривое булево значение.
  40. func (sf *tester) newFromStrBad1() {
  41. sf.t.Log("newFromStrBad1")
  42. res := NewSafeBoolFromStr(defs.Txt("0"))
  43. if res.IsOk() {
  44. sf.t.Fatalf("newFromStrBad1(): err==nil")
  45. }
  46. }
  47. // Булево из окружения.
  48. func (sf *tester) newFromEnv() {
  49. sf.t.Log("newFromEnv")
  50. sf.newFromEnvBad1()
  51. sf.newFromEnvGood1()
  52. sf.newFromEnvGood2()
  53. }
  54. var testBool = defs.Txt("TEST_BOOL")
  55. func (sf *tester) newFromEnvGood2() {
  56. sf.t.Log("newFromEnvGood2")
  57. _ = os.Unsetenv(testBool.String())
  58. _ = os.Setenv(testBool.String(), "false")
  59. res := NewSafeBoolGetenv(testBool)
  60. if res.IsErr() {
  61. sf.t.Fatalf("newFromEnvGood2(): err=%v", res.Err())
  62. }
  63. sb := res.Ok()
  64. if val := sb.Get(); val != false {
  65. sf.t.Fatalf("newFromEnvGood2(): val==true")
  66. }
  67. }
  68. func (sf *tester) newFromEnvGood1() {
  69. sf.t.Log("newFromEnvGood1")
  70. _ = os.Unsetenv(testBool.String())
  71. _ = os.Setenv(testBool.String(), "true")
  72. res := NewSafeBoolGetenv(testBool)
  73. if res.IsErr() {
  74. sf.t.Fatalf("newFromEnvGood1(): err=%v", res.Err())
  75. }
  76. sb := res.Ok()
  77. if val := sb.Get(); val != true {
  78. sf.t.Fatalf("newFromEnvGood1(): val==false")
  79. }
  80. }
  81. // Кривое булево значение.
  82. func (sf *tester) newFromEnvBad1() {
  83. sf.t.Log("newFromStrBad1")
  84. _ = os.Unsetenv(testBool.String())
  85. _ = os.Setenv(testBool.String(), "bad")
  86. res := NewSafeBoolGetenv(testBool)
  87. if res.IsOk() {
  88. sf.t.Fatalf("newFromStrBad1(): err==nil")
  89. }
  90. }
  91. // Сбрасывает хранимое значение.
  92. func (sf *tester) reset() {
  93. sf.t.Log("reset")
  94. sf.sb.Reset()
  95. if sf.sb.Get() {
  96. sf.t.Fatalf("reset(): SafeBool==true")
  97. }
  98. sf.sb.Reset()
  99. if sf.sb.Get() {
  100. sf.t.Fatalf("reset(): SafeBool==true")
  101. }
  102. }
  103. // Установка хранимого значения.
  104. func (sf *tester) set() {
  105. sf.t.Log("set")
  106. sf.sb.Set()
  107. if !sf.sb.Get() {
  108. sf.t.Fatalf("set(): SafeBool==true")
  109. }
  110. sf.sb.Set()
  111. if !sf.sb.Get() {
  112. sf.t.Fatalf("set(): SafeBool==true")
  113. }
  114. }
  115. // Создаёт потокобезопасный булевый признак.
  116. func (sf *tester) create() {
  117. sf.t.Log("create")
  118. sf.sb = NewSafeBool(false)
  119. if sf.sb == nil {
  120. sf.t.Fatalf("create(): SafeBool==nil")
  121. }
  122. if sf.sb.Get() {
  123. sf.t.Fatalf("create(): SafeBool==true")
  124. }
  125. }