summary refs log tree commit diff
path: root/Test/V09datetime.ztst
blob: 9f67ecec3f352da111125ad649fe7b5b6013b368 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
%prep

  if zmodload zsh/datetime 2>/dev/null; then
    setopt multibyte
    unset LC_ALL
    LC_TIME=C
    TZ=UTC+0
    # It's not clear this skip_extensions is correct, but the
    # format in question is causing problems on Solaris.
    # We'll revist this after the release.
    [[ "$(strftime %^_10B 0 2>/dev/null)" = "   JANUARY" ]] || skip_extensions=1
    [[ "$(LC_TIME=ja_JP.UTF-8 strftime %OS 1 2>/dev/null)" = 一 ]] || skip_japanese=1
  else
    ZTST_unimplemented="can't load the zsh/datetime module for testing"
  fi

%test

  strftime '' 0
  strftime %y 0
  strftime %Y 1000000000
  strftime %x 1200000000
  strftime %X 1200000001
0:basic format specifiers
>
>70
>2001
>01/10/08
>21:20:01

  strftime %-m_%f_%K_%L 1181100000
  strftime %6. 0
0:zsh extensions
>6_6_3_3
>000000

  if [[ $skip_extensions = 1 ]]; then
    ZTST_skip="strftime extensions not supported"
  elif [[ $skip_japanese = 1 ]]; then
    ZTST_skip="Japanese UTF-8 locale not supported"
  else
    (
    LC_TIME=ja_JP.UTF-8
    strftime %Ey 1000000000
    strftime %Oy 1000000000
    strftime %Ex 1000000000
    strftime %OS 1000000000
    strftime %03Ey 650000000
    )
  fi
0:alternate format extensions
>13
>一
>平成13年09月09日
>四十
>002

  if [[ $skip_extensions = 1 ]]; then
    ZTST_skip="strftime extensions not supported"
  else
    (
      strftime '%#A' 0
      strftime '%^_10B' 0
      strftime %03Ey 650000000
      strftime %-Oe 0
      # width=400 is too wide and should cause an error
      strftime %400d 0 2> /dev/null || echo OK
    )
  fi
0:various extensions
>THURSDAY
>   JANUARY
>090
>1
>OK

  print -r -- ${(V)"$(strftime $'%Y\0%m\0%d' 100000000)"}
0:Embedded nulls
>1973^@03^@03

# We assume '%@' is not a valid format on any OSs.
# The result can be '%@' (Linux), '@' (BSDs) or an error (Cygwin).
  [[ $(strftime '%@' 0 2> /dev/null) == (%|)@ || $? != 0 ]]
0:bad format specifier

# This test may fail at 23:59:59.xxx on New Year's Eve :/
  [[ "$( strftime '%Y' )" == "$( strftime '%Y' "$EPOCHSECONDS" )" ]]
0:epochtime optional

  strftime '%Y-%m-%d %H:%M:%S.%3.' 1012615322
  strftime '%Y-%m-%d %H:%M:%S.%3.' 1012615322 0
  strftime '%Y-%m-%d %H:%M:%S.%3.' 1012615322 2
  strftime '%Y-%m-%d %H:%M:%S.%3.' 1012615322 $(( 222 * (10 ** 6) ))
0:optional nanoseconds
>2002-02-02 02:02:02.000
>2002-02-02 02:02:02.000
>2002-02-02 02:02:02.000
>2002-02-02 02:02:02.222

  strftime '%Y' '' 2> /dev/null
1:empty epochtime not allowed

  strftime '%Y' 1012615322 '' 2> /dev/null
1:empty nanoseconds not allowed

  strftime '%N' 1012615322 $(( 10 ** 9 )) 2> /dev/null
1:too-large nanoseconds not allowed

  strftime '%N' 1012615322 ${(l<64><9>):-} 2> /dev/null
1:overflowed nanoseconds not allowed

  strftime '%N' 1012615322 -1 2> /dev/null
1:negative nanoseconds not allowed

  strftime -r '%Y' 2> /dev/null
1:-r timestring not optional

  # This tests rounding up and the use of repeated %.s
  strftime '%Y-%m-%d %H:%M:%S.%3..%3.' 1012615322 $(( 999_999 ))
  # These test the ceiling on rounding up
  for 1 in %. %1. %3. %6. %9. %12.; do
    print -rn - "$1 "
    strftime "%Y-%m-%d %H:%M:%S.$1" 1012615322 $(( 999_999_999 ))
  done
0:%. truncation
>2002-02-02 02:02:02.001.001
>%. 2002-02-02 02:02:02.999
>%1. 2002-02-02 02:02:02.9
>%3. 2002-02-02 02:02:02.999
>%6. 2002-02-02 02:02:02.999999
>%9. 2002-02-02 02:02:02.999999999
>%12. 2002-02-02 02:02:02.999999999