Corrected tests around non-portable 'isdst' in dates

The field 'isdst' in date tables may not be present; portable tests
should not assume it is.
This commit is contained in:
Roberto Ierusalimschy 2019-04-09 18:44:13 -03:00
parent 65d1aa7a77
commit 0f028b9008
1 changed files with 7 additions and 3 deletions

View File

@ -777,7 +777,7 @@ local t = os.time()
D = os.date("*t", t)
load(os.date([[assert(D.year==%Y and D.month==%m and D.day==%d and
D.hour==%H and D.min==%M and D.sec==%S and
D.wday==%w+1 and D.yday==%j and type(D.isdst) == 'boolean')]], t))()
D.wday==%w+1 and D.yday==%j)]], t))()
checkerr("invalid conversion specifier", os.date, "%")
checkerr("invalid conversion specifier", os.date, "%9")
@ -827,12 +827,16 @@ end
D = os.date("!*t", t)
load(os.date([[!assert(D.year==%Y and D.month==%m and D.day==%d and
D.hour==%H and D.min==%M and D.sec==%S and
D.wday==%w+1 and D.yday==%j and type(D.isdst) == 'boolean')]], t))()
D.wday==%w+1 and D.yday==%j)]], t))()
do
local D = os.date("*t")
local t = os.time(D)
assert(type(D.isdst) == 'boolean')
if not D.isdst then
print("no daylight saving information")
else
assert(type(D.isdst) == 'boolean')
end
D.isdst = nil
local t1 = os.time(D)
assert(t == t1) -- if isdst is absent uses correct default