11package timeago
22
33import (
4+ "strconv"
45 "testing"
56 "time"
67
78 "github.com/SerhiiCho/timeago/v3/internal/utils"
89)
910
10- func TestParseFunctionCanExceptTimestamp (t * testing.T ) {
11+ func TestParse (t * testing.T ) {
1112 cases := []struct {
12- date int
13+ date interface {}
1314 res string
1415 }{
15- { utils . UnixFromPastDate ( time . Minute ), "1 minute ago" },
16+ // Integer timestamp input parsing
1617 {utils .UnixFromPastDate (time .Minute * 5 ), "5 minutes ago" },
1718 {utils .UnixFromPastDate (time .Hour ), "1 hour ago" },
1819 {utils .UnixFromPastDate (time .Hour * 3 ), "3 hours ago" },
@@ -24,31 +25,79 @@ func TestParseFunctionCanExceptTimestamp(t *testing.T) {
2425 {utils .UnixFromPastDate (time .Hour * 24 * 5 ), "5 days ago" },
2526 {utils .UnixFromPastDate (time .Hour * 24 * 6 ), "6 days ago" },
2627 {utils .UnixFromPastDate (time .Hour * 24 * 7 ), "1 week ago" },
27- }
28-
29- Reconfigure (Config {Language : LangEn })
30-
31- for _ , tc := range cases {
32- t .Run (tc .res , func (t * testing.T ) {
33- res , err := Parse (tc .date )
34-
35- if err != nil {
36- t .Errorf ("Error must be nil, but got %q instead" , err )
37- }
38-
39- if res != tc .res {
40- t .Errorf ("Result must be %q, but got %q instead" , tc .res , res )
41- }
42- })
43- }
44- }
45-
46- func TestParseFunctionCanExceptTimePackage (t * testing.T ) {
47- cases := []struct {
48- date time.Time
49- res string
50- }{
51- {utils .SubMinutes (1 ), "1 minute ago" },
28+ // Integer 64 timestamp input parsing
29+ {int64 (utils .UnixFromPastDate (time .Minute * 5 )), "5 minutes ago" },
30+ {int64 (utils .UnixFromPastDate (time .Hour )), "1 hour ago" },
31+ {int64 (utils .UnixFromPastDate (time .Hour * 3 )), "3 hours ago" },
32+ {int64 (utils .UnixFromPastDate (time .Hour * 5 )), "5 hours ago" },
33+ {int64 (utils .UnixFromPastDate (time .Hour * 24 )), "1 day ago" },
34+ {int64 (utils .UnixFromPastDate (time .Hour * 24 * 2 )), "2 days ago" },
35+ {int64 (utils .UnixFromPastDate (time .Hour * 24 * 3 )), "3 days ago" },
36+ {int64 (utils .UnixFromPastDate (time .Hour * 24 * 4 )), "4 days ago" },
37+ {int64 (utils .UnixFromPastDate (time .Hour * 24 * 5 )), "5 days ago" },
38+ {int64 (utils .UnixFromPastDate (time .Hour * 24 * 6 )), "6 days ago" },
39+ {int64 (utils .UnixFromPastDate (time .Hour * 24 * 7 )), "1 week ago" },
40+ // Unsigned Integer timestamp input parsing
41+ {uint (utils .UnixFromPastDate (time .Minute * 5 )), "5 minutes ago" },
42+ {uint (utils .UnixFromPastDate (time .Hour )), "1 hour ago" },
43+ {uint (utils .UnixFromPastDate (time .Hour * 3 )), "3 hours ago" },
44+ {uint (utils .UnixFromPastDate (time .Hour * 5 )), "5 hours ago" },
45+ {uint (utils .UnixFromPastDate (time .Hour * 24 )), "1 day ago" },
46+ {uint (utils .UnixFromPastDate (time .Hour * 24 * 2 )), "2 days ago" },
47+ {uint (utils .UnixFromPastDate (time .Hour * 24 * 3 )), "3 days ago" },
48+ {uint (utils .UnixFromPastDate (time .Hour * 24 * 4 )), "4 days ago" },
49+ {uint (utils .UnixFromPastDate (time .Hour * 24 * 5 )), "5 days ago" },
50+ {uint (utils .UnixFromPastDate (time .Hour * 24 * 6 )), "6 days ago" },
51+ {uint (utils .UnixFromPastDate (time .Hour * 24 * 7 )), "1 week ago" },
52+ // Unsigned Integer 32 timestamp input parsing
53+ {uint32 (utils .UnixFromPastDate (time .Minute * 5 )), "5 minutes ago" },
54+ {uint32 (utils .UnixFromPastDate (time .Hour )), "1 hour ago" },
55+ {uint32 (utils .UnixFromPastDate (time .Hour * 3 )), "3 hours ago" },
56+ {uint32 (utils .UnixFromPastDate (time .Hour * 5 )), "5 hours ago" },
57+ {uint32 (utils .UnixFromPastDate (time .Hour * 24 )), "1 day ago" },
58+ {uint32 (utils .UnixFromPastDate (time .Hour * 24 * 2 )), "2 days ago" },
59+ {uint32 (utils .UnixFromPastDate (time .Hour * 24 * 3 )), "3 days ago" },
60+ {uint32 (utils .UnixFromPastDate (time .Hour * 24 * 4 )), "4 days ago" },
61+ {uint32 (utils .UnixFromPastDate (time .Hour * 24 * 5 )), "5 days ago" },
62+ {uint32 (utils .UnixFromPastDate (time .Hour * 24 * 6 )), "6 days ago" },
63+ {uint32 (utils .UnixFromPastDate (time .Hour * 24 * 7 )), "1 week ago" },
64+ // Unsigned Integer 64 timestamp input parsing
65+ {uint64 (utils .UnixFromPastDate (time .Minute * 5 )), "5 minutes ago" },
66+ {uint64 (utils .UnixFromPastDate (time .Hour )), "1 hour ago" },
67+ {uint64 (utils .UnixFromPastDate (time .Hour * 3 )), "3 hours ago" },
68+ {uint64 (utils .UnixFromPastDate (time .Hour * 5 )), "5 hours ago" },
69+ {uint64 (utils .UnixFromPastDate (time .Hour * 24 )), "1 day ago" },
70+ {uint64 (utils .UnixFromPastDate (time .Hour * 24 * 2 )), "2 days ago" },
71+ {uint64 (utils .UnixFromPastDate (time .Hour * 24 * 3 )), "3 days ago" },
72+ {uint64 (utils .UnixFromPastDate (time .Hour * 24 * 4 )), "4 days ago" },
73+ {uint64 (utils .UnixFromPastDate (time .Hour * 24 * 5 )), "5 days ago" },
74+ {uint64 (utils .UnixFromPastDate (time .Hour * 24 * 6 )), "6 days ago" },
75+ {uint64 (utils .UnixFromPastDate (time .Hour * 24 * 7 )), "1 week ago" },
76+ // Integer 32 timestamp input parsing
77+ {int32 (utils .UnixFromPastDate (time .Minute * 5 )), "5 minutes ago" },
78+ {int32 (utils .UnixFromPastDate (time .Hour )), "1 hour ago" },
79+ {int32 (utils .UnixFromPastDate (time .Hour * 3 )), "3 hours ago" },
80+ {int32 (utils .UnixFromPastDate (time .Hour * 5 )), "5 hours ago" },
81+ {int32 (utils .UnixFromPastDate (time .Hour * 24 )), "1 day ago" },
82+ {int32 (utils .UnixFromPastDate (time .Hour * 24 * 2 )), "2 days ago" },
83+ {int32 (utils .UnixFromPastDate (time .Hour * 24 * 3 )), "3 days ago" },
84+ {int32 (utils .UnixFromPastDate (time .Hour * 24 * 4 )), "4 days ago" },
85+ {int32 (utils .UnixFromPastDate (time .Hour * 24 * 5 )), "5 days ago" },
86+ {int32 (utils .UnixFromPastDate (time .Hour * 24 * 6 )), "6 days ago" },
87+ {int32 (utils .UnixFromPastDate (time .Hour * 24 * 7 )), "1 week ago" },
88+ // Negative integer timestamp input parsing
89+ {utils .UnixFromFutureDate (time .Minute * 5 ), "5 minutes" },
90+ {utils .UnixFromFutureDate (time .Hour ), "1 hour" },
91+ {utils .UnixFromFutureDate (time .Hour * 3 ), "3 hours" },
92+ {utils .UnixFromFutureDate (time .Hour * 5 ), "5 hours" },
93+ {utils .UnixFromFutureDate (time .Hour * 24 ), "1 day" },
94+ {utils .UnixFromFutureDate (time .Hour * 24 * 2 ), "2 days" },
95+ {utils .UnixFromFutureDate (time .Hour * 24 * 3 ), "3 days" },
96+ {utils .UnixFromFutureDate (time .Hour * 24 * 4 ), "4 days" },
97+ {utils .UnixFromFutureDate (time .Hour * 24 * 5 ), "5 days" },
98+ {utils .UnixFromFutureDate (time .Hour * 24 * 6 ), "6 days" },
99+ {utils .UnixFromFutureDate (time .Hour * 24 * 7 ), "1 week" },
100+ // time.Time input parsing
52101 {utils .SubMinutes (2 ), "2 minutes ago" },
53102 {utils .SubMinutes (3 ), "3 minutes ago" },
54103 {utils .SubMinutes (4 ), "4 minutes ago" },
@@ -59,42 +108,31 @@ func TestParseFunctionCanExceptTimePackage(t *testing.T) {
59108 {utils .SubHours (9 ), "9 hours ago" },
60109 {utils .SubHours (10 ), "10 hours ago" },
61110 {utils .SubHours (11 ), "11 hours ago" },
62- }
63-
64- Reconfigure (Config {Language : LangEn })
65-
66- for _ , tc := range cases {
67- t .Run ("Test for date " + tc .date .String (), func (t * testing.T ) {
68- res , err := Parse (tc .date )
69-
70- if err != nil {
71- t .Errorf ("Error must be nil, but got %q instead" , err )
72- }
73-
74- if res != tc .res {
75- t .Errorf ("Result must be %q, but got %q instead" , tc .res , res )
76- }
77- })
78- }
79- }
80-
81- func TestParseFuncWillCalculateIntervalToFutureDate (t * testing.T ) {
82- testCases := []struct {
83- date time.Time
84- res string
85- }{
111+ // time.Time future date parsing
86112 {utils .AddMinutes (2 ), "2 minutes" },
87113 {utils .AddMinutes (5 ), "5 minutes" },
88114 {utils .AddMinutes (10 ), "10 minutes" },
89115 {utils .AddHours (1 ), "1 hour" },
90116 {utils .AddHours (24 ), "1 day" },
91117 {utils .AddHours (48 ), "2 days" },
118+ // Timestamp string input parsing
119+ {strconv .Itoa (utils .UnixFromPastDate (time .Minute * 5 )), "5 minutes ago" },
120+ {strconv .Itoa (utils .UnixFromPastDate (time .Hour )), "1 hour ago" },
121+ {strconv .Itoa (utils .UnixFromPastDate (time .Hour * 3 )), "3 hours ago" },
122+ {strconv .Itoa (utils .UnixFromPastDate (time .Hour * 5 )), "5 hours ago" },
123+ {strconv .Itoa (utils .UnixFromPastDate (time .Hour * 24 )), "1 day ago" },
124+ {strconv .Itoa (utils .UnixFromPastDate (time .Hour * 24 * 2 )), "2 days ago" },
125+ {strconv .Itoa (utils .UnixFromPastDate (time .Hour * 24 * 3 )), "3 days ago" },
126+ {strconv .Itoa (utils .UnixFromPastDate (time .Hour * 24 * 4 )), "4 days ago" },
127+ {strconv .Itoa (utils .UnixFromPastDate (time .Hour * 24 * 5 )), "5 days ago" },
128+ {strconv .Itoa (utils .UnixFromPastDate (time .Hour * 24 * 6 )), "6 days ago" },
129+ {strconv .Itoa (utils .UnixFromPastDate (time .Hour * 24 * 7 )), "1 week ago" },
92130 }
93131
94132 Reconfigure (Config {Language : LangEn })
95133
96- for _ , tc := range testCases {
97- t .Run ("Test for date: " + tc .date . String () , func (t * testing.T ) {
134+ for _ , tc := range cases {
135+ t .Run (tc .res , func (t * testing.T ) {
98136 res , err := Parse (tc .date )
99137
100138 if err != nil {
0 commit comments