rule_tag_test.go 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759
  1. package test
  2. import (
  3. "git.sxidc.com/go-framework/baize/framework/core/tag/rule"
  4. "github.com/pkg/errors"
  5. "reflect"
  6. "testing"
  7. "time"
  8. )
  9. type RuleTagStruct struct {
  10. Ignore string
  11. StringValue string `rule:"column:string_value"`
  12. IntValue int `rule:"column:int_value"`
  13. Int8Value int8 `rule:"column:int8_value"`
  14. Int16Value int16 `rule:"column:int16_value"`
  15. Int32Value int32 `rule:"column:int32_value"`
  16. Int64Value int64 `rule:"column:int64_value"`
  17. UintValue uint `rule:"column:uint_value"`
  18. Uint8Value uint8 `rule:"column:uint8_value"`
  19. Uint16Value uint16 `rule:"column:uint16_value"`
  20. Uint32Value uint32 `rule:"column:uint32_value"`
  21. Uint64Value uint64 `rule:"column:uint64_value"`
  22. Float32Value float32 `rule:"column:float32_value"`
  23. Float64Value float64 `rule:"column:float64_value"`
  24. TimeValue time.Time `rule:"column:time_value"`
  25. BoolValue bool `rule:"column:bool_value"`
  26. TagStringValue bool `rule:"column:string_value;type:string"`
  27. TagIntValue string `rule:"column:int_value;type:number"`
  28. TagInt8Value string `rule:"column:int8_value;type:number"`
  29. TagInt16Value string `rule:"column:int16_value;type:number"`
  30. TagInt32Value string `rule:"column:int32_value;type:number"`
  31. TagInt64Value string `rule:"column:int64_value;type:number"`
  32. TagUintValue string `rule:"column:uint_value;type:number"`
  33. TagUint8Value string `rule:"column:uint8_value;type:number"`
  34. TagUint16Value string `rule:"column:uint16_value;type:number"`
  35. TagUint32Value string `rule:"column:uint32_value;type:number"`
  36. TagUint64Value string `rule:"column:uint64_value;type:number"`
  37. TagFloat32Value string `rule:"column:float32_value;type:number"`
  38. TagFloat64Value string `rule:"column:float64_value;type:number"`
  39. TagTimeValue string `rule:"column:time_value;type:time"`
  40. TagBoolValue string `rule:"column:bool_value;type:bool"`
  41. }
  42. func (s RuleTagStruct) checkFields(t *testing.T, fields []rule.Field) {
  43. if len(fields) != reflect.TypeOf(s).NumField()-1 {
  44. t.Fatalf("%+v\n", errors.Errorf("有字段没有被解析"))
  45. }
  46. for _, field := range fields {
  47. if field.FieldName == "Ignore" && field.Type != "" {
  48. t.Fatalf("%+v\n", errors.Errorf("忽略字段没有被忽略"))
  49. }
  50. switch field.FieldName {
  51. case "StringValue":
  52. if field.ColumnName != "string_value" {
  53. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  54. field.ColumnName, "string_value"))
  55. }
  56. if field.Type != "string" {
  57. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  58. field.FieldName, field.Type))
  59. }
  60. case "IntValue":
  61. if field.ColumnName != "int_value" {
  62. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  63. field.ColumnName, "int_value"))
  64. }
  65. if field.Type != "number" {
  66. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  67. field.FieldName, field.Type))
  68. }
  69. case "Int8Value":
  70. if field.ColumnName != "int8_value" {
  71. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  72. field.ColumnName, "int8_value"))
  73. }
  74. if field.Type != "number" {
  75. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  76. field.FieldName, field.Type))
  77. }
  78. case "Int16Value":
  79. if field.ColumnName != "int16_value" {
  80. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  81. field.ColumnName, "int16_value"))
  82. }
  83. if field.Type != "number" {
  84. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  85. field.FieldName, field.Type))
  86. }
  87. case "Int32Value":
  88. if field.ColumnName != "int32_value" {
  89. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  90. field.ColumnName, "int32_value"))
  91. }
  92. if field.Type != "number" {
  93. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  94. field.FieldName, field.Type))
  95. }
  96. case "Int64Value":
  97. if field.ColumnName != "int64_value" {
  98. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  99. field.ColumnName, "int64_value"))
  100. }
  101. if field.Type != "number" {
  102. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  103. field.FieldName, field.Type))
  104. }
  105. case "UintValue":
  106. if field.ColumnName != "uint_value" {
  107. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  108. field.ColumnName, "uint_value"))
  109. }
  110. if field.Type != "number" {
  111. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  112. field.FieldName, field.Type))
  113. }
  114. case "Uint8Value":
  115. if field.ColumnName != "uint8_value" {
  116. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  117. field.ColumnName, "uint8_value"))
  118. }
  119. if field.Type != "number" {
  120. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  121. field.FieldName, field.Type))
  122. }
  123. case "Uint16Value":
  124. if field.ColumnName != "uint16_value" {
  125. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  126. field.ColumnName, "uint16_value"))
  127. }
  128. if field.Type != "number" {
  129. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  130. field.FieldName, field.Type))
  131. }
  132. case "Uint32Value":
  133. if field.ColumnName != "uint32_value" {
  134. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  135. field.ColumnName, "uint32_value"))
  136. }
  137. if field.Type != "number" {
  138. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  139. field.FieldName, field.Type))
  140. }
  141. case "Uint64Value":
  142. if field.ColumnName != "uint64_value" {
  143. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  144. field.ColumnName, "uint64_value"))
  145. }
  146. if field.Type != "number" {
  147. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  148. field.FieldName, field.Type))
  149. }
  150. case "Float32Value":
  151. if field.ColumnName != "float32_value" {
  152. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  153. field.ColumnName, "float32_value"))
  154. }
  155. if field.Type != "number" {
  156. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  157. field.FieldName, field.Type))
  158. }
  159. case "Float64Value":
  160. if field.ColumnName != "float64_value" {
  161. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  162. field.ColumnName, "float64_value"))
  163. }
  164. if field.Type != "number" {
  165. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  166. field.FieldName, field.Type))
  167. }
  168. case "TimeValue":
  169. if field.ColumnName != "time_value" {
  170. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  171. field.ColumnName, "float64_value"))
  172. }
  173. if field.Type != "time" {
  174. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  175. field.FieldName, field.Type))
  176. }
  177. case "BoolValue":
  178. if field.ColumnName != "bool_value" {
  179. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  180. field.ColumnName, "float64_value"))
  181. }
  182. if field.Type != "bool" {
  183. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  184. field.FieldName, field.Type))
  185. }
  186. case "TagStringValue":
  187. if field.ColumnName != "string_value" {
  188. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  189. field.ColumnName, "string_value"))
  190. }
  191. if field.Type != "string" {
  192. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  193. field.FieldName, field.Type))
  194. }
  195. case "TagIntValue":
  196. if field.ColumnName != "int_value" {
  197. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  198. field.ColumnName, "int_value"))
  199. }
  200. if field.Type != "number" {
  201. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  202. field.FieldName, field.Type))
  203. }
  204. case "TagInt8Value":
  205. if field.ColumnName != "int8_value" {
  206. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  207. field.ColumnName, "int8_value"))
  208. }
  209. if field.Type != "number" {
  210. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  211. field.FieldName, field.Type))
  212. }
  213. case "TagInt16Value":
  214. if field.ColumnName != "int16_value" {
  215. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  216. field.ColumnName, "int16_value"))
  217. }
  218. if field.Type != "number" {
  219. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  220. field.FieldName, field.Type))
  221. }
  222. case "TagInt32Value":
  223. if field.ColumnName != "int32_value" {
  224. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  225. field.ColumnName, "int32_value"))
  226. }
  227. if field.Type != "number" {
  228. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  229. field.FieldName, field.Type))
  230. }
  231. case "TagInt64Value":
  232. if field.ColumnName != "int64_value" {
  233. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  234. field.ColumnName, "int64_value"))
  235. }
  236. if field.Type != "number" {
  237. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  238. field.FieldName, field.Type))
  239. }
  240. case "TagUintValue":
  241. if field.ColumnName != "uint_value" {
  242. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  243. field.ColumnName, "uint_value"))
  244. }
  245. if field.Type != "number" {
  246. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  247. field.FieldName, field.Type))
  248. }
  249. case "TagUint8Value":
  250. if field.ColumnName != "uint8_value" {
  251. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  252. field.ColumnName, "uint8_value"))
  253. }
  254. if field.Type != "number" {
  255. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  256. field.FieldName, field.Type))
  257. }
  258. case "TagUint16Value":
  259. if field.ColumnName != "uint16_value" {
  260. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  261. field.ColumnName, "uint16_value"))
  262. }
  263. if field.Type != "number" {
  264. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  265. field.FieldName, field.Type))
  266. }
  267. case "TagUint32Value":
  268. if field.ColumnName != "uint32_value" {
  269. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  270. field.ColumnName, "uint32_value"))
  271. }
  272. if field.Type != "number" {
  273. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  274. field.FieldName, field.Type))
  275. }
  276. case "TagUint64Value":
  277. if field.ColumnName != "uint64_value" {
  278. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  279. field.ColumnName, "uint64_value"))
  280. }
  281. if field.Type != "number" {
  282. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  283. field.FieldName, field.Type))
  284. }
  285. case "TagFloat32Value":
  286. if field.ColumnName != "float32_value" {
  287. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  288. field.ColumnName, "float32_value"))
  289. }
  290. if field.Type != "number" {
  291. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  292. field.FieldName, field.Type))
  293. }
  294. case "TagFloat64Value":
  295. if field.ColumnName != "float64_value" {
  296. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  297. field.ColumnName, "float64_value"))
  298. }
  299. if field.Type != "number" {
  300. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  301. field.FieldName, field.Type))
  302. }
  303. case "TagTimeValue":
  304. if field.ColumnName != "time_value" {
  305. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  306. field.ColumnName, "float64_value"))
  307. }
  308. if field.Type != "time" {
  309. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  310. field.FieldName, field.Type))
  311. }
  312. case "TagBoolValue":
  313. if field.ColumnName != "bool_value" {
  314. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  315. field.ColumnName, "float64_value"))
  316. }
  317. if field.Type != "bool" {
  318. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  319. field.FieldName, field.Type))
  320. }
  321. default:
  322. t.Fatalf("%+v\n", errors.Errorf("未知的字段名: tag fieldName: %v", field.FieldName))
  323. }
  324. }
  325. }
  326. type RuleTagPointerFieldsStruct struct {
  327. Ignore *string
  328. StringValue *string `rule:"column:string_value"`
  329. IntValue *int `rule:"column:int_value"`
  330. Int8Value *int8 `rule:"column:int8_value"`
  331. Int16Value *int16 `rule:"column:int16_value"`
  332. Int32Value *int32 `rule:"column:int32_value"`
  333. Int64Value *int64 `rule:"column:int64_value"`
  334. UintValue *uint `rule:"column:uint_value"`
  335. Uint8Value *uint8 `rule:"column:uint8_value"`
  336. Uint16Value *uint16 `rule:"column:uint16_value"`
  337. Uint32Value *uint32 `rule:"column:uint32_value"`
  338. Uint64Value *uint64 `rule:"column:uint64_value"`
  339. Float32Value *float32 `rule:"column:float32_value"`
  340. Float64Value *float64 `rule:"column:float64_value"`
  341. TimeValue *time.Time `rule:"column:time_value"`
  342. BoolValue *bool `rule:"column:bool_value"`
  343. TagStringValue *bool `rule:"column:string_value;type:string"`
  344. TagIntValue *string `rule:"column:int_value;type:number"`
  345. TagInt8Value *string `rule:"column:int8_value;type:number"`
  346. TagInt16Value *string `rule:"column:int16_value;type:number"`
  347. TagInt32Value *string `rule:"column:int32_value;type:number"`
  348. TagInt64Value *string `rule:"column:int64_value;type:number"`
  349. TagUintValue *string `rule:"column:uint_value;type:number"`
  350. TagUint8Value *string `rule:"column:uint8_value;type:number"`
  351. TagUint16Value *string `rule:"column:uint16_value;type:number"`
  352. TagUint32Value *string `rule:"column:uint32_value;type:number"`
  353. TagUint64Value *string `rule:"column:uint64_value;type:number"`
  354. TagFloat32Value *string `rule:"column:float32_value;type:number"`
  355. TagFloat64Value *string `rule:"column:float64_value;type:number"`
  356. TagTimeValue *string `rule:"column:time_value;type:time"`
  357. TagBoolValue *string `rule:"column:bool_value;type:bool"`
  358. }
  359. func (s RuleTagPointerFieldsStruct) checkFields(t *testing.T, fields []rule.Field) {
  360. if len(fields) != reflect.TypeOf(s).NumField()-1 {
  361. t.Fatalf("%+v\n", errors.Errorf("有字段没有被解析"))
  362. }
  363. for _, field := range fields {
  364. if field.FieldName == "Ignore" && field.Type != "" {
  365. t.Fatalf("%+v\n", errors.Errorf("忽略字段没有被忽略"))
  366. }
  367. switch field.FieldName {
  368. case "StringValue":
  369. if field.ColumnName != "string_value" {
  370. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  371. field.ColumnName, "string_value"))
  372. }
  373. if field.Type != "string" {
  374. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  375. field.FieldName, field.Type))
  376. }
  377. case "IntValue":
  378. if field.ColumnName != "int_value" {
  379. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  380. field.ColumnName, "int_value"))
  381. }
  382. if field.Type != "number" {
  383. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  384. field.FieldName, field.Type))
  385. }
  386. case "Int8Value":
  387. if field.ColumnName != "int8_value" {
  388. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  389. field.ColumnName, "int8_value"))
  390. }
  391. if field.Type != "number" {
  392. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  393. field.FieldName, field.Type))
  394. }
  395. case "Int16Value":
  396. if field.ColumnName != "int16_value" {
  397. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  398. field.ColumnName, "int16_value"))
  399. }
  400. if field.Type != "number" {
  401. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  402. field.FieldName, field.Type))
  403. }
  404. case "Int32Value":
  405. if field.ColumnName != "int32_value" {
  406. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  407. field.ColumnName, "int32_value"))
  408. }
  409. if field.Type != "number" {
  410. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  411. field.FieldName, field.Type))
  412. }
  413. case "Int64Value":
  414. if field.ColumnName != "int64_value" {
  415. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  416. field.ColumnName, "int64_value"))
  417. }
  418. if field.Type != "number" {
  419. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  420. field.FieldName, field.Type))
  421. }
  422. case "UintValue":
  423. if field.ColumnName != "uint_value" {
  424. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  425. field.ColumnName, "uint_value"))
  426. }
  427. if field.Type != "number" {
  428. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  429. field.FieldName, field.Type))
  430. }
  431. case "Uint8Value":
  432. if field.ColumnName != "uint8_value" {
  433. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  434. field.ColumnName, "uint8_value"))
  435. }
  436. if field.Type != "number" {
  437. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  438. field.FieldName, field.Type))
  439. }
  440. case "Uint16Value":
  441. if field.ColumnName != "uint16_value" {
  442. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  443. field.ColumnName, "uint16_value"))
  444. }
  445. if field.Type != "number" {
  446. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  447. field.FieldName, field.Type))
  448. }
  449. case "Uint32Value":
  450. if field.ColumnName != "uint32_value" {
  451. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  452. field.ColumnName, "uint32_value"))
  453. }
  454. if field.Type != "number" {
  455. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  456. field.FieldName, field.Type))
  457. }
  458. case "Uint64Value":
  459. if field.ColumnName != "uint64_value" {
  460. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  461. field.ColumnName, "uint64_value"))
  462. }
  463. if field.Type != "number" {
  464. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  465. field.FieldName, field.Type))
  466. }
  467. case "Float32Value":
  468. if field.ColumnName != "float32_value" {
  469. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  470. field.ColumnName, "float32_value"))
  471. }
  472. if field.Type != "number" {
  473. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  474. field.FieldName, field.Type))
  475. }
  476. case "Float64Value":
  477. if field.ColumnName != "float64_value" {
  478. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  479. field.ColumnName, "float64_value"))
  480. }
  481. if field.Type != "number" {
  482. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  483. field.FieldName, field.Type))
  484. }
  485. case "TimeValue":
  486. if field.ColumnName != "time_value" {
  487. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  488. field.ColumnName, "float64_value"))
  489. }
  490. if field.Type != "time" {
  491. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  492. field.FieldName, field.Type))
  493. }
  494. case "BoolValue":
  495. if field.ColumnName != "bool_value" {
  496. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  497. field.ColumnName, "float64_value"))
  498. }
  499. if field.Type != "bool" {
  500. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  501. field.FieldName, field.Type))
  502. }
  503. case "TagStringValue":
  504. if field.ColumnName != "string_value" {
  505. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  506. field.ColumnName, "string_value"))
  507. }
  508. if field.Type != "string" {
  509. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  510. field.FieldName, field.Type))
  511. }
  512. case "TagIntValue":
  513. if field.ColumnName != "int_value" {
  514. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  515. field.ColumnName, "int_value"))
  516. }
  517. if field.Type != "number" {
  518. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  519. field.FieldName, field.Type))
  520. }
  521. case "TagInt8Value":
  522. if field.ColumnName != "int8_value" {
  523. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  524. field.ColumnName, "int8_value"))
  525. }
  526. if field.Type != "number" {
  527. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  528. field.FieldName, field.Type))
  529. }
  530. case "TagInt16Value":
  531. if field.ColumnName != "int16_value" {
  532. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  533. field.ColumnName, "int16_value"))
  534. }
  535. if field.Type != "number" {
  536. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  537. field.FieldName, field.Type))
  538. }
  539. case "TagInt32Value":
  540. if field.ColumnName != "int32_value" {
  541. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  542. field.ColumnName, "int32_value"))
  543. }
  544. if field.Type != "number" {
  545. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  546. field.FieldName, field.Type))
  547. }
  548. case "TagInt64Value":
  549. if field.ColumnName != "int64_value" {
  550. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  551. field.ColumnName, "int64_value"))
  552. }
  553. if field.Type != "number" {
  554. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  555. field.FieldName, field.Type))
  556. }
  557. case "TagUintValue":
  558. if field.ColumnName != "uint_value" {
  559. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  560. field.ColumnName, "uint_value"))
  561. }
  562. if field.Type != "number" {
  563. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  564. field.FieldName, field.Type))
  565. }
  566. case "TagUint8Value":
  567. if field.ColumnName != "uint8_value" {
  568. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  569. field.ColumnName, "uint8_value"))
  570. }
  571. if field.Type != "number" {
  572. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  573. field.FieldName, field.Type))
  574. }
  575. case "TagUint16Value":
  576. if field.ColumnName != "uint16_value" {
  577. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  578. field.ColumnName, "uint16_value"))
  579. }
  580. if field.Type != "number" {
  581. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  582. field.FieldName, field.Type))
  583. }
  584. case "TagUint32Value":
  585. if field.ColumnName != "uint32_value" {
  586. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  587. field.ColumnName, "uint32_value"))
  588. }
  589. if field.Type != "number" {
  590. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  591. field.FieldName, field.Type))
  592. }
  593. case "TagUint64Value":
  594. if field.ColumnName != "uint64_value" {
  595. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  596. field.ColumnName, "uint64_value"))
  597. }
  598. if field.Type != "number" {
  599. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  600. field.FieldName, field.Type))
  601. }
  602. case "TagFloat32Value":
  603. if field.ColumnName != "float32_value" {
  604. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  605. field.ColumnName, "float32_value"))
  606. }
  607. if field.Type != "number" {
  608. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  609. field.FieldName, field.Type))
  610. }
  611. case "TagFloat64Value":
  612. if field.ColumnName != "float64_value" {
  613. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  614. field.ColumnName, "float64_value"))
  615. }
  616. if field.Type != "number" {
  617. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  618. field.FieldName, field.Type))
  619. }
  620. case "TagTimeValue":
  621. if field.ColumnName != "time_value" {
  622. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  623. field.ColumnName, "float64_value"))
  624. }
  625. if field.Type != "time" {
  626. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  627. field.FieldName, field.Type))
  628. }
  629. case "TagBoolValue":
  630. if field.ColumnName != "bool_value" {
  631. t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual column: %v",
  632. field.ColumnName, "float64_value"))
  633. }
  634. if field.Type != "bool" {
  635. t.Fatalf("%+v\n", errors.Errorf("类型解析测试错误: fieldName: %v, actual type: %v",
  636. field.FieldName, field.Type))
  637. }
  638. default:
  639. t.Fatalf("%+v\n", errors.Errorf("未知的字段名: tag fieldName: %v", field.FieldName))
  640. }
  641. }
  642. }
  643. func TestRuleTagDefaultUsage(t *testing.T) {
  644. s := RuleTagStruct{}
  645. sPointerFields := RuleTagPointerFieldsStruct{}
  646. sPointerFieldsNil := RuleTagPointerFieldsStruct{}
  647. fields, err := rule.DefaultUsage(s)
  648. if err != nil {
  649. t.Fatalf("%+v\n", err)
  650. }
  651. s.checkFields(t, fields)
  652. fields, err = rule.DefaultUsage(&s)
  653. if err != nil {
  654. t.Fatalf("%+v\n", err)
  655. }
  656. s.checkFields(t, fields)
  657. fields, err = rule.DefaultUsage(sPointerFields)
  658. if err != nil {
  659. t.Fatalf("%+v\n", err)
  660. }
  661. sPointerFields.checkFields(t, fields)
  662. fields, err = rule.DefaultUsage(&sPointerFields)
  663. if err != nil {
  664. t.Fatalf("%+v\n", err)
  665. }
  666. sPointerFields.checkFields(t, fields)
  667. fields, err = rule.DefaultUsage(sPointerFieldsNil)
  668. if err != nil {
  669. t.Fatalf("%+v\n", errors.Errorf("字段为nil"))
  670. }
  671. fields, err = rule.DefaultUsage(&sPointerFieldsNil)
  672. if err != nil {
  673. t.Fatalf("%+v\n", err)
  674. }
  675. sPointerFieldsNil.checkFields(t, fields)
  676. }