ut_th_test.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. package ut_test
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/go-playground/universal-translator"
  6. _ "github.com/go-playground/universal-translator/resources/locales"
  7. . "gopkg.in/go-playground/assert.v1"
  8. )
  9. // NOTES:
  10. // - Run "go test" to run tests
  11. // - Run "gocov test | gocov report" to report on test converage by file
  12. // - Run "gocov test | gocov annotate -" to report on all code and functions, those ,marked with "MISS" were never called
  13. //
  14. // or
  15. //
  16. // -- may be a good idea to change to output path to somewherelike /tmp
  17. // go test -coverprofile cover.out && go tool cover -html=cover.out -o cover.html
  18. //
  19. func TestDateTimeTh(t *testing.T) {
  20. th, err := ut.GetTranslator("th")
  21. Equal(t, err, nil)
  22. datetime, err := time.Parse(dateTimeString, dateTimeString)
  23. Equal(t, err, nil)
  24. // test the public method
  25. dt, err := th.FmtDateFullSafe(datetime)
  26. Equal(t, err, nil)
  27. Equal(t, dt, "วันจันทร์ที่ 2 มกราคม คริสต์ศักราช 2006")
  28. dt, err = th.FmtDateFullSafe(bc300DateTime)
  29. Equal(t, err, nil)
  30. Equal(t, dt, "วันเสาร์ที่ 2 มกราคม 300 ปีก่อนคริสต์ศักราช")
  31. dt = th.FmtDateFull(datetime)
  32. Equal(t, dt, "วันจันทร์ที่ 2 มกราคม คริสต์ศักราช 2006")
  33. dt = th.FmtDateFull(bc300DateTime)
  34. Equal(t, dt, "วันเสาร์ที่ 2 มกราคม 300 ปีก่อนคริสต์ศักราช")
  35. dt, err = th.FmtDateLongSafe(datetime)
  36. Equal(t, err, nil)
  37. Equal(t, dt, "2 มกราคม ค.ศ. 2006")
  38. dt, err = th.FmtDateLongSafe(bc300DateTime)
  39. Equal(t, err, nil)
  40. Equal(t, dt, "2 มกราคม 300 ปีก่อน ค.ศ.")
  41. dt = th.FmtDateLong(datetime)
  42. Equal(t, dt, "2 มกราคม ค.ศ. 2006")
  43. dt = th.FmtDateLong(bc300DateTime)
  44. Equal(t, dt, "2 มกราคม 300 ปีก่อน ค.ศ.")
  45. dt, err = th.FmtDateMediumSafe(datetime)
  46. Equal(t, err, nil)
  47. Equal(t, dt, "2 ม.ค. 2006")
  48. dt = th.FmtDateMedium(datetime)
  49. Equal(t, dt, "2 ม.ค. 2006")
  50. dt, err = th.FmtDateShortSafe(datetime)
  51. Equal(t, err, nil)
  52. Equal(t, dt, "2/1/06")
  53. dt = th.FmtDateShort(datetime)
  54. Equal(t, dt, "2/1/06")
  55. dt, err = th.FmtTimeFullSafe(datetime)
  56. Equal(t, err, nil)
  57. Equal(t, dt, "15 นาฬิกา 04 นาที 05 วินาที")
  58. dt = th.FmtTimeFull(datetime)
  59. Equal(t, dt, "15 นาฬิกา 04 นาที 05 วินาที")
  60. dt, err = th.FmtTimeLongSafe(datetime)
  61. Equal(t, err, nil)
  62. Equal(t, dt, "15 นาฬิกา 04 นาที 05 วินาที")
  63. dt = th.FmtTimeLong(datetime)
  64. Equal(t, dt, "15 นาฬิกา 04 นาที 05 วินาที")
  65. dt, err = th.FmtTimeMediumSafe(datetime)
  66. Equal(t, err, nil)
  67. Equal(t, dt, "15:04:05")
  68. dt = th.FmtTimeMedium(datetime)
  69. Equal(t, dt, "15:04:05")
  70. dt, err = th.FmtTimeShortSafe(datetime)
  71. Equal(t, err, nil)
  72. Equal(t, dt, "15:04")
  73. dt = th.FmtTimeShort(datetime)
  74. Equal(t, dt, "15:04")
  75. dt, err = th.FmtDateTimeFullSafe(datetime)
  76. Equal(t, err, nil)
  77. Equal(t, dt, "วันจันทร์ที่ 2 มกราคม คริสต์ศักราช 2006 15 นาฬิกา 04 นาที 05 วินาที")
  78. dt, err = th.FmtDateTimeFullSafe(bc300DateTime)
  79. Equal(t, err, nil)
  80. Equal(t, dt, "วันเสาร์ที่ 2 มกราคม 300 ปีก่อนคริสต์ศักราช 3 นาฬิกา 04 นาที 05 วินาที")
  81. dt = th.FmtDateTimeFull(datetime)
  82. Equal(t, dt, "วันจันทร์ที่ 2 มกราคม คริสต์ศักราช 2006 15 นาฬิกา 04 นาที 05 วินาที")
  83. dt = th.FmtDateTimeFull(bc300DateTime)
  84. Equal(t, dt, "วันเสาร์ที่ 2 มกราคม 300 ปีก่อนคริสต์ศักราช 3 นาฬิกา 04 นาที 05 วินาที")
  85. dt, err = th.FmtDateTimeLongSafe(datetime)
  86. Equal(t, err, nil)
  87. Equal(t, dt, "2 มกราคม ค.ศ. 2006 15 นาฬิกา 04 นาที 05 วินาที")
  88. dt, err = th.FmtDateTimeLongSafe(bc300DateTime)
  89. Equal(t, err, nil)
  90. Equal(t, dt, "2 มกราคม 300 ปีก่อน ค.ศ. 3 นาฬิกา 04 นาที 05 วินาที")
  91. dt = th.FmtDateTimeLong(datetime)
  92. Equal(t, dt, "2 มกราคม ค.ศ. 2006 15 นาฬิกา 04 นาที 05 วินาที")
  93. dt = th.FmtDateTimeLong(bc300DateTime)
  94. Equal(t, dt, "2 มกราคม 300 ปีก่อน ค.ศ. 3 นาฬิกา 04 นาที 05 วินาที")
  95. dt, err = th.FmtDateTimeMediumSafe(datetime)
  96. Equal(t, err, nil)
  97. Equal(t, dt, "2 ม.ค. 2006 15:04:05")
  98. dt = th.FmtDateTimeMedium(datetime)
  99. Equal(t, dt, "2 ม.ค. 2006 15:04:05")
  100. dt, err = th.FmtDateTimeShortSafe(datetime)
  101. Equal(t, err, nil)
  102. Equal(t, dt, "2/1/06 15:04")
  103. dt = th.FmtDateTimeShort(datetime)
  104. Equal(t, dt, "2/1/06 15:04")
  105. dt, err = th.FmtDateTimeSafe(datetime, "MMMM d yy")
  106. Equal(t, err, nil)
  107. Equal(t, dt, "มกราคม 2 06")
  108. dt = th.FmtDateTime(datetime, "MMMM d yy")
  109. Equal(t, err, nil)
  110. Equal(t, dt, "มกราคม 2 06")
  111. dt, err = th.FmtDateTimeSafe(datetime, "not a date pattern")
  112. NotEqual(t, err, nil)
  113. Equal(t, dt, "")
  114. Equal(t, err.Error(), "unknown datetime format unit: n")
  115. }
  116. func TestCurrencyTh(t *testing.T) {
  117. th, err := ut.GetTranslator("th")
  118. Equal(t, err, nil)
  119. result, err := th.FmtCurrencySafe(ut.CurrencyStandard, "THB", 12345.6789)
  120. Equal(t, err, nil)
  121. Equal(t, result, "THB12,345.68")
  122. result = th.FmtCurrency(ut.CurrencyStandard, "THB", 12345.6789)
  123. Equal(t, result, "THB12,345.68")
  124. result, err = th.FmtCurrencySafe(ut.CurrencyAccounting, "THB", 12345.6789)
  125. Equal(t, err, nil)
  126. Equal(t, result, "THB12,345.68")
  127. result = th.FmtCurrency(ut.CurrencyAccounting, "THB", 12345.6789)
  128. Equal(t, result, "THB12,345.68")
  129. result, err = th.FmtCurrencySafe(ut.CurrencyStandard, "THB", -12345.6789)
  130. Equal(t, err, nil)
  131. Equal(t, result, "-THB12,345.68")
  132. result = th.FmtCurrency(ut.CurrencyStandard, "THB", -12345.6789)
  133. Equal(t, result, "-THB12,345.68")
  134. result, err = th.FmtCurrencySafe(ut.CurrencyAccounting, "THB", -12345.6789)
  135. Equal(t, err, nil)
  136. Equal(t, result, "(THB12,345.68)")
  137. result = th.FmtCurrency(ut.CurrencyAccounting, "THB", -12345.6789)
  138. Equal(t, result, "(THB12,345.68)")
  139. result, err = th.FmtCurrencySafe(ut.CurrencyStandard, "WHAT???", 12345.6789)
  140. NotEqual(t, err, nil)
  141. Equal(t, err.Error(), "**** WARNING **** unknown currency: WHAT???")
  142. result = th.FmtCurrency(ut.CurrencyStandard, "WHAT???", 12345.6789)
  143. Equal(t, result, "WHAT???12,345.68")
  144. result, err = th.FmtCurrencySafe(ut.CurrencyAccounting, "WHAT???", 12345.6789)
  145. NotEqual(t, err, nil)
  146. Equal(t, err.Error(), "**** WARNING **** unknown currency: WHAT???")
  147. result = th.FmtCurrency(ut.CurrencyAccounting, "WHAT???", 12345.6789)
  148. Equal(t, result, "WHAT???12,345.68")
  149. // try some really big numbers to make sure weird floaty stuff doesn't
  150. // happen
  151. result, err = th.FmtCurrencySafe(ut.CurrencyStandard, "THB", 12345000000000.6789)
  152. Equal(t, err, nil)
  153. Equal(t, result, "THB12,345,000,000,000.68")
  154. result = th.FmtCurrency(ut.CurrencyStandard, "THB", 12345000000000.6789)
  155. Equal(t, result, "THB12,345,000,000,000.68")
  156. result, err = th.FmtCurrencySafe(ut.CurrencyAccounting, "THB", 12345000000000.6789)
  157. Equal(t, err, nil)
  158. Equal(t, result, "THB12,345,000,000,000.68")
  159. result = th.FmtCurrency(ut.CurrencyAccounting, "THB", 12345000000000.6789)
  160. Equal(t, result, "THB12,345,000,000,000.68")
  161. result, err = th.FmtCurrencySafe(ut.CurrencyStandard, "THB", -12345000000000.6789)
  162. Equal(t, err, nil)
  163. Equal(t, result, "-THB12,345,000,000,000.68")
  164. result = th.FmtCurrency(ut.CurrencyStandard, "THB", -12345000000000.6789)
  165. Equal(t, result, "-THB12,345,000,000,000.68")
  166. result, err = th.FmtCurrencySafe(ut.CurrencyAccounting, "THB", -12345000000000.6789)
  167. Equal(t, err, nil)
  168. Equal(t, result, "(THB12,345,000,000,000.68)")
  169. result = th.FmtCurrency(ut.CurrencyAccounting, "THB", -12345000000000.6789)
  170. Equal(t, result, "(THB12,345,000,000,000.68)")
  171. en, err := ut.GetTranslator("en")
  172. Equal(t, err, nil)
  173. result, err = en.FmtCurrencySafe(ut.CurrencyStandard, "THB", 12345.6789)
  174. Equal(t, err, nil)
  175. Equal(t, result, "12,345.68")
  176. result = en.FmtCurrency(ut.CurrencyStandard, "THB", 12345.6789)
  177. Equal(t, result, "12,345.68")
  178. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "THB", 12345.6789)
  179. Equal(t, err, nil)
  180. Equal(t, result, "12,345.68")
  181. result = en.FmtCurrency(ut.CurrencyAccounting, "THB", 12345.6789)
  182. Equal(t, result, "12,345.68")
  183. ar, err := ut.GetTranslator("ar")
  184. Equal(t, err, nil)
  185. result, err = ar.FmtCurrencySafe(ut.CurrencyStandard, "THB", -12345.6789)
  186. Equal(t, err, nil)
  187. Equal(t, result, "\u200F-฿\u00A012٬345٫68")
  188. result = ar.FmtCurrency(ut.CurrencyStandard, "THB", -12345.6789)
  189. Equal(t, result, "\u200F-฿\u00A012٬345٫68")
  190. result, err = ar.FmtCurrencySafe(ut.CurrencyAccounting, "THB", -12345.6789)
  191. Equal(t, err, nil)
  192. Equal(t, result, "\u200F-฿\u00A012٬345٫68")
  193. result = ar.FmtCurrency(ut.CurrencyAccounting, "THB", -12345.6789)
  194. Equal(t, result, "\u200F-฿\u00A012٬345٫68")
  195. // And one more for with some unusual symbols for good measure
  196. result, err = th.FmtCurrencySafe(ut.CurrencyStandard, "THB", 0.0084)
  197. Equal(t, err, nil)
  198. Equal(t, result, "THB0.01")
  199. result = th.FmtCurrency(ut.CurrencyStandard, "THB", 0.0084)
  200. Equal(t, result, "THB0.01")
  201. }
  202. func TestCurrencyWholeTh(t *testing.T) {
  203. th, err := ut.GetTranslator("th")
  204. Equal(t, err, nil)
  205. result, err := th.FmtCurrencyWholeSafe(ut.CurrencyStandard, "THB", 12345.6789)
  206. Equal(t, err, nil)
  207. Equal(t, result, "THB12,346")
  208. result = th.FmtCurrencyWhole(ut.CurrencyStandard, "THB", 12345.6789)
  209. Equal(t, result, "THB12,346")
  210. result, err = th.FmtCurrencyWholeSafe(ut.CurrencyAccounting, "THB", 12345.6789)
  211. Equal(t, err, nil)
  212. Equal(t, result, "THB12,346")
  213. result = th.FmtCurrencyWhole(ut.CurrencyAccounting, "THB", 12345.6789)
  214. Equal(t, result, "THB12,346")
  215. result, err = th.FmtCurrencyWholeSafe(ut.CurrencyStandard, "THB", -12345.6789)
  216. Equal(t, err, nil)
  217. Equal(t, result, "-THB12,346")
  218. result = th.FmtCurrencyWhole(ut.CurrencyStandard, "THB", -12345.6789)
  219. Equal(t, result, "-THB12,346")
  220. result, err = th.FmtCurrencyWholeSafe(ut.CurrencyAccounting, "THB", -12345.6789)
  221. Equal(t, err, nil)
  222. Equal(t, result, "(THB12,346)")
  223. result = th.FmtCurrencyWhole(ut.CurrencyAccounting, "THB", -12345.6789)
  224. Equal(t, result, "(THB12,346)")
  225. result, err = th.FmtCurrencyWholeSafe(ut.CurrencyStandard, "WHAT???", 12345.6789)
  226. NotEqual(t, err, nil)
  227. Equal(t, result, "WHAT???12,346")
  228. result = th.FmtCurrencyWhole(ut.CurrencyStandard, "WHAT???", 12345.6789)
  229. Equal(t, result, "WHAT???12,346")
  230. // try some really big numbers to make sure weird floaty stuff doesn't
  231. // happen
  232. result, err = th.FmtCurrencyWholeSafe(ut.CurrencyStandard, "THB", 12345000000000.6789)
  233. Equal(t, err, nil)
  234. Equal(t, result, "THB12,345,000,000,001")
  235. result, err = th.FmtCurrencyWholeSafe(ut.CurrencyAccounting, "THB", 12345000000000.6789)
  236. Equal(t, err, nil)
  237. Equal(t, result, "THB12,345,000,000,001")
  238. result, err = th.FmtCurrencyWholeSafe(ut.CurrencyStandard, "THB", -12345000000000.6789)
  239. Equal(t, err, nil)
  240. Equal(t, result, "-THB12,345,000,000,001")
  241. result = th.FmtCurrencyWhole(ut.CurrencyStandard, "THB", -12345000000000.6789)
  242. Equal(t, result, "-THB12,345,000,000,001")
  243. result, err = th.FmtCurrencyWholeSafe(ut.CurrencyAccounting, "THB", -12345000000000.6789)
  244. Equal(t, err, nil)
  245. Equal(t, result, "(THB12,345,000,000,001)")
  246. result = th.FmtCurrencyWhole(ut.CurrencyAccounting, "THB", -12345000000000.6789)
  247. Equal(t, result, "(THB12,345,000,000,001)")
  248. }
  249. func TestNumberTh(t *testing.T) {
  250. th, err := ut.GetTranslator("th")
  251. Equal(t, err, nil)
  252. // check basic english
  253. result := th.FmtNumber(12345.6789)
  254. Equal(t, result, "12,345.679")
  255. result = th.FmtNumber(-12345.6789)
  256. Equal(t, result, "-12,345.679")
  257. result = th.FmtNumber(123456789)
  258. Equal(t, result, "123,456,789")
  259. hi, err := ut.GetTranslator("hi")
  260. Equal(t, err, nil)
  261. // check Hindi - different group sizes
  262. result = hi.FmtNumber(12345.6789)
  263. Equal(t, result, "12,345.679")
  264. result = hi.FmtNumber(-12345.6789)
  265. Equal(t, result, "-12,345.679")
  266. result = hi.FmtNumber(123456789)
  267. Equal(t, result, "12,34,56,789")
  268. uz, err := ut.GetTranslator("uz")
  269. Equal(t, err, nil)
  270. // check Uzbek - something with a partial fallback
  271. result = uz.FmtNumber(12345.6789)
  272. Equal(t, result, "12٬345٫679")
  273. result = uz.FmtNumber(-12345.6789)
  274. Equal(t, result, "-12٬345٫679")
  275. result = uz.FmtNumber(123456789)
  276. Equal(t, result, "123٬456٬789")
  277. }
  278. func TestNumberWholeTh(t *testing.T) {
  279. th, err := ut.GetTranslator("th")
  280. Equal(t, err, nil)
  281. result := th.FmtNumberWhole(12345.6789)
  282. Equal(t, result, "12,346")
  283. result = th.FmtNumberWhole(-12345.6789)
  284. Equal(t, result, "-12,346")
  285. }
  286. func TestPercentTh(t *testing.T) {
  287. th, err := ut.GetTranslator("th")
  288. Equal(t, err, nil)
  289. result := th.FmtPercent(0.01234)
  290. Equal(t, result, "1%")
  291. result = th.FmtPercent(0.1234)
  292. Equal(t, result, "12%")
  293. result = th.FmtPercent(1.234)
  294. Equal(t, result, "123%")
  295. result = th.FmtPercent(12.34)
  296. Equal(t, result, "1,234%")
  297. }