envTypes_test.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. package env
  2. import (
  3. "fmt"
  4. "reflect"
  5. "testing"
  6. )
  7. func TestBasicType(t *testing.T) {
  8. env := NewEnv()
  9. aType, err := env.Type("string")
  10. if err != nil {
  11. t.Fatalf("Type error - %v", err)
  12. }
  13. if aType != reflect.TypeOf("a") {
  14. t.Errorf("Type - received: %v - expected: %v", aType, reflect.TypeOf("a"))
  15. }
  16. aType, err = env.Type("int64")
  17. if err != nil {
  18. t.Fatal("Type error:", err)
  19. }
  20. if aType != reflect.TypeOf(int64(1)) {
  21. t.Errorf("Type - received: %v - expected: %v", aType, reflect.TypeOf(int64(1)))
  22. }
  23. }
  24. func TestDefineType(t *testing.T) {
  25. var err error
  26. var valueType reflect.Type
  27. tests := []struct {
  28. testInfo string
  29. varName string
  30. varDefineValue interface{}
  31. defineError error
  32. typeError error
  33. }{
  34. {testInfo: "nil", varName: "a", varDefineValue: nil},
  35. {testInfo: "bool", varName: "a", varDefineValue: true},
  36. {testInfo: "int16", varName: "a", varDefineValue: int16(1)},
  37. {testInfo: "int32", varName: "a", varDefineValue: int32(1)},
  38. {testInfo: "int64", varName: "a", varDefineValue: int64(1)},
  39. {testInfo: "uint32", varName: "a", varDefineValue: uint32(1)},
  40. {testInfo: "uint64", varName: "a", varDefineValue: uint64(1)},
  41. {testInfo: "float32", varName: "a", varDefineValue: float32(1)},
  42. {testInfo: "float64", varName: "a", varDefineValue: float64(1)},
  43. {testInfo: "string", varName: "a", varDefineValue: "a"},
  44. {testInfo: "string with dot", varName: "a.a", varDefineValue: nil, defineError: ErrSymbolContainsDot, typeError: fmt.Errorf("undefined type 'a.a'")},
  45. }
  46. // DefineType
  47. for _, test := range tests {
  48. env := NewEnv()
  49. err = env.DefineType(test.varName, test.varDefineValue)
  50. if err != nil && test.defineError != nil {
  51. if err.Error() != test.defineError.Error() {
  52. t.Errorf("DefineType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  53. continue
  54. }
  55. } else if err != test.defineError {
  56. t.Errorf("DefineType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  57. continue
  58. }
  59. valueType, err = env.Type(test.varName)
  60. if err != nil && test.typeError != nil {
  61. if err.Error() != test.typeError.Error() {
  62. t.Errorf("DefineType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  63. continue
  64. }
  65. } else if err != test.typeError {
  66. t.Errorf("DefineType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  67. continue
  68. }
  69. if valueType == nil || test.varDefineValue == nil {
  70. if valueType != reflect.TypeOf(test.varDefineValue) {
  71. t.Errorf("DefineType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  72. }
  73. } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() {
  74. t.Errorf("DefineType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  75. }
  76. }
  77. // DefineType NewEnv
  78. for _, test := range tests {
  79. envParent := NewEnv()
  80. envChild := envParent.NewEnv()
  81. err = envParent.DefineType(test.varName, test.varDefineValue)
  82. if err != nil && test.defineError != nil {
  83. if err.Error() != test.defineError.Error() {
  84. t.Errorf("DefineType NewEnv %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  85. continue
  86. }
  87. } else if err != test.defineError {
  88. t.Errorf("DefineType NewEnv %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  89. continue
  90. }
  91. valueType, err = envChild.Type(test.varName)
  92. if err != nil && test.typeError != nil {
  93. if err.Error() != test.typeError.Error() {
  94. t.Errorf("DefineType NewEnv %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  95. continue
  96. }
  97. } else if err != test.typeError {
  98. t.Errorf("DefineType NewEnv %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  99. continue
  100. }
  101. if valueType == nil || test.varDefineValue == nil {
  102. if valueType != reflect.TypeOf(test.varDefineValue) {
  103. t.Errorf("DefineType NewEnv %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  104. }
  105. } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() {
  106. t.Errorf("DefineType NewEnv %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  107. }
  108. }
  109. // DefineType NewModule
  110. for _, test := range tests {
  111. envParent := NewEnv()
  112. envChild, err := envParent.NewModule("envChild")
  113. if err != nil {
  114. t.Fatalf("DefineType NewModule %v - NewModule error - received: %v - expected: %v", test.testInfo, err, nil)
  115. }
  116. err = envParent.DefineType(test.varName, test.varDefineValue)
  117. if err != nil && test.defineError != nil {
  118. if err.Error() != test.defineError.Error() {
  119. t.Errorf("DefineType NewModule %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  120. continue
  121. }
  122. } else if err != test.defineError {
  123. t.Errorf("DefineType NewModule %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  124. continue
  125. }
  126. valueType, err = envChild.Type(test.varName)
  127. if err != nil && test.typeError != nil {
  128. if err.Error() != test.typeError.Error() {
  129. t.Errorf("DefineType NewModule %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  130. continue
  131. }
  132. } else if err != test.typeError {
  133. t.Errorf("DefineType NewModule %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  134. continue
  135. }
  136. if valueType == nil || test.varDefineValue == nil {
  137. if valueType != reflect.TypeOf(test.varDefineValue) {
  138. t.Errorf("DefineType NewModule %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  139. }
  140. } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() {
  141. t.Errorf("DefineType NewModule %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  142. }
  143. }
  144. // DefineGlobalType
  145. for _, test := range tests {
  146. envParent := NewEnv()
  147. envChild := envParent.NewEnv()
  148. err = envChild.DefineGlobalType(test.varName, test.varDefineValue)
  149. if err != nil && test.defineError != nil {
  150. if err.Error() != test.defineError.Error() {
  151. t.Errorf("DefineGlobalType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  152. continue
  153. }
  154. } else if err != test.defineError {
  155. t.Errorf("DefineGlobalType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  156. continue
  157. }
  158. valueType, err = envParent.Type(test.varName)
  159. if err != nil && test.typeError != nil {
  160. if err.Error() != test.typeError.Error() {
  161. t.Errorf("DefineGlobalType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  162. continue
  163. }
  164. } else if err != test.typeError {
  165. t.Errorf("DefineGlobalType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  166. continue
  167. }
  168. if valueType == nil || test.varDefineValue == nil {
  169. if valueType != reflect.TypeOf(test.varDefineValue) {
  170. t.Errorf("DefineGlobalType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  171. }
  172. } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() {
  173. t.Errorf("DefineGlobalType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  174. }
  175. valueType, err = envChild.Type(test.varName)
  176. if err != nil && test.typeError != nil {
  177. if err.Error() != test.typeError.Error() {
  178. t.Errorf("DefineGlobalType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  179. continue
  180. }
  181. } else if err != test.typeError {
  182. t.Errorf("DefineGlobalType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  183. continue
  184. }
  185. if valueType == nil || test.varDefineValue == nil {
  186. if valueType != reflect.TypeOf(test.varDefineValue) {
  187. t.Errorf("DefineGlobalType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  188. }
  189. } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() {
  190. t.Errorf("DefineGlobalType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  191. }
  192. }
  193. // DefineGlobalReflectType
  194. for _, test := range tests {
  195. envParent := NewEnv()
  196. envChild := envParent.NewEnv()
  197. err = envChild.DefineGlobalReflectType(test.varName, reflect.TypeOf(test.varDefineValue))
  198. if err != nil && test.defineError != nil {
  199. if err.Error() != test.defineError.Error() {
  200. t.Errorf("DefineGlobalReflectType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  201. continue
  202. }
  203. } else if err != test.defineError {
  204. t.Errorf("DefineGlobalReflectType %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  205. continue
  206. }
  207. valueType, err = envParent.Type(test.varName)
  208. if err != nil && test.typeError != nil {
  209. if err.Error() != test.typeError.Error() {
  210. t.Errorf("DefineGlobalReflectType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  211. continue
  212. }
  213. } else if err != test.typeError {
  214. t.Errorf("DefineGlobalReflectType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  215. continue
  216. }
  217. if valueType == nil || test.varDefineValue == nil {
  218. if valueType != reflect.TypeOf(test.varDefineValue) {
  219. t.Errorf("DefineGlobalReflectType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  220. }
  221. } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() {
  222. t.Errorf("DefineGlobalReflectType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  223. }
  224. valueType, err = envChild.Type(test.varName)
  225. if err != nil && test.typeError != nil {
  226. if err.Error() != test.typeError.Error() {
  227. t.Errorf("DefineGlobalReflectType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  228. continue
  229. }
  230. } else if err != test.typeError {
  231. t.Errorf("DefineGlobalReflectType %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  232. continue
  233. }
  234. if valueType == nil || test.varDefineValue == nil {
  235. if valueType != reflect.TypeOf(test.varDefineValue) {
  236. t.Errorf("DefineGlobalReflectType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  237. }
  238. } else if valueType.String() != reflect.TypeOf(test.varDefineValue).String() {
  239. t.Errorf("DefineGlobalReflectType %v - Type check - received: %v - expected: %v", test.testInfo, valueType, reflect.TypeOf(test.varDefineValue))
  240. }
  241. }
  242. }
  243. func TestDefineTypeFail(t *testing.T) {
  244. var err error
  245. tests := []struct {
  246. testInfo string
  247. varName string
  248. varDefineValue interface{}
  249. defineError error
  250. typeError error
  251. }{
  252. {testInfo: "nil", varName: "a", varDefineValue: nil, typeError: fmt.Errorf("undefined type 'a'")},
  253. {testInfo: "bool", varName: "a", varDefineValue: true, typeError: fmt.Errorf("undefined type 'a'")},
  254. {testInfo: "int16", varName: "a", varDefineValue: int16(1), typeError: fmt.Errorf("undefined type 'a'")},
  255. {testInfo: "int32", varName: "a", varDefineValue: int32(1), typeError: fmt.Errorf("undefined type 'a'")},
  256. {testInfo: "int64", varName: "a", varDefineValue: int64(1), typeError: fmt.Errorf("undefined type 'a'")},
  257. {testInfo: "uint32", varName: "a", varDefineValue: uint32(1), typeError: fmt.Errorf("undefined type 'a'")},
  258. {testInfo: "uint64", varName: "a", varDefineValue: uint64(1), typeError: fmt.Errorf("undefined type 'a'")},
  259. {testInfo: "float32", varName: "a", varDefineValue: float32(1), typeError: fmt.Errorf("undefined type 'a'")},
  260. {testInfo: "float64", varName: "a", varDefineValue: float64(1), typeError: fmt.Errorf("undefined type 'a'")},
  261. {testInfo: "string", varName: "a", varDefineValue: "a", typeError: fmt.Errorf("undefined type 'a'")},
  262. }
  263. // DefineTypeFail
  264. for _, test := range tests {
  265. envParent := NewEnv()
  266. envChild := envParent.NewEnv()
  267. err = envChild.DefineType(test.varName, test.varDefineValue)
  268. if err != nil && test.defineError != nil {
  269. if err.Error() != test.defineError.Error() {
  270. t.Errorf("TestDefineTypeFail %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  271. continue
  272. }
  273. } else if err != test.defineError {
  274. t.Errorf("TestDefineTypeFail %v - Define error - received: %v - expected: %v", test.testInfo, err, test.defineError)
  275. continue
  276. }
  277. _, err = envParent.Type(test.varName)
  278. if err != nil && test.typeError != nil {
  279. if err.Error() != test.typeError.Error() {
  280. t.Errorf("TestDefineTypeFail %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  281. continue
  282. }
  283. } else if err != test.typeError {
  284. t.Errorf("TestDefineTypeFail %v - Type error - received: %v - expected: %v", test.testInfo, err, test.typeError)
  285. }
  286. }
  287. }