time_test.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package format
  2. import (
  3. "testing"
  4. "time"
  5. )
  6. func assertEqual(t *testing.T, a interface{}, b interface{}) {
  7. if a != b {
  8. t.Errorf("Assert failed, expected %v, got %v", b, a)
  9. }
  10. }
  11. func TestHumanDuration(t *testing.T) {
  12. day := 24 * time.Hour
  13. week := 7 * day
  14. month := 30 * day
  15. year := 365 * day
  16. assertEqual(t, "Less than a second", HumanDuration(450*time.Millisecond))
  17. assertEqual(t, "Less than a second", HumanDurationWithCase(450*time.Millisecond, true))
  18. assertEqual(t, "less than a second", HumanDurationWithCase(450*time.Millisecond, false))
  19. assertEqual(t, "1 second", HumanDuration(1*time.Second))
  20. assertEqual(t, "45 seconds", HumanDuration(45*time.Second))
  21. assertEqual(t, "46 seconds", HumanDuration(46*time.Second))
  22. assertEqual(t, "59 seconds", HumanDuration(59*time.Second))
  23. assertEqual(t, "About a minute", HumanDuration(60*time.Second))
  24. assertEqual(t, "About a minute", HumanDurationWithCase(1*time.Minute, true))
  25. assertEqual(t, "about a minute", HumanDurationWithCase(1*time.Minute, false))
  26. assertEqual(t, "3 minutes", HumanDuration(3*time.Minute))
  27. assertEqual(t, "35 minutes", HumanDuration(35*time.Minute))
  28. assertEqual(t, "35 minutes", HumanDuration(35*time.Minute+40*time.Second))
  29. assertEqual(t, "45 minutes", HumanDuration(45*time.Minute))
  30. assertEqual(t, "45 minutes", HumanDuration(45*time.Minute+40*time.Second))
  31. assertEqual(t, "46 minutes", HumanDuration(46*time.Minute))
  32. assertEqual(t, "59 minutes", HumanDuration(59*time.Minute))
  33. assertEqual(t, "About an hour", HumanDuration(1*time.Hour))
  34. assertEqual(t, "About an hour", HumanDurationWithCase(1*time.Hour+29*time.Minute, true))
  35. assertEqual(t, "about an hour", HumanDurationWithCase(1*time.Hour+29*time.Minute, false))
  36. assertEqual(t, "2 hours", HumanDuration(1*time.Hour+31*time.Minute))
  37. assertEqual(t, "2 hours", HumanDuration(1*time.Hour+59*time.Minute))
  38. assertEqual(t, "3 hours", HumanDuration(3*time.Hour))
  39. assertEqual(t, "3 hours", HumanDuration(3*time.Hour+29*time.Minute))
  40. assertEqual(t, "4 hours", HumanDuration(3*time.Hour+31*time.Minute))
  41. assertEqual(t, "4 hours", HumanDuration(3*time.Hour+59*time.Minute))
  42. assertEqual(t, "4 hours", HumanDuration(3*time.Hour+60*time.Minute))
  43. assertEqual(t, "24 hours", HumanDuration(24*time.Hour))
  44. assertEqual(t, "36 hours", HumanDuration(1*day+12*time.Hour))
  45. assertEqual(t, "2 days", HumanDuration(2*day))
  46. assertEqual(t, "7 days", HumanDuration(7*day))
  47. assertEqual(t, "13 days", HumanDuration(13*day+5*time.Hour))
  48. assertEqual(t, "2 weeks", HumanDuration(2*week))
  49. assertEqual(t, "2 weeks", HumanDuration(2*week+4*day))
  50. assertEqual(t, "3 weeks", HumanDuration(3*week))
  51. assertEqual(t, "4 weeks", HumanDuration(4*week))
  52. assertEqual(t, "4 weeks", HumanDuration(4*week+3*day))
  53. assertEqual(t, "4 weeks", HumanDuration(1*month))
  54. assertEqual(t, "6 weeks", HumanDuration(1*month+2*week))
  55. assertEqual(t, "2 months", HumanDuration(2*month))
  56. assertEqual(t, "2 months", HumanDuration(2*month+2*week))
  57. assertEqual(t, "3 months", HumanDuration(3*month))
  58. assertEqual(t, "3 months", HumanDuration(3*month+1*week))
  59. assertEqual(t, "5 months", HumanDuration(5*month+2*week))
  60. assertEqual(t, "13 months", HumanDuration(13*month))
  61. assertEqual(t, "23 months", HumanDuration(23*month))
  62. assertEqual(t, "24 months", HumanDuration(24*month))
  63. assertEqual(t, "2 years", HumanDuration(24*month+2*week))
  64. assertEqual(t, "3 years", HumanDuration(3*year+2*month))
  65. }
  66. func TestHumanTime(t *testing.T) {
  67. now := time.Now()
  68. t.Run("zero value", func(t *testing.T) {
  69. assertEqual(t, HumanTime(time.Time{}, "never"), "never")
  70. })
  71. t.Run("time in the future", func(t *testing.T) {
  72. v := now.Add(48 * time.Hour)
  73. assertEqual(t, HumanTime(v, ""), "2 days from now")
  74. })
  75. t.Run("time in the past", func(t *testing.T) {
  76. v := now.Add(-48 * time.Hour)
  77. assertEqual(t, HumanTime(v, ""), "2 days ago")
  78. })
  79. }
  80. func TestExactDuration(t *testing.T) {
  81. assertEqual(t, "1 millisecond", ExactDuration(1*time.Millisecond))
  82. assertEqual(t, "10 milliseconds", ExactDuration(10*time.Millisecond))
  83. assertEqual(t, "1 second", ExactDuration(1*time.Second))
  84. assertEqual(t, "10 seconds", ExactDuration(10*time.Second))
  85. assertEqual(t, "1 minute", ExactDuration(1*time.Minute))
  86. assertEqual(t, "10 minutes", ExactDuration(10*time.Minute))
  87. assertEqual(t, "1 hour", ExactDuration(1*time.Hour))
  88. assertEqual(t, "10 hours", ExactDuration(10*time.Hour))
  89. assertEqual(t, "1 hour 1 second", ExactDuration(1*time.Hour+1*time.Second))
  90. assertEqual(t, "1 hour 10 seconds", ExactDuration(1*time.Hour+10*time.Second))
  91. assertEqual(t, "1 hour 1 minute", ExactDuration(1*time.Hour+1*time.Minute))
  92. assertEqual(t, "1 hour 10 minutes", ExactDuration(1*time.Hour+10*time.Minute))
  93. assertEqual(t, "1 hour 1 minute 1 second", ExactDuration(1*time.Hour+1*time.Minute+1*time.Second))
  94. assertEqual(t, "10 hours 10 minutes 10 seconds", ExactDuration(10*time.Hour+10*time.Minute+10*time.Second))
  95. }