Giovanni Mascellani : kernel32/tests: Test for quirks in a few different time zones.
Alexandre Julliard
julliard at winehq.org
Tue Apr 27 16:08:58 CDT 2021
Module: wine
Branch: master
Commit: d1b80f4d635b01498e4d852cb3d6f314983682b8
URL: https://source.winehq.org/git/wine.git/?a=commit;h=d1b80f4d635b01498e4d852cb3d6f314983682b8
Author: Giovanni Mascellani <gmascellani at codeweavers.com>
Date: Mon Apr 12 11:17:16 2021 +0200
kernel32/tests: Test for quirks in a few different time zones.
Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/tests/time.c | 127 ++++++++++++++++++++++++++++++++++-----------
1 file changed, 97 insertions(+), 30 deletions(-)
diff --git a/dlls/kernel32/tests/time.c b/dlls/kernel32/tests/time.c
index 28312bac3ce..7283075dc5e 100644
--- a/dlls/kernel32/tests/time.c
+++ b/dlls/kernel32/tests/time.c
@@ -894,6 +894,9 @@ static WORD day_of_month(const SYSTEMTIME* systemtime, WORD year)
if (systemtime->wYear != 0)
return systemtime->wDay;
+ if (systemtime->wMonth == 0)
+ return 0;
+
first_of_month.wYear = year;
first_of_month.wMonth = systemtime->wMonth;
first_of_month.wDay = 1;
@@ -926,13 +929,37 @@ static WORD day_of_month(const SYSTEMTIME* systemtime, WORD year)
static void test_GetTimeZoneInformationForYear(void)
{
- BOOL ret;
+ BOOL ret, broken_test = FALSE;
SYSTEMTIME systemtime;
TIME_ZONE_INFORMATION local_tzinfo, tzinfo, tzinfo2;
DYNAMIC_TIME_ZONE_INFORMATION dyn_tzinfo;
- static const WCHAR std_tzname[] = {'G','r','e','e','n','l','a','n','d',' ','S','t','a','n','d','a','r','d',' ','T','i','m','e',0};
- static const WCHAR dlt_tzname[] = {'G','r','e','e','n','l','a','n','d',' ','D','a','y','l','i','g','h','t',' ','T','i','m','e',0};
WORD std_day, dlt_day;
+ unsigned i;
+ static const struct
+ {
+ const WCHAR *tzname;
+ USHORT year;
+ LONG bias, std_bias, dlt_bias;
+ WORD std_month, std_day, dlt_month, dlt_day;
+ int tzinfo_todo : 1, bias_todo : 1, std_bias_todo : 1, dlt_bias_todo : 1;
+ int std_month_todo : 1, std_day_todo : 1, dlt_month_todo : 1, dlt_day_todo : 1;
+ }
+ test_data[] =
+ {
+ { L"Greenland Standard Time", 2015, 180, 0, -60, 10, 24, 3, 28 },
+ { L"Greenland Standard Time", 2016, 180, 0, -60, 10, 29, 3, 26 },
+ { L"Greenland Standard Time", 2017, 180, 0, -60, 10, 28, 3, 25 },
+ { L"Easter Island Standard Time", 2014, 360, 0, -60, 4, 26, 9, 6, 0, 1, 0, 1, 1, 1, 1, 1 },
+ { L"Easter Island Standard Time", 2015, 300, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 },
+ { L"Easter Island Standard Time", 2016, 360, 0, -60, 5, 14, 8, 13, 0, 1, 0, 1, 1, 1, 1, 1 },
+ { L"Egypt Standard Time", 2013, -120, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 },
+ { L"Egypt Standard Time", 2014, -120, 0, -60, 9, 25, 5, 15, 0, 0, 0, 0, 1, 1, 1, 1 },
+ { L"Egypt Standard Time", 2015, -120, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 },
+ { L"Egypt Standard Time", 2016, -120, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 },
+ { L"Altai Standard Time", 2016, -420, 0, 60, 3, 27, 1, 1, 1 },
+ { L"Altai Standard Time", 2017, -420, 0, -60, 0, 0, 0, 0, 1 },
+ { L"Altai Standard Time", 2018, -420, 0, -60, 0, 0, 0, 0, 1 },
+ };
if (!pGetTimeZoneInformationForYear || !pGetDynamicTimeZoneInformation)
{
@@ -971,38 +998,78 @@ static void test_GetTimeZoneInformationForYear(void)
ok(tzinfo.DaylightBias == local_tzinfo.DaylightBias, "Expected DaylightBias %d, got %d\n", local_tzinfo.DaylightBias, tzinfo.DaylightBias);
memset(&dyn_tzinfo, 0xaa, sizeof(dyn_tzinfo));
- lstrcpyW(dyn_tzinfo.TimeZoneKeyName, std_tzname);
- dyn_tzinfo.DynamicDaylightTimeDisabled = FALSE;
-
+ lstrcpyW(dyn_tzinfo.TimeZoneKeyName, L"Greenland Daylight Time");
+ SetLastError(0xdeadbeef);
ret = pGetTimeZoneInformationForYear(2015, &dyn_tzinfo, &tzinfo);
- ok(ret == TRUE, "GetTimeZoneInformationForYear failed, err %u\n", GetLastError());
- ok(tzinfo.Bias == 180, "Expected Bias 180, got %d\n", tzinfo.Bias);
- ok(tzinfo.StandardDate.wMonth == 10, "Expected standard month 10, got %d\n", tzinfo.StandardDate.wMonth);
- std_day = day_of_month(&tzinfo.StandardDate, 2015);
- ok(std_day == 24, "Expected standard day 24, got %d\n", std_day);
- ok(tzinfo.StandardBias == 0, "Expected StandardBias 0, got %d\n", tzinfo.StandardBias);
- ok(tzinfo.DaylightDate.wMonth == 3, "Expected daylight month 3, got %d\n", tzinfo.DaylightDate.wMonth);
- dlt_day = day_of_month(&tzinfo.DaylightDate, 2015);
- ok(dlt_day == 28, "Expected daylight day 28, got %d\n", dlt_day);
- ok(tzinfo.DaylightBias == -60, "Expected DaylightBias -60, got %d\n", tzinfo.DaylightBias);
-
- ret = pGetTimeZoneInformationForYear(2016, &dyn_tzinfo, &tzinfo2);
- ok(ret == TRUE, "GetTimeZoneInformationForYear failed, err %u\n", GetLastError());
- ok(!lstrcmpW(tzinfo.StandardName, tzinfo2.StandardName),
- "Got differing StandardName values %s and %s\n",
- wine_dbgstr_w(tzinfo.StandardName), wine_dbgstr_w(tzinfo2.StandardName));
- ok(!lstrcmpW(tzinfo.DaylightName, tzinfo2.DaylightName),
- "Got differing DaylightName values %s and %s\n",
- wine_dbgstr_w(tzinfo.DaylightName), wine_dbgstr_w(tzinfo2.DaylightName));
+ if (ret)
+ broken_test = TRUE;
+ ok((ret == FALSE && GetLastError() == ERROR_FILE_NOT_FOUND) ||
+ broken(broken_test) /* vista,7 */,
+ "GetTimeZoneInformationForYear err %u\n", GetLastError());
memset(&dyn_tzinfo, 0xaa, sizeof(dyn_tzinfo));
- lstrcpyW(dyn_tzinfo.TimeZoneKeyName, dlt_tzname);
-
+ lstrcpyW(dyn_tzinfo.TimeZoneKeyName, L"Altai Standard Time");
SetLastError(0xdeadbeef);
ret = pGetTimeZoneInformationForYear(2015, &dyn_tzinfo, &tzinfo);
- ok((ret == FALSE && GetLastError() == ERROR_FILE_NOT_FOUND) ||
- broken(ret == TRUE) /* vista,7 */,
- "GetTimeZoneInformationForYear err %u\n", GetLastError());
+ if (!ret && GetLastError() == ERROR_FILE_NOT_FOUND)
+ broken_test = TRUE;
+ todo_wine ok(ret == TRUE || broken(broken_test) /* before 10 1809 */,
+ "GetTimeZoneInformationForYear err %u\n", GetLastError());
+
+ if (broken(broken_test))
+ {
+ win_skip("Old Windows version\n");
+ return;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(test_data); i++)
+ {
+ memset(&dyn_tzinfo, 0xaa, sizeof(dyn_tzinfo));
+ memset(&tzinfo, 0xbb, sizeof(tzinfo));
+ lstrcpyW(dyn_tzinfo.TimeZoneKeyName, test_data[i].tzname);
+ dyn_tzinfo.DynamicDaylightTimeDisabled = FALSE;
+
+ ret = pGetTimeZoneInformationForYear(test_data[i].year, &dyn_tzinfo, &tzinfo);
+ todo_wine_if(test_data[i].tzinfo_todo)
+ ok(ret == TRUE, "GetTimeZoneInformationForYear failed, err %u, for %s\n", GetLastError(), wine_dbgstr_w(test_data[i].tzname));
+ if (!ret)
+ continue;
+ todo_wine_if(test_data[i].bias_todo)
+ ok(tzinfo.Bias == test_data[i].bias, "Expected bias %d, got %d, for %s\n",
+ test_data[i].bias, tzinfo.Bias, wine_dbgstr_w(test_data[i].tzname));
+ todo_wine_if(test_data[i].std_month_todo)
+ ok(tzinfo.StandardDate.wMonth == test_data[i].std_month, "Expected standard month %d, got %d, for %s\n",
+ test_data[i].std_month, tzinfo.StandardDate.wMonth, wine_dbgstr_w(test_data[i].tzname));
+ std_day = day_of_month(&tzinfo.StandardDate, test_data[i].year);
+ todo_wine_if(test_data[i].std_day_todo)
+ ok(std_day == test_data[i].std_day, "Expected standard day %d, got %d, for %s\n",
+ test_data[i].std_day, std_day, wine_dbgstr_w(test_data[i].tzname));
+ todo_wine_if(test_data[i].std_bias_todo)
+ ok(tzinfo.StandardBias == test_data[i].std_bias, "Expected standard bias %d, got %d, for %s\n",
+ test_data[i].std_bias, tzinfo.StandardBias, wine_dbgstr_w(test_data[i].tzname));
+ todo_wine_if(test_data[i].dlt_month_todo)
+ ok(tzinfo.DaylightDate.wMonth == test_data[i].dlt_month, "Expected daylight month %d, got %d, for %s\n",
+ test_data[i].dlt_month, tzinfo.DaylightDate.wMonth, wine_dbgstr_w(test_data[i].tzname));
+ dlt_day = day_of_month(&tzinfo.DaylightDate, test_data[i].year);
+ todo_wine_if(test_data[i].dlt_day_todo)
+ ok(dlt_day == test_data[i].dlt_day, "Expected daylight day %d, got %d, for %s\n",
+ test_data[i].dlt_day, dlt_day, wine_dbgstr_w(test_data[i].tzname));
+ todo_wine_if(test_data[i].dlt_bias_todo)
+ ok(tzinfo.DaylightBias == test_data[i].dlt_bias, "Expected daylight bias %d, got %d, for %s\n",
+ test_data[i].dlt_bias, tzinfo.DaylightBias, wine_dbgstr_w(test_data[i].tzname));
+
+ if (i > 0 && test_data[i-1].tzname == test_data[i].tzname)
+ {
+ ok(!lstrcmpW(tzinfo.StandardName, tzinfo2.StandardName),
+ "Got differing StandardName values %s and %s\n",
+ wine_dbgstr_w(tzinfo.StandardName), wine_dbgstr_w(tzinfo2.StandardName));
+ ok(!lstrcmpW(tzinfo.DaylightName, tzinfo2.DaylightName),
+ "Got differing DaylightName values %s and %s\n",
+ wine_dbgstr_w(tzinfo.DaylightName), wine_dbgstr_w(tzinfo2.DaylightName));
+ }
+
+ memcpy(&tzinfo2, &tzinfo, sizeof(tzinfo2));
+ }
}
static void test_GetTickCount(void)
More information about the wine-cvs
mailing list