Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
a68059f4
Commit
a68059f4
authored
Jul 29, 2007
by
Dmitry Timoshkov
Committed by
Alexandre Julliard
Jul 30, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernel32: Add more tests for time zone info.
parent
36720b49
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
121 additions
and
16 deletions
+121
-16
time.c
dlls/kernel32/tests/time.c
+121
-16
No files found.
dlls/kernel32/tests/time.c
View file @
a68059f4
...
...
@@ -2,6 +2,7 @@
* Unit test suite for time functions
*
* Copyright 2004 Uwe Bonnes
* Copyright 2007 Dmitry Timoshkov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
...
...
@@ -21,6 +22,9 @@
#include "wine/test.h"
#include "winbase.h"
static
BOOL
(
WINAPI
*
pTzSpecificLocalTimeToSystemTime
)(
LPTIME_ZONE_INFORMATION
,
LPSYSTEMTIME
,
LPSYSTEMTIME
);
static
BOOL
(
WINAPI
*
pSystemTimeToTzSpecificLocalTime
)(
LPTIME_ZONE_INFORMATION
,
LPSYSTEMTIME
,
LPSYSTEMTIME
);
#define SECSPERMIN 60
#define SECSPERDAY 86400
/* 1601 to 1970 is 369 years plus 89 leap days */
...
...
@@ -181,12 +185,86 @@ static void test_invalid_arg(void)
ok
(
!
SystemTimeToFileTime
(
&
st
,
&
ft
),
"bad minute
\n
"
);
}
static
LONGLONG
system_time_to_minutes
(
const
SYSTEMTIME
*
st
)
{
BOOL
ret
;
FILETIME
ft
;
LONGLONG
minutes
;
SetLastError
(
0xdeadbeef
);
ret
=
SystemTimeToFileTime
(
st
,
&
ft
);
ok
(
ret
,
"SystemTimeToFileTime error %u
\n
"
,
GetLastError
());
minutes
=
((
LONGLONG
)
ft
.
dwHighDateTime
<<
32
)
+
ft
.
dwLowDateTime
;
minutes
/=
(
LONGLONG
)
600000000
;
/* convert to minutes */
return
minutes
;
}
static
LONG
get_tz_bias
(
const
TIME_ZONE_INFORMATION
*
tzinfo
,
DWORD
tz_id
)
{
switch
(
tz_id
)
{
case
TIME_ZONE_ID_DAYLIGHT
:
return
tzinfo
->
DaylightBias
;
case
TIME_ZONE_ID_STANDARD
:
return
tzinfo
->
StandardBias
;
default:
trace
(
"unknown time zone id %d
\n
"
,
tz_id
);
/* fall through */
case
TIME_ZONE_ID_UNKNOWN
:
return
0
;
}
}
static
void
test_GetTimeZoneInformation
(
void
)
{
TIME_ZONE_INFORMATION
tzinfo
,
tzinfo1
;
DWORD
res
=
GetTimeZoneInformation
(
&
tzinfo
);
ok
(
res
!=
TIME_ZONE_ID_INVALID
,
"GetTimeZoneInformation failed
\n
"
);
BOOL
res
;
DWORD
tz_id
;
SYSTEMTIME
st
,
current
,
utc
,
local
;
FILETIME
l_ft
,
s_ft
;
LONGLONG
l_time
,
s_time
;
LONG
diff
;
GetSystemTime
(
&
st
);
s_time
=
system_time_to_minutes
(
&
st
);
SetLastError
(
0xdeadbeef
);
res
=
SystemTimeToFileTime
(
&
st
,
&
s_ft
);
ok
(
res
,
"SystemTimeToFileTime error %u
\n
"
,
GetLastError
());
SetLastError
(
0xdeadbeef
);
res
=
FileTimeToLocalFileTime
(
&
s_ft
,
&
l_ft
);
ok
(
res
,
"FileTimeToLocalFileTime error %u
\n
"
,
GetLastError
());
SetLastError
(
0xdeadbeef
);
res
=
FileTimeToSystemTime
(
&
l_ft
,
&
local
);
ok
(
res
,
"FileTimeToSystemTime error %u
\n
"
,
GetLastError
());
l_time
=
system_time_to_minutes
(
&
local
);
tz_id
=
GetTimeZoneInformation
(
&
tzinfo
);
ok
(
tz_id
!=
TIME_ZONE_ID_INVALID
,
"GetTimeZoneInformation failed
\n
"
);
trace
(
"bias %d
\n
"
,
tzinfo
.
Bias
);
trace
(
"standard (d/m/y): %u/%02u/%04u day of week %u %u:%02u:%02u.%03u bias %d
\n
"
,
tzinfo
.
StandardDate
.
wDay
,
tzinfo
.
StandardDate
.
wMonth
,
tzinfo
.
StandardDate
.
wYear
,
tzinfo
.
StandardDate
.
wDayOfWeek
,
tzinfo
.
StandardDate
.
wHour
,
tzinfo
.
StandardDate
.
wMinute
,
tzinfo
.
StandardDate
.
wSecond
,
tzinfo
.
StandardDate
.
wMilliseconds
,
tzinfo
.
StandardBias
);
trace
(
"daylight (d/m/y): %u/%02u/%04u day of week %u %u:%02u:%02u.%03u bias %d
\n
"
,
tzinfo
.
DaylightDate
.
wDay
,
tzinfo
.
DaylightDate
.
wMonth
,
tzinfo
.
DaylightDate
.
wYear
,
tzinfo
.
DaylightDate
.
wDayOfWeek
,
tzinfo
.
DaylightDate
.
wHour
,
tzinfo
.
DaylightDate
.
wMinute
,
tzinfo
.
DaylightDate
.
wSecond
,
tzinfo
.
DaylightDate
.
wMilliseconds
,
tzinfo
.
DaylightBias
);
diff
=
(
LONG
)(
s_time
-
l_time
);
ok
(
diff
==
tzinfo
.
Bias
+
get_tz_bias
(
&
tzinfo
,
tz_id
),
"system/local diff %d != tz bias %d
\n
"
,
diff
,
tzinfo
.
Bias
+
get_tz_bias
(
&
tzinfo
,
tz_id
));
ok
(
SetEnvironmentVariableA
(
"TZ"
,
"GMT0"
)
!=
0
,
"SetEnvironmentVariableA failed
\n
"
);
res
=
GetTimeZoneInformation
(
&
tzinfo1
);
...
...
@@ -198,7 +276,37 @@ static void test_GetTimeZoneInformation(void)
"Bias influenced by TZ variable
\n
"
);
ok
(
SetEnvironmentVariableA
(
"TZ"
,
NULL
)
!=
0
,
"SetEnvironmentVariableA failed
\n
"
);
diff
=
get_tz_bias
(
&
tzinfo
,
tz_id
);
utc
=
st
;
SetLastError
(
0xdeadbeef
);
res
=
pSystemTimeToTzSpecificLocalTime
(
&
tzinfo
,
&
utc
,
&
current
);
ok
(
res
,
"SystemTimeToTzSpecificLocalTime error %u
\n
"
,
GetLastError
());
s_time
=
system_time_to_minutes
(
&
current
);
tzinfo
.
StandardBias
-=
123
;
tzinfo
.
DaylightBias
+=
456
;
res
=
pSystemTimeToTzSpecificLocalTime
(
&
tzinfo
,
&
utc
,
&
local
);
ok
(
res
,
"SystemTimeToTzSpecificLocalTime error %u
\n
"
,
GetLastError
());
l_time
=
system_time_to_minutes
(
&
local
);
ok
(
l_time
-
s_time
==
diff
-
get_tz_bias
(
&
tzinfo
,
tz_id
),
"got %d, expected %d
\n
"
,
(
LONG
)(
l_time
-
s_time
),
diff
-
get_tz_bias
(
&
tzinfo
,
tz_id
));
/* pretend that there is no transition dates */
tzinfo
.
DaylightDate
.
wDay
=
0
;
tzinfo
.
DaylightDate
.
wMonth
=
0
;
tzinfo
.
DaylightDate
.
wYear
=
0
;
tzinfo
.
StandardDate
.
wDay
=
0
;
tzinfo
.
StandardDate
.
wMonth
=
0
;
tzinfo
.
StandardDate
.
wYear
=
0
;
res
=
pSystemTimeToTzSpecificLocalTime
(
&
tzinfo
,
&
utc
,
&
local
);
ok
(
res
,
"SystemTimeToTzSpecificLocalTime error %u
\n
"
,
GetLastError
());
l_time
=
system_time_to_minutes
(
&
local
);
ok
(
l_time
-
s_time
==
diff
,
"got %d, expected %d
\n
"
,
(
LONG
)(
l_time
-
s_time
),
diff
);
}
static
void
test_FileTimeToSystemTime
(
void
)
...
...
@@ -275,12 +383,6 @@ static void test_FileTimeToLocalFileTime(void)
"SetEnvironmentVariableA failed
\n
"
);
}
/* test TzSpecificLocalTimeToSystemTime and SystemTimeToTzSpecificLocalTime
* these are in winXP and later */
typedef
HANDLE
(
WINAPI
*
fnTzSpecificLocalTimeToSystemTime
)(
LPTIME_ZONE_INFORMATION
,
LPSYSTEMTIME
,
LPSYSTEMTIME
);
typedef
HANDLE
(
WINAPI
*
fnSystemTimeToTzSpecificLocalTime
)(
LPTIME_ZONE_INFORMATION
,
LPSYSTEMTIME
,
LPSYSTEMTIME
);
typedef
struct
{
int
nr
;
/* test case number for easier lookup */
TIME_ZONE_INFORMATION
*
ptz
;
/* ptr to timezone */
...
...
@@ -290,17 +392,16 @@ typedef struct {
static
void
test_TzSpecificLocalTimeToSystemTime
(
void
)
{
HMODULE
hKernel
=
GetModuleHandle
(
"kernel32"
);
fnTzSpecificLocalTimeToSystemTime
pTzSpecificLocalTimeToSystemTime
;
fnSystemTimeToTzSpecificLocalTime
pSystemTimeToTzSpecificLocalTime
=
NULL
;
TIME_ZONE_INFORMATION
tzE
,
tzW
,
tzS
;
SYSTEMTIME
result
;
int
i
,
j
,
year
;
pTzSpecificLocalTimeToSystemTime
=
(
fnTzSpecificLocalTimeToSystemTime
)
GetProcAddress
(
hKernel
,
"TzSpecificLocalTimeToSystemTime"
);
if
(
pTzSpecificLocalTimeToSystem
Time
)
pSystemTimeToTzSpecificLocalTime
=
(
fnTzSpecificLocalTimeToSystemTime
)
GetProcAddress
(
hKernel
,
"SystemTimeToTzSpecificLocalTime"
);
if
(
!
pSystemTimeToTzSpecificLocalTime
)
if
(
!
pTzSpecificLocalTimeToSystemTime
||
!
pSystemTimeToTzSpecificLocal
Time
)
{
skip
(
"TzSpecificLocalTimeToSystemTime or SystemTimeToTzSpecificLocalTime not present
\n
"
);
return
;
}
ZeroMemory
(
&
tzE
,
sizeof
(
tzE
));
ZeroMemory
(
&
tzW
,
sizeof
(
tzW
));
ZeroMemory
(
&
tzS
,
sizeof
(
tzS
));
...
...
@@ -473,6 +574,10 @@ static void test_TzSpecificLocalTimeToSystemTime(void)
START_TEST
(
time
)
{
HMODULE
hKernel
=
GetModuleHandle
(
"kernel32"
);
pTzSpecificLocalTimeToSystemTime
=
(
void
*
)
GetProcAddress
(
hKernel
,
"TzSpecificLocalTimeToSystemTime"
);
pSystemTimeToTzSpecificLocalTime
=
(
void
*
)
GetProcAddress
(
hKernel
,
"SystemTimeToTzSpecificLocalTime"
);
test_conversions
();
test_invalid_arg
();
test_GetTimeZoneInformation
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment