Source file
src/time/zoneinfo_unix_test.go
Documentation: time
1
2
3
4
5
6
7
8 package time_test
9
10 import (
11 "os"
12 "testing"
13 "time"
14 )
15
16 func TestEnvTZUsage(t *testing.T) {
17 const env = "TZ"
18 tz, ok := os.LookupEnv(env)
19 if !ok {
20 defer os.Unsetenv(env)
21 } else {
22 defer os.Setenv(env, tz)
23 }
24 defer time.ForceUSPacificForTesting()
25
26 localZoneName := "Local"
27
28 if _, err := os.Stat("/etc/localtime"); os.IsNotExist(err) {
29 localZoneName = "UTC"
30 }
31
32 cases := []struct {
33 nilFlag bool
34 tz string
35 local string
36 }{
37
38 {true, "", localZoneName},
39
40 {false, "", "UTC"},
41 {false, ":", "UTC"},
42 {false, "Asia/Shanghai", "Asia/Shanghai"},
43 {false, ":Asia/Shanghai", "Asia/Shanghai"},
44 {false, "/etc/localtime", localZoneName},
45 {false, ":/etc/localtime", localZoneName},
46 }
47
48 for _, c := range cases {
49 time.ResetLocalOnceForTest()
50 if c.nilFlag {
51 os.Unsetenv(env)
52 } else {
53 os.Setenv(env, c.tz)
54 }
55 if time.Local.String() != c.local {
56 t.Errorf("invalid Local location name for %q: got %q want %q", c.tz, time.Local, c.local)
57 }
58 }
59
60 time.ResetLocalOnceForTest()
61
62 path := "/usr/share/zoneinfo/Asia/Shanghai"
63 os.Setenv(env, path)
64 if _, err := os.Stat(path); os.IsNotExist(err) {
65 if time.Local.String() != "UTC" {
66 t.Errorf(`invalid path should fallback to UTC: got %q want "UTC"`, time.Local)
67 }
68 return
69 }
70 if time.Local.String() != path {
71 t.Errorf(`custom path should lead to path itself: got %q want %q`, time.Local, path)
72 }
73
74 timeInUTC := time.Date(2009, 1, 1, 12, 0, 0, 0, time.UTC)
75 sameTimeInShanghai := time.Date(2009, 1, 1, 20, 0, 0, 0, time.Local)
76 if !timeInUTC.Equal(sameTimeInShanghai) {
77 t.Errorf("invalid timezone: got %q want %q", timeInUTC, sameTimeInShanghai)
78 }
79
80 time.ResetLocalOnceForTest()
81 os.Setenv(env, ":"+path)
82 if time.Local.String() != path {
83 t.Errorf(`custom path should lead to path itself: got %q want %q`, time.Local, path)
84 }
85
86 time.ResetLocalOnceForTest()
87 os.Setenv(env, path[:len(path)-1])
88 if time.Local.String() != "UTC" {
89 t.Errorf(`invalid path should fallback to UTC: got %q want "UTC"`, time.Local)
90 }
91 }
92
View as plain text