ut_en_test.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  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 TestDateTimeEn(t *testing.T) {
  20. en, err := ut.GetTranslator("en")
  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 := en.FmtDateFullSafe(datetime)
  26. Equal(t, err, nil)
  27. Equal(t, dt, "Monday, January 2, 2006")
  28. dt, err = en.FmtDateFullSafe(bc300DateTime)
  29. Equal(t, err, nil)
  30. Equal(t, dt, "Saturday, January 2, 300 Before Christ")
  31. dt = en.FmtDateFull(datetime)
  32. Equal(t, dt, "Monday, January 2, 2006")
  33. dt = en.FmtDateFull(bc300DateTime)
  34. Equal(t, dt, "Saturday, January 2, 300 Before Christ")
  35. dt, err = en.FmtDateLongSafe(datetime)
  36. Equal(t, err, nil)
  37. Equal(t, dt, "January 2, 2006")
  38. dt, err = en.FmtDateLongSafe(bc300DateTime)
  39. Equal(t, err, nil)
  40. Equal(t, dt, "January 2, 300 BC")
  41. dt = en.FmtDateLong(datetime)
  42. Equal(t, dt, "January 2, 2006")
  43. dt = en.FmtDateLong(bc300DateTime)
  44. Equal(t, dt, "January 2, 300 BC")
  45. dt, err = en.FmtDateMediumSafe(datetime)
  46. Equal(t, err, nil)
  47. Equal(t, dt, "Jan 2, 2006")
  48. dt = en.FmtDateMedium(datetime)
  49. Equal(t, dt, "Jan 2, 2006")
  50. dt, err = en.FmtDateShortSafe(datetime)
  51. Equal(t, err, nil)
  52. Equal(t, dt, "1/2/06")
  53. dt = en.FmtDateShort(datetime)
  54. Equal(t, dt, "1/2/06")
  55. dt, err = en.FmtTimeFullSafe(datetime)
  56. Equal(t, err, nil)
  57. Equal(t, dt, "3:04:05 PM")
  58. dt = en.FmtTimeFull(datetime)
  59. Equal(t, dt, "3:04:05 PM")
  60. dt, err = en.FmtTimeLongSafe(datetime)
  61. Equal(t, err, nil)
  62. Equal(t, dt, "3:04:05 PM")
  63. dt = en.FmtTimeLong(datetime)
  64. Equal(t, dt, "3:04:05 PM")
  65. dt, err = en.FmtTimeMediumSafe(datetime)
  66. Equal(t, err, nil)
  67. Equal(t, dt, "3:04:05 PM")
  68. dt = en.FmtTimeMedium(datetime)
  69. Equal(t, dt, "3:04:05 PM")
  70. dt, err = en.FmtTimeShortSafe(datetime)
  71. Equal(t, err, nil)
  72. Equal(t, dt, "3:04 PM")
  73. dt = en.FmtTimeShort(datetime)
  74. Equal(t, dt, "3:04 PM")
  75. dt, err = en.FmtDateTimeFullSafe(datetime)
  76. Equal(t, err, nil)
  77. Equal(t, dt, "Monday, January 2, 2006 at 3:04:05 PM")
  78. dt, err = en.FmtDateTimeFullSafe(bc300DateTime)
  79. Equal(t, err, nil)
  80. Equal(t, dt, "Saturday, January 2, 300 Before Christ at 3:04:05 AM")
  81. dt = en.FmtDateTimeFull(datetime)
  82. Equal(t, dt, "Monday, January 2, 2006 at 3:04:05 PM")
  83. dt = en.FmtDateTimeFull(bc300DateTime)
  84. Equal(t, dt, "Saturday, January 2, 300 Before Christ at 3:04:05 AM")
  85. dt, err = en.FmtDateTimeLongSafe(datetime)
  86. Equal(t, err, nil)
  87. Equal(t, dt, "January 2, 2006 at 3:04:05 PM")
  88. dt, err = en.FmtDateTimeLongSafe(bc300DateTime)
  89. Equal(t, err, nil)
  90. Equal(t, dt, "January 2, 300 BC at 3:04:05 AM")
  91. dt = en.FmtDateTimeLong(datetime)
  92. Equal(t, dt, "January 2, 2006 at 3:04:05 PM")
  93. dt = en.FmtDateTimeLong(bc300DateTime)
  94. Equal(t, dt, "January 2, 300 BC at 3:04:05 AM")
  95. dt, err = en.FmtDateTimeMediumSafe(datetime)
  96. Equal(t, err, nil)
  97. Equal(t, dt, "Jan 2, 2006, 3:04:05 PM")
  98. dt = en.FmtDateTimeMedium(datetime)
  99. Equal(t, dt, "Jan 2, 2006, 3:04:05 PM")
  100. dt, err = en.FmtDateTimeShortSafe(datetime)
  101. Equal(t, err, nil)
  102. Equal(t, dt, "1/2/06, 3:04 PM")
  103. dt = en.FmtDateTimeShort(datetime)
  104. Equal(t, dt, "1/2/06, 3:04 PM")
  105. dt, err = en.FmtDateTimeSafe(datetime, "MMMM d yy")
  106. Equal(t, err, nil)
  107. Equal(t, dt, "January 2 06")
  108. dt = en.FmtDateTime(datetime, "MMMM d yy")
  109. Equal(t, err, nil)
  110. Equal(t, dt, "January 2 06")
  111. dt, err = en.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 TestCurrencyEn(t *testing.T) {
  117. en, err := ut.GetTranslator("en")
  118. Equal(t, err, nil)
  119. result, err := en.FmtCurrencySafe(ut.CurrencyStandard, "USD", 12345.6789)
  120. Equal(t, err, nil)
  121. Equal(t, result, "$12,345.68")
  122. result = en.FmtCurrency(ut.CurrencyStandard, "USD", 12345.6789)
  123. Equal(t, result, "$12,345.68")
  124. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "USD", 12345.6789)
  125. Equal(t, err, nil)
  126. Equal(t, result, "$12,345.68")
  127. result = en.FmtCurrency(ut.CurrencyAccounting, "USD", 12345.6789)
  128. Equal(t, result, "$12,345.68")
  129. result, err = en.FmtCurrencySafe(ut.CurrencyStandard, "USD", -12345.6789)
  130. Equal(t, err, nil)
  131. Equal(t, result, "-$12,345.68")
  132. result = en.FmtCurrency(ut.CurrencyStandard, "USD", -12345.6789)
  133. Equal(t, result, "-$12,345.68")
  134. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "USD", -12345.6789)
  135. Equal(t, err, nil)
  136. Equal(t, result, "($12,345.68)")
  137. result = en.FmtCurrency(ut.CurrencyAccounting, "USD", -12345.6789)
  138. Equal(t, result, "($12,345.68)")
  139. result, err = en.FmtCurrencySafe(ut.CurrencyStandard, "WHAT???", 12345.6789)
  140. NotEqual(t, err, nil)
  141. Equal(t, err.Error(), "**** WARNING **** unknown currency: WHAT???")
  142. result = en.FmtCurrency(ut.CurrencyStandard, "WHAT???", 12345.6789)
  143. Equal(t, result, "WHAT???12,345.68")
  144. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "WHAT???", 12345.6789)
  145. NotEqual(t, err, nil)
  146. Equal(t, err.Error(), "**** WARNING **** unknown currency: WHAT???")
  147. result = en.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 = en.FmtCurrencySafe(ut.CurrencyStandard, "USD", 12345000000000.6789)
  152. Equal(t, err, nil)
  153. Equal(t, result, "$12,345,000,000,000.68")
  154. result = en.FmtCurrency(ut.CurrencyStandard, "USD", 12345000000000.6789)
  155. Equal(t, result, "$12,345,000,000,000.68")
  156. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "USD", 12345000000000.6789)
  157. Equal(t, err, nil)
  158. Equal(t, result, "$12,345,000,000,000.68")
  159. result = en.FmtCurrency(ut.CurrencyAccounting, "USD", 12345000000000.6789)
  160. Equal(t, result, "$12,345,000,000,000.68")
  161. result, err = en.FmtCurrencySafe(ut.CurrencyStandard, "USD", -12345000000000.6789)
  162. Equal(t, err, nil)
  163. Equal(t, result, "-$12,345,000,000,000.68")
  164. result = en.FmtCurrency(ut.CurrencyStandard, "USD", -12345000000000.6789)
  165. Equal(t, result, "-$12,345,000,000,000.68")
  166. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "USD", -12345000000000.6789)
  167. Equal(t, err, nil)
  168. Equal(t, result, "($12,345,000,000,000.68)")
  169. result = en.FmtCurrency(ut.CurrencyAccounting, "USD", -12345000000000.6789)
  170. Equal(t, result, "($12,345,000,000,000.68)")
  171. saq, err := ut.GetTranslator("saq")
  172. Equal(t, err, nil)
  173. // no Formatting or symbols for "saq" in locales
  174. result, err = saq.FmtCurrencySafe(ut.CurrencyStandard, "USD", 12345.6789)
  175. Equal(t, err, nil)
  176. Equal(t, result, "1234568")
  177. result = saq.FmtCurrency(ut.CurrencyStandard, "USD", 12345.6789)
  178. Equal(t, result, "1234568")
  179. result, err = saq.FmtCurrencySafe(ut.CurrencyAccounting, "USD", 12345.6789)
  180. Equal(t, err, nil)
  181. Equal(t, result, "1234568")
  182. result = saq.FmtCurrency(ut.CurrencyAccounting, "USD", 12345.6789)
  183. Equal(t, result, "1234568")
  184. ar, err := ut.GetTranslator("ar")
  185. Equal(t, err, nil)
  186. result, err = ar.FmtCurrencySafe(ut.CurrencyStandard, "USD", -12345.6789)
  187. Equal(t, err, nil)
  188. Equal(t, result, "\u200F-US$\u00A012٬345٫68")
  189. result = ar.FmtCurrency(ut.CurrencyStandard, "USD", -12345.6789)
  190. Equal(t, result, "\u200F-US$\u00A012٬345٫68")
  191. result, err = ar.FmtCurrencySafe(ut.CurrencyAccounting, "USD", -12345.6789)
  192. Equal(t, err, nil)
  193. Equal(t, result, "\u200F-US$\u00A012٬345٫68")
  194. result = ar.FmtCurrency(ut.CurrencyAccounting, "USD", -12345.6789)
  195. Equal(t, result, "\u200F-US$\u00A012٬345٫68")
  196. // And one more for with some unusual symbols for good measure
  197. result, err = en.FmtCurrencySafe(ut.CurrencyStandard, "USD", 0.0084)
  198. Equal(t, err, nil)
  199. Equal(t, result, "$0.01")
  200. result = en.FmtCurrency(ut.CurrencyStandard, "USD", 0.0084)
  201. Equal(t, result, "$0.01")
  202. }
  203. func TestCurrencyWholeEn(t *testing.T) {
  204. en, err := ut.GetTranslator("en")
  205. Equal(t, err, nil)
  206. result, err := en.FmtCurrencyWholeSafe(ut.CurrencyStandard, "USD", 12345.6789)
  207. Equal(t, err, nil)
  208. Equal(t, result, "$12,346")
  209. result = en.FmtCurrencyWhole(ut.CurrencyStandard, "USD", 12345.6789)
  210. Equal(t, result, "$12,346")
  211. result, err = en.FmtCurrencyWholeSafe(ut.CurrencyAccounting, "USD", 12345.6789)
  212. Equal(t, err, nil)
  213. Equal(t, result, "$12,346")
  214. result = en.FmtCurrencyWhole(ut.CurrencyAccounting, "USD", 12345.6789)
  215. Equal(t, result, "$12,346")
  216. result, err = en.FmtCurrencyWholeSafe(ut.CurrencyStandard, "USD", -12345.6789)
  217. Equal(t, err, nil)
  218. Equal(t, result, "-$12,346")
  219. result = en.FmtCurrencyWhole(ut.CurrencyStandard, "USD", -12345.6789)
  220. Equal(t, result, "-$12,346")
  221. result, err = en.FmtCurrencyWholeSafe(ut.CurrencyAccounting, "USD", -12345.6789)
  222. Equal(t, err, nil)
  223. Equal(t, result, "($12,346)")
  224. result = en.FmtCurrencyWhole(ut.CurrencyAccounting, "USD", -12345.6789)
  225. Equal(t, result, "($12,346)")
  226. result, err = en.FmtCurrencyWholeSafe(ut.CurrencyStandard, "WHAT???", 12345.6789)
  227. NotEqual(t, err, nil)
  228. Equal(t, result, "WHAT???12,346")
  229. result = en.FmtCurrencyWhole(ut.CurrencyStandard, "WHAT???", 12345.6789)
  230. Equal(t, result, "WHAT???12,346")
  231. // try some really big numbers to make sure weird floaty stuff doesn't
  232. // happen
  233. result, err = en.FmtCurrencyWholeSafe(ut.CurrencyStandard, "USD", 12345000000000.6789)
  234. Equal(t, err, nil)
  235. Equal(t, result, "$12,345,000,000,001")
  236. result, err = en.FmtCurrencyWholeSafe(ut.CurrencyAccounting, "USD", 12345000000000.6789)
  237. Equal(t, err, nil)
  238. Equal(t, result, "$12,345,000,000,001")
  239. result, err = en.FmtCurrencyWholeSafe(ut.CurrencyStandard, "USD", -12345000000000.6789)
  240. Equal(t, err, nil)
  241. Equal(t, result, "-$12,345,000,000,001")
  242. result = en.FmtCurrencyWhole(ut.CurrencyStandard, "USD", -12345000000000.6789)
  243. Equal(t, result, "-$12,345,000,000,001")
  244. result, err = en.FmtCurrencyWholeSafe(ut.CurrencyAccounting, "USD", -12345000000000.6789)
  245. Equal(t, err, nil)
  246. Equal(t, result, "($12,345,000,000,001)")
  247. result = en.FmtCurrencyWhole(ut.CurrencyAccounting, "USD", -12345000000000.6789)
  248. Equal(t, result, "($12,345,000,000,001)")
  249. }
  250. func TestNumberEn(t *testing.T) {
  251. en, err := ut.GetTranslator("en")
  252. Equal(t, err, nil)
  253. // check basic english
  254. result := en.FmtNumber(12345.6789)
  255. Equal(t, result, "12,345.679")
  256. result = en.FmtNumber(-12345.6789)
  257. Equal(t, result, "-12,345.679")
  258. result = en.FmtNumber(123456789)
  259. Equal(t, result, "123,456,789")
  260. hi, err := ut.GetTranslator("hi")
  261. Equal(t, err, nil)
  262. // check Hindi - different group sizes
  263. result = hi.FmtNumber(12345.6789)
  264. Equal(t, result, "12,345.679")
  265. result = hi.FmtNumber(-12345.6789)
  266. Equal(t, result, "-12,345.679")
  267. result = hi.FmtNumber(123456789)
  268. Equal(t, result, "12,34,56,789")
  269. uz, err := ut.GetTranslator("uz")
  270. Equal(t, err, nil)
  271. // check Uzbek - something with a partial fallback
  272. result = uz.FmtNumber(12345.6789)
  273. Equal(t, result, "12٬345٫679")
  274. result = uz.FmtNumber(-12345.6789)
  275. Equal(t, result, "-12٬345٫679")
  276. result = uz.FmtNumber(123456789)
  277. Equal(t, result, "123٬456٬789")
  278. }
  279. func TestNumberWholeEn(t *testing.T) {
  280. en, err := ut.GetTranslator("en")
  281. Equal(t, err, nil)
  282. result := en.FmtNumberWhole(12345.6789)
  283. Equal(t, result, "12,346")
  284. result = en.FmtNumberWhole(-12345.6789)
  285. Equal(t, result, "-12,346")
  286. }
  287. func TestPercentEn(t *testing.T) {
  288. en, err := ut.GetTranslator("en")
  289. Equal(t, err, nil)
  290. result := en.FmtPercent(0.01234)
  291. Equal(t, result, "1%")
  292. result = en.FmtPercent(0.1234)
  293. Equal(t, result, "12%")
  294. result = en.FmtPercent(1.234)
  295. Equal(t, result, "123%")
  296. result = en.FmtPercent(12.34)
  297. Equal(t, result, "1,234%")
  298. }