number_test.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package ut_test
  2. import (
  3. "testing"
  4. "github.com/go-playground/universal-translator"
  5. _ "github.com/go-playground/universal-translator/resources/locales"
  6. . "gopkg.in/go-playground/assert.v1"
  7. )
  8. // NOTES:
  9. // - Run "go test" to run tests
  10. // - Run "gocov test | gocov report" to report on test converage by file
  11. // - Run "gocov test | gocov annotate -" to report on all code and functions, those ,marked with "MISS" were never called
  12. //
  13. // or
  14. //
  15. // -- may be a good idea to change to output path to somewherelike /tmp
  16. // go test -coverprofile cover.out && go tool cover -html=cover.out -o cover.html
  17. //
  18. func TestCurrency(t *testing.T) {
  19. en, err := ut.GetTranslator("en")
  20. Equal(t, err, nil)
  21. result, err := en.FmtCurrencySafe(ut.CurrencyStandard, "USD", 12345.6789)
  22. Equal(t, err, nil)
  23. Equal(t, result, "$12,345.68")
  24. result = en.FmtCurrency(ut.CurrencyStandard, "USD", 12345.6789)
  25. Equal(t, result, "$12,345.68")
  26. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "USD", 12345.6789)
  27. Equal(t, err, nil)
  28. Equal(t, result, "$12,345.68")
  29. result = en.FmtCurrency(ut.CurrencyAccounting, "USD", 12345.6789)
  30. Equal(t, result, "$12,345.68")
  31. result, err = en.FmtCurrencySafe(ut.CurrencyStandard, "USD", -12345.6789)
  32. Equal(t, err, nil)
  33. Equal(t, result, "-$12,345.68")
  34. result = en.FmtCurrency(ut.CurrencyStandard, "USD", -12345.6789)
  35. Equal(t, result, "-$12,345.68")
  36. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "USD", -12345.6789)
  37. Equal(t, err, nil)
  38. Equal(t, result, "($12,345.68)")
  39. result = en.FmtCurrency(ut.CurrencyAccounting, "USD", -12345.6789)
  40. Equal(t, result, "($12,345.68)")
  41. result, err = en.FmtCurrencySafe(ut.CurrencyStandard, "WHAT???", 12345.6789)
  42. NotEqual(t, err, nil)
  43. Equal(t, err.Error(), "**** WARNING **** unknown currency: WHAT???")
  44. result = en.FmtCurrency(ut.CurrencyStandard, "WHAT???", 12345.6789)
  45. Equal(t, result, "")
  46. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "WHAT???", 12345.6789)
  47. NotEqual(t, err, nil)
  48. Equal(t, err.Error(), "**** WARNING **** unknown currency: WHAT???")
  49. result = en.FmtCurrency(ut.CurrencyAccounting, "WHAT???", 12345.6789)
  50. Equal(t, result, "")
  51. // try some really big numbers to make sure weird floaty stuff doesn't
  52. // happen
  53. result, err = en.FmtCurrencySafe(ut.CurrencyStandard, "USD", 12345000000000.6789)
  54. Equal(t, err, nil)
  55. Equal(t, result, "$12,345,000,000,000.68")
  56. result = en.FmtCurrency(ut.CurrencyStandard, "USD", 12345000000000.6789)
  57. Equal(t, result, "$12,345,000,000,000.68")
  58. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "USD", 12345000000000.6789)
  59. Equal(t, err, nil)
  60. Equal(t, result, "$12,345,000,000,000.68")
  61. result = en.FmtCurrency(ut.CurrencyAccounting, "USD", 12345000000000.6789)
  62. Equal(t, result, "$12,345,000,000,000.68")
  63. result, err = en.FmtCurrencySafe(ut.CurrencyStandard, "USD", -12345000000000.6789)
  64. Equal(t, err, nil)
  65. Equal(t, result, "-$12,345,000,000,000.68")
  66. result = en.FmtCurrency(ut.CurrencyStandard, "USD", -12345000000000.6789)
  67. Equal(t, result, "-$12,345,000,000,000.68")
  68. result, err = en.FmtCurrencySafe(ut.CurrencyAccounting, "USD", -12345000000000.6789)
  69. Equal(t, err, nil)
  70. Equal(t, result, "($12,345,000,000,000.68)")
  71. result = en.FmtCurrency(ut.CurrencyAccounting, "USD", -12345000000000.6789)
  72. Equal(t, result, "($12,345,000,000,000.68)")
  73. saq, err := ut.GetTranslator("saq")
  74. Equal(t, err, nil)
  75. // Try something that needs a partial fallback
  76. // no Formatting or symbols for "saq" in locales
  77. result, err = saq.FmtCurrencySafe(ut.CurrencyStandard, "USD", 12345.6789)
  78. Equal(t, err, nil)
  79. Equal(t, result, "1234568")
  80. result = saq.FmtCurrency(ut.CurrencyStandard, "USD", 12345.6789)
  81. Equal(t, result, "1234568")
  82. result, err = saq.FmtCurrencySafe(ut.CurrencyAccounting, "USD", 12345.6789)
  83. Equal(t, err, nil)
  84. Equal(t, result, "1234568")
  85. result = saq.FmtCurrency(ut.CurrencyAccounting, "USD", 12345.6789)
  86. Equal(t, result, "1234568")
  87. ar, err := ut.GetTranslator("ar")
  88. Equal(t, err, nil)
  89. // // And one more for with some unusual symbols for good measure
  90. result, err = ar.FmtCurrencySafe(ut.CurrencyStandard, "USD", -12345.6789)
  91. Equal(t, err, nil)
  92. Equal(t, result, "\u200F-US$\u00A012٬345٫68")
  93. result = ar.FmtCurrency(ut.CurrencyStandard, "USD", -12345.6789)
  94. Equal(t, result, "\u200F-US$\u00A012٬345٫68")
  95. result, err = ar.FmtCurrencySafe(ut.CurrencyAccounting, "USD", -12345.6789)
  96. Equal(t, err, nil)
  97. Equal(t, result, "\u200F-US$\u00A012٬345٫68")
  98. result = ar.FmtCurrency(ut.CurrencyAccounting, "USD", -12345.6789)
  99. Equal(t, result, "\u200F-US$\u00A012٬345٫68")
  100. // And one more for with some unusual symbols for good measure
  101. result, err = en.FmtCurrencySafe(ut.CurrencyStandard, "USD", 0.0084)
  102. Equal(t, err, nil)
  103. Equal(t, result, "$0.01")
  104. result = en.FmtCurrency(ut.CurrencyStandard, "USD", 0.0084)
  105. Equal(t, result, "$0.01")
  106. }