OSDN Git Service

41f25be015b49c5a8cc081280084d9482e591733
[bytom/vapor.git] / vendor / github.com / lestrrat-go / strftime / strftime_test.go
1 package strftime_test
2
3 import (
4         "os"
5         "testing"
6         "time"
7
8         envload "github.com/lestrrat-go/envload"
9         "github.com/lestrrat-go/strftime"
10         "github.com/stretchr/testify/assert"
11 )
12
13 var ref = time.Unix(1136239445, 0).UTC()
14
15 func TestExclusion(t *testing.T) {
16         s, err := strftime.New("%p PM")
17         if !assert.NoError(t, err, `strftime.New should succeed`) {
18                 return
19         }
20
21         var tm time.Time
22         if !assert.Equal(t, "AM PM", s.FormatString(tm)) {
23                 return
24         }
25 }
26
27 func TestInvalid(t *testing.T) {
28         _, err := strftime.New("%")
29         if !assert.Error(t, err, `strftime.New should return error`) {
30                 return
31         }
32
33         _, err = strftime.New(" %")
34         if !assert.Error(t, err, `strftime.New should return error`) {
35                 return
36         }
37         _, err = strftime.New(" % ")
38         if !assert.Error(t, err, `strftime.New should return error`) {
39                 return
40         }
41 }
42
43 func TestFormat(t *testing.T) {
44         l := envload.New()
45         defer l.Restore()
46
47         os.Setenv("LC_ALL", "C")
48
49         s, err := strftime.Format(`%A %a %B %b %C %c %D %d %e %F %H %h %I %j %k %l %M %m %n %p %R %r %S %T %t %U %u %V %v %W %w %X %x %Y %y %Z %z`, ref)
50         if !assert.NoError(t, err, `strftime.Format succeeds`) {
51                 return
52         }
53
54         if !assert.Equal(t, "Monday Mon January Jan 20 Mon Jan  2 22:04:05 2006 01/02/06 02  2 2006-01-02 22 Jan 10 002 22 10 04 01 \n PM 22:04 10:04:05 PM 05 22:04:05 \t 01 1 01  2-Jan-2006 01 1 22:04:05 01/02/06 2006 06 UTC +0000", s, `formatted result matches`) {
55                 return
56         }
57 }
58
59 func TestFormatBlanks(t *testing.T) {
60         l := envload.New()
61         defer l.Restore()
62
63         os.Setenv("LC_ALL", "C")
64
65         {
66                 dt := time.Date(1, 1, 1, 18, 0, 0, 0, time.UTC)
67                 s, err := strftime.Format("%l", dt)
68                 if !assert.NoError(t, err, `strftime.Format succeeds`) {
69                         return
70                 }
71
72                 if !assert.Equal(t, " 6", s, "leading blank is properly set") {
73                         return
74                 }
75         }
76         {
77                 dt := time.Date(1, 1, 1, 6, 0, 0, 0, time.UTC)
78                 s, err := strftime.Format("%k", dt)
79                 if !assert.NoError(t, err, `strftime.Format succeeds`) {
80                         return
81                 }
82
83                 if !assert.Equal(t, " 6", s, "leading blank is properly set") {
84                         return
85                 }
86         }
87 }
88
89 func TestFormatZeropad(t *testing.T) {
90         l := envload.New()
91         defer l.Restore()
92
93         os.Setenv("LC_ALL", "C")
94
95         {
96                 dt := time.Date(1, 1, 1, 1, 0, 0, 0, time.UTC)
97                 s, err := strftime.Format("%j", dt)
98                 if !assert.NoError(t, err, `strftime.Format succeeds`) {
99                         return
100                 }
101
102                 if !assert.Equal(t, "001", s, "padding is properly set") {
103                         return
104                 }
105         }
106         {
107                 dt := time.Date(1, 1, 10, 6, 0, 0, 0, time.UTC)
108                 s, err := strftime.Format("%j", dt)
109                 if !assert.NoError(t, err, `strftime.Format succeeds`) {
110                         return
111                 }
112
113                 if !assert.Equal(t, "010", s, "padding is properly set") {
114                         return
115                 }
116         }
117         {
118                 dt := time.Date(1, 6, 1, 6, 0, 0, 0, time.UTC)
119                 s, err := strftime.Format("%j", dt)
120                 if !assert.NoError(t, err, `strftime.Format succeeds`) {
121                         return
122                 }
123
124                 if !assert.Equal(t, "152", s, "padding is properly set") {
125                         return
126                 }
127         }
128         {
129                 dt := time.Date(100, 1, 1, 1, 0, 0, 0, time.UTC)
130                 s, err := strftime.Format("%C", dt)
131                 if !assert.NoError(t, err, `strftime.Format succeeds`) {
132                         return
133                 }
134
135                 if !assert.Equal(t, "01", s, "padding is properly set") {
136                         return
137                 }
138         }
139 }
140
141 func TestGHIssue5(t *testing.T) {
142         const expected = `apm-test/logs/apm.log.01000101`
143         p, _ := strftime.New("apm-test/logs/apm.log.%Y%m%d")
144         dt := time.Date(100, 1, 1, 1, 0, 0, 0, time.UTC)
145         if !assert.Equal(t, expected, p.FormatString(dt), `patterns including 'pm' should be treated as verbatim formatter`) {
146                 return
147         }
148 }