OSDN Git Service

Updated to tcl 8.4.1
[pf3gnuchains/sourceware.git] / tcl / tests / clock.test
1 # Commands covered:  clock
2 #
3 # This file contains a collection of tests for one or more of the Tcl
4 # built-in commands.  Sourcing this file into Tcl runs the tests and
5 # generates output for errors.  No output means no errors were found.
6 #
7 # Copyright (c) 1995-1998 Sun Microsystems, Inc.
8 # Copyright (c) 1998-1999 by Scriptics Corporation.
9 #
10 # See the file "license.terms" for information on usage and redistribution
11 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
12 #
13 # RCS: @(#) $Id$
14
15 set env(LC_TIME) POSIX
16
17 if {[lsearch [namespace children] ::tcltest] == -1} {
18     package require tcltest
19     namespace import -force ::tcltest::*
20 }
21
22 test clock-1.1 {clock tests} {
23     list [catch {clock} msg] $msg
24 } {1 {wrong # args: should be "clock option ?arg ...?"}}
25 test clock-1.2 {clock tests} {
26     list [catch {clock foo} msg] $msg
27 } {1 {bad option "foo": must be clicks, format, scan, or seconds}}
28
29 # clock clicks
30 test clock-2.1 {clock clicks tests} {
31     expr [clock clicks]+1
32     concat {}
33 } {}
34 test clock-2.2 {clock clicks tests} {
35     set start [clock clicks]
36     after 10
37     set end [clock clicks]
38     expr "$end > $start"
39 } {1}
40 test clock-2.3 {clock clicks tests} {
41     list [catch {clock clicks foo} msg] $msg
42 } {1 {bad switch "foo": must be -milliseconds}}
43 test clock-2.4 {clock clicks tests} {
44     expr [clock clicks -milliseconds]+1
45     concat {}
46 } {}
47 test clock-2.5 {clock clicks tests, millisecond timing test} {
48     set start [clock clicks -milli]
49     after 10
50     set end [clock clicks -milli]
51     # 60 msecs seems to be the max time slice under Windows 95/98
52     expr {($end > $start) && (($end - $start) <= 60)}
53 } {1}
54
55 # clock format
56 test clock-3.1 {clock format tests} {unixOnly} {
57     set clockval 657687766
58     clock format $clockval -format {%a %b %d %I:%M:%S %p %Y} -gmt true
59 } {Sun Nov 04 03:02:46 AM 1990}
60 test clock-3.2 {clock format tests} {
61     # TCL_USE_TIMEZONE_VAR
62
63     catch {set oldtz $env(TZ)}
64     set env(TZ) PST
65     set x {}
66     append x [clock format 863800000 -format %Z -gmt 1]
67     append x [set env(TZ)]
68     catch {unset env(TZ); set env(TZ) $oldtz}
69     set x
70 } {GMTPST}
71 test clock-3.3 {clock format tests} {
72     # tzset() under Borland doesn't seem to set up tzname[] for local 
73     # timezone, which caused "clock format" to think that %Z was an invalid
74     # string.  Don't care about answer, just that test runs w/o error.
75
76     clock format 863800000 -format %Z
77     set x {}
78 } {}
79 test clock-3.4 {clock format tests} {
80     # tzset() under Borland doesn't seem to set up tzname[] for gmt timezone.
81     # tzset() under MSVC has the following weird observed behavior:
82     #    First time we call "clock format [clock seconds] -format %Z -gmt 1"
83     #    we get "GMT", but on all subsequent calls we get the current time 
84     #    zone string, even though env(TZ) is GMT and the variable _timezone 
85     #    is 0.
86
87     set x {}
88     append x [clock format 863800000 -format %Z -gmt 1]
89     append x [clock format 863800000 -format %Z -gmt 1]
90 } {GMTGMT}
91 test clock-3.5 {clock format tests} {
92     list [catch {clock format} msg] $msg
93 } {1 {wrong # args: should be "clock format clockval ?-format string? ?-gmt boolean?"}}
94 test clock-3.6 {clock format tests} {
95     list [catch {clock format foo} msg] $msg
96 } {1 {expected integer but got "foo"}}
97 test clock-3.7 {clock format tests} {unixOrPc} {
98     set clockval 657687766
99     clock format $clockval -format "%a %b %d %I:%M:%S %p %Y" -gmt true
100 } "Sun Nov 04 03:02:46 AM 1990"
101 test clock-3.8 {clock format tests} {
102     list [catch {clock format a b c d e g} msg] $msg
103 } {1 {wrong # args: should be "clock format clockval ?-format string? ?-gmt boolean?"}}
104 test clock-3.9 {clock format tests} {unixOrPc nonPortable} {
105     set clockval -1
106     clock format $clockval -format "%a %b %d %I:%M:%S %p %Y" -gmt true
107 } "Wed Dec 31 11:59:59 PM 1969"
108 test clock-3.10 {clock format tests} {
109     list [catch {clock format 123 -bad arg} msg] $msg
110 } {1 {bad switch "-bad": must be -format or -gmt}}
111 test clock-3.11 {clock format tests} {
112     clock format 123 -format "x"
113 } x
114 test clock-3.12 {clock format tests} {
115     clock format 123 -format ""
116 } ""
117 test clock-3.13 {clock format with non-ASCII character in the format string} {
118     set oldenc [encoding system] 
119     encoding system iso8859-1
120     set res [clock format 0 -format \u00c4]
121     encoding system $oldenc
122     unset oldenc
123     set res
124 } "\u00c4"
125
126 # clock scan
127 test clock-4.1 {clock scan tests} {
128     list [catch {clock scan} msg] $msg
129 } {1 {wrong # args: should be "clock scan dateString ?-base clockValue? ?-gmt boolean?"}}
130 test clock-4.2 {clock scan tests} {
131     list [catch {clock scan "bad-string"} msg] $msg
132 } {1 {unable to convert date-time string "bad-string"}}
133 test clock-4.3 {clock scan tests} {
134     clock format [clock scan "14 Feb 92" -gmt true] \
135       -format {%m/%d/%y %I:%M:%S %p} -gmt true
136 } {02/14/92 12:00:00 AM}
137 test clock-4.4 {clock scan tests} {
138     clock format [clock scan "Feb 14, 1992 12:20 PM" -gmt true] \
139       -format {%m/%d/%y %I:%M:%S %p} -gmt true
140 } {02/14/92 12:20:00 PM}
141 test clock-4.5 {clock scan tests} {
142     clock format \
143       [clock scan "Feb 14, 1992 12:20 PM" -base 319363200 -gmt true] \
144       -format {%m/%d/%y %I:%M:%S %p} -gmt true
145 } {02/14/92 12:20:00 PM}
146 test clock-4.6 {clock scan tests} {
147     set time [clock scan "Oct 23,1992 15:00"]
148     clock format $time -format {%b %d,%Y %H:%M}
149 } {Oct 23,1992 15:00}
150 test clock-4.7 {clock scan tests} {
151     set time [clock scan "Oct 23,1992 15:00 GMT"]
152     clock format $time -format {%b %d,%Y %H:%M GMT} -gmt true
153 } {Oct 23,1992 15:00 GMT}
154 test clock-4.8 {clock scan tests} {
155     set time [clock scan "Oct 23,1992 15:00" -gmt true]
156     clock format $time -format {%b %d,%Y %H:%M GMT} -gmt true
157 } {Oct 23,1992 15:00 GMT}
158 test clock-4.9 {clock scan tests} {
159     list [catch {clock scan "Jan 12" -bad arg} msg] $msg
160 } {1 {bad switch "-bad": must be -base or -gmt}}
161 # The following two two tests test the two year date policy
162 test clock-4.10 {clock scan tests} {
163     set time [clock scan "1/1/71" -gmt true]
164     clock format $time -format {%b %d,%Y %H:%M GMT} -gmt true
165 } {Jan 01,1971 00:00 GMT}
166 test clock-4.11 {clock scan tests} {
167     set time [clock scan "1/1/37" -gmt true]
168     clock format $time -format {%b %d,%Y %H:%M GMT} -gmt true
169 } {Jan 01,2037 00:00 GMT}
170
171 test clock-4.12 {clock scan, relative times} {
172     set time [clock scan "Oct 23, 1992 -1 day"]
173     clock format $time -format {%b %d, %Y}
174 } "Oct 22, 1992"
175 test clock-4.13 {clock scan, ISO 8601 base date format} {
176     set time [clock scan "19921023"]
177     clock format $time -format {%b %d, %Y}
178 } "Oct 23, 1992"
179 test clock-4.14 {clock scan, ISO 8601 expanded date format} {
180     set time [clock scan "1992-10-23"]
181     clock format $time -format {%b %d, %Y}
182 } "Oct 23, 1992"
183 test clock-4.15 {clock scan, DD-Mon-YYYY format} {
184     set time [clock scan "23-Oct-1992"]
185     clock format $time -format {%b %d, %Y}
186 } "Oct 23, 1992"
187 test clock-4.16 {clock scan, ISO 8601 point in time format} {
188     set time [clock scan "19921023T235959"]
189     clock format $time -format {%b %d, %Y %H:%M:%S}
190 } "Oct 23, 1992 23:59:59"
191 test clock-4.17 {clock scan, ISO 8601 point in time format} {
192     set time [clock scan "19921023 235959"]
193     clock format $time -format {%b %d, %Y %H:%M:%S}
194 } "Oct 23, 1992 23:59:59"
195 test clock-4.18 {clock scan, ISO 8601 point in time format} {
196     set time [clock scan "19921023T000000"]
197     clock format $time -format {%b %d, %Y %H:%M:%S}
198 } "Oct 23, 1992 00:00:00"
199
200 # CLOCK SCAN REAL TESTS
201 # We use 5am PST, 31-12-1999 as the base for these scans because irrespective
202 # of your local timezone it should always give us times on December 31, 1999
203 set 5amPST 946645200
204 test clock-4.18 {clock scan, number meridian} {
205     set t1 [clock scan "5 am" -base $5amPST -gmt true]
206     set t2 [clock scan "5 pm" -base $5amPST -gmt true]
207     set t3 [clock scan "5 a.m." -base $5amPST -gmt true]
208     set t4 [clock scan "5 p.m." -base $5amPST -gmt true]
209     list \
210             [clock format $t1 -format {%b %d, %Y %H:%M:%S} -gmt true] \
211             [clock format $t2 -format {%b %d, %Y %H:%M:%S} -gmt true] \
212             [clock format $t3 -format {%b %d, %Y %H:%M:%S} -gmt true] \
213             [clock format $t4 -format {%b %d, %Y %H:%M:%S} -gmt true]
214 } [list "Dec 31, 1999 05:00:00" "Dec 31, 1999 17:00:00" \
215         "Dec 31, 1999 05:00:00" "Dec 31, 1999 17:00:00"]
216 test clock-4.19 {clock scan, number:number meridian} {
217     clock format [clock scan "5:30 pm" -base $5amPST -gmt true] \
218             -format {%b %d, %Y %H:%M:%S} -gmt true
219 } "Dec 31, 1999 17:30:00"
220 test clock-4.20 {clock scan, number:number-timezone} {
221     clock format [clock scan "00:00-0800" -gmt true -base $5amPST] \
222             -format {%b %d, %Y %H:%M:%S} -gmt true
223 } "Dec 31, 1999 08:00:00"
224 test clock-4.21 {clock scan, number:number:number o_merid} {
225     clock format [clock scan "8:00:00" -gmt true -base $5amPST] \
226             -format {%b %d, %Y %H:%M:%S} -gmt true
227 } "Dec 31, 1999 08:00:00"
228 test clock-4.22 {clock scan, number:number:number o_merid} {
229     clock format [clock scan "8:00:00 am" -gmt true -base $5amPST] \
230             -format {%b %d, %Y %H:%M:%S} -gmt true
231 } "Dec 31, 1999 08:00:00"
232 test clock-4.23 {clock scan, number:number:number o_merid} {
233     clock format [clock scan "8:00:00 pm" -gmt true -base $5amPST] \
234             -format {%b %d, %Y %H:%M:%S} -gmt true
235 } "Dec 31, 1999 20:00:00"
236 test clock-4.24 {clock scan, number:number:number-timezone} {
237     clock format [clock scan "00:00:30-0800" -gmt true -base $5amPST] \
238             -format {%b %d, %Y %H:%M:%S} -gmt true
239 } "Dec 31, 1999 08:00:30"
240 test clock-4.25 {clock scan, DST for days} {
241     clock scan "tomorrow" -base [clock scan "19991031 00:00:00"]
242 } [clock scan "19991101 00:00:00"]
243 test clock-4.26 {clock scan, DST for days} {
244     clock scan "yesterday" -base [clock scan "19991101 00:00:00"]
245 } [clock scan "19991031 00:00:00"]
246 test clock-4.27 {clock scan, day} knownBug {
247     clock format [clock scan "Monday" -gmt true -base 946627200] \
248             -format {%b %d, %Y %H:%M:%S} -gmt true
249 } "Jan 03, 2000 00:00:00"
250 test clock-4.28 {clock scan, number/number} {
251     clock format [clock scan "1/1" -gmt true -base 946627200] \
252             -format {%b %d, %Y %H:%M:%S} -gmt true
253 } "Jan 01, 1999 00:00:00"
254 test clock-4.28 {clock scan, number/number} {
255     clock format [clock scan "1/1/1999" -gmt true -base 946627200] \
256             -format {%b %d, %Y %H:%M:%S} -gmt true
257 } "Jan 01, 1999 00:00:00"
258 test clock-4.28 {clock scan, number/number} {
259     clock format [clock scan "19990101" -gmt true -base 946627200] \
260             -format {%b %d, %Y %H:%M:%S} -gmt true
261 } "Jan 01, 1999 00:00:00"
262 test clock-4.29 {clock scan, relative minutes} {
263     clock scan "now + 1 minute" -base 946627200
264 } 946627260
265 test clock-4.30 {clock scan, relative minutes} {
266     clock scan "now +1 minute" -base 946627200
267 } 946627260
268 test clock-4.31 {clock scan, relative minutes} {
269     clock scan "now 1 minute" -base 946627200
270 } 946627260
271 test clock-4.32 {clock scan, relative minutes} {
272     clock scan "now - 1 minute" -base 946627200
273 } 946627140
274 test clock-4.33 {clock scan, relative minutes} {
275     clock scan "now -1 minute" -base 946627200
276 } 946627140
277 test clock-4.34 {clock scan, day of week} {
278     clock format [clock scan "wednesday" -base [clock scan 20000112]] \
279             -format {%b %d, %Y}
280 } "Jan 12, 2000"
281 test clock-4.35 {clock scan, next day of week} {
282     clock format [clock scan "next wednesday" -base [clock scan 20000112]] \
283             -format {%b %d, %Y}
284 } "Jan 19, 2000"
285 test clock-4.36 {clock scan, day of week} {
286     clock format [clock scan "thursday" -base [clock scan 20000112]] \
287             -format {%b %d, %Y}
288 } "Jan 13, 2000"
289 test clock-4.37 {clock scan, next day of week} {
290     clock format [clock scan "next thursday" -base [clock scan 20000112]] \
291             -format {%b %d, %Y}
292 } "Jan 20, 2000"
293
294 # weekday specification and base.
295 test clock-4.38 {2nd monday in november} {
296     set res {}
297     foreach i {91 92 93 94 95 96} {
298       set nov8th [clock scan 11/8/$i]
299       set monday [clock scan monday -base $nov8th]
300       lappend res [clock format $monday -format %Y-%m-%d]
301     }
302     set res
303 } {1991-11-11 1992-11-09 1993-11-08 1994-11-14 1995-11-13 1996-11-11}
304 test clock-4.39 {2nd monday in november (2nd try)} {
305     set res {}
306     foreach i {91 92 93 94 95 96} {
307       set nov1th [clock scan 11/1/$i]
308       set monday [clock scan "2 monday" -base $nov1th]
309       lappend res [clock format $monday -format %Y-%m-%d]
310     }
311     set res
312 } {1991-11-11 1992-11-09 1993-11-08 1994-11-14 1995-11-13 1996-11-11}
313 test clock-4.40 {last monday in november} {
314     set res {}
315     foreach i {91 92 93 94 95 96} {
316       set dec1th [clock scan 12/1/$i]
317       set monday [clock scan "monday 1 week ago" -base $dec1th]
318       lappend res [clock format $monday -format %Y-%m-%d]
319     }
320     set res
321 } {1991-11-25 1992-11-30 1993-11-29 1994-11-28 1995-11-27 1996-11-25}
322
323 test clock-4.40 {2nd monday in november} knownBug {
324     set res {}
325     foreach i {91 92 93 94 95 96} {
326       set nov8th [clock scan 11/8/$i -gmt 1]
327       set monday [clock scan monday -base $nov8th -gmt 1]
328       lappend res [clock format $monday -format %Y-%m-%d -gmt 1]
329     }
330     set res
331 } {1991-11-11 1992-11-09 1993-11-08 1994-11-14 1995-11-13 1996-11-11}
332 test clock-4.41 {2nd monday in november (2nd try)} knownBug {
333     set res {}
334     foreach i {91 92 93 94 95 96} {
335       set nov1th [clock scan 11/1/$i -gmt 1]
336       set monday [clock scan "2 monday" -base $nov1th -gmt 1]
337       lappend res [clock format $monday -format %Y-%m-%d -gmt 1]
338     }
339     set res
340 } {1991-11-11 1992-11-09 1993-11-08 1994-11-14 1995-11-13 1996-11-11}
341 test clock-4.40 {last monday in november} knownBug {
342     set res {}
343     foreach i {91 92 93 94 95 96} {
344       set dec1th [clock scan 12/1/$i -gmt 1]
345       set monday [clock scan "monday 1 week ago" -base $dec1th -gmt 1]
346       lappend res [clock format $monday -format %Y-%m-%d -gmt 1]
347     }
348     set res
349 } {1991-11-25 1992-11-30 1993-11-29 1994-11-28 1995-11-27 1996-11-25}
350 test clock-4.41 {ago with multiple relative units} {
351     set base [clock scan "12/31/1999 00:00:00"]
352     set res [clock scan "2 days 2 hours ago" -base $base]
353     expr {$base - $res}
354 } 180000
355
356 # clock seconds
357 test clock-5.1 {clock seconds tests} {
358     expr [clock seconds]+1
359     concat {}
360 } {}
361 test clock-5.2 {clock seconds tests} {
362     list [catch {clock seconds foo} msg] $msg
363 } {1 {wrong # args: should be "clock seconds"}}
364 test clock-5.3 {clock seconds tests} {
365     set start [clock seconds]
366     after 2000
367     set end [clock seconds]
368     expr "$end > $start"
369 } {1}
370
371 # The following dates check certain roll over dates
372 set day [expr 24 * 60 * 60]
373 test clock-6.1 {clock roll over dates} {
374     set time [clock scan "12/31/1998" -gmt true]
375     clock format [expr $time + $day] -format {%b %d,%Y %H:%M GMT} -gmt true
376 } {Jan 01,1999 00:00 GMT}
377 test clock-6.2 {clock roll over dates} {
378     set time [clock scan "12/31/1999" -gmt true]
379     clock format [expr $time + $day] -format {%b %d,%Y %H:%M GMT} -gmt true
380 } {Jan 01,2000 00:00 GMT}
381 test clock-6.3 {clock roll over dates} {
382     set time [clock scan "2/28/2000" -gmt true]
383     clock format [expr $time + $day] -format {%b %d,%Y %H:%M GMT} -gmt true
384 } {Feb 29,2000 00:00 GMT}
385 test clock-6.4 {clock roll over dates} {
386     set time [clock scan "2/29/2000" -gmt true]
387     clock format [expr $time + $day] -format {%b %d,%Y %H:%M GMT} -gmt true
388 } {Mar 01,2000 00:00 GMT}
389 test clock-6.5 {clock roll over dates} {
390     set time [clock scan "January 1, 2000" -gmt true]
391     clock format $time -format %A -gmt true
392 } {Saturday}
393 test clock-6.6 {clock roll over dates} {
394     set time [clock scan "January 1, 2000" -gmt true]
395     clock format $time -format %j -gmt true
396 } {001}
397 test clock-6.7 {clock roll over dates} {
398     set time [clock scan "February 29, 2000" -gmt true]
399     clock format $time -format %A -gmt true
400 } {Tuesday}
401 test clock-6.8 {clock roll over dates} {
402     set time [clock scan "February 29, 2000" -gmt true]
403     clock format $time -format %j -gmt true
404 } {060}
405 test clock-6.9 {clock roll over dates} {
406     set time [clock scan "March 1, 2000" -gmt true]
407     clock format $time -format %A -gmt true
408 } {Wednesday}
409 test clock-6.10 {clock roll over dates} {
410     set time [clock scan "March 1, 2000" -gmt true]
411     clock format $time -format %j -gmt true
412 } {061}
413 test clock-6.11 {clock roll over dates} {
414     set time [clock scan "March 1, 2001" -gmt true]
415     clock format $time -format %j -gmt true
416 } {060}
417
418 test clock-7.1 {clock scan next monthname} {
419     clock format [clock scan "next june" -base [clock scan "june 1, 2000"]] \
420             -format %m.%Y
421 } "06.2001"
422 test clock-7.2 {clock scan next monthname} {
423     clock format [clock scan "next july" -base [clock scan "june 1, 2000"]] \
424             -format %m.%Y
425 } "07.2000"
426 test clock-7.3 {clock scan next monthname} {
427     clock format [clock scan "next may" -base [clock scan "june 1, 2000"]] \
428             -format %m.%Y
429 } "05.2001"
430
431 # We use 5am PST, 31-12-1999 as the base for these scans because irrespective
432 # of your local timezone it should always give us times on December 31
433 set 5amPST 946645200
434 test clock-8.1 {clock scan midnight/gmt range bug 413397} {
435     set fmt "%m/%d"
436     list [clock format [clock scan year -base $5amPST -gmt 0] -format $fmt] \
437             [clock format [clock scan year -base $5amPST -gmt 1] -format $fmt]
438 } {12/31 12/31}
439
440 set ::tcltest::testConstraints(needPST) [expr {
441     [regexp {^(Pacific.*|P[DS]T)$} [clock format 1 -format %Z]]
442     && ([clock format 1 -format %s] != "%s")
443 }]
444 test clock-9.1 {%s gmt testing} {needPST} {
445     # We need PST to guarantee the difference value below, and %s isn't
446     # valid on all OSes (like Solaris).
447     set s 100000
448     set a [clock format $s -format %s -gmt 0]
449     set b [clock format $s -format %s -gmt 1]
450     # This should be the offset in seconds between current locale and GMT.
451     # This didn't seem to be correctly on Windows until the fix for
452     # Bug #559376, which fiddled with env(TZ) when -gmt 1 was used.
453     # It's hard-coded to check P[SD]T now. (8 hours)
454     set c [expr {$b-$a}]
455 } {28800}
456
457 # cleanup
458 ::tcltest::cleanupTests
459 return