[PATCH v4] vbscript/tests: Fix test for WeekDayName(foo, bar, 0).
Alex Henrie
alexhenrie24 at gmail.com
Thu Nov 2 08:12:21 CDT 2017
Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
The original test failed on SUBLANG_ENGLISH_UK and SUBLANG_ENGLISH_AUS,
where the first day of the week is Monday. I changed the test to check
against the correct first day of the week no matter what the locale is.
v2: Stopped using GetProcAddress for GetThreadUILanguage and
GetUserDefaultUILanguage.
v3: Brought back GetProcAddress for GetThreadUILanguage and fixed the
calculation of first_day_of_week.
v4: Rely on GetUserDefaultUILanguage if GetThreadUILanguage is not
available, and don't try to close the kernel32 module handle.
---
dlls/vbscript/tests/api.vbs | 4 +++-
dlls/vbscript/tests/run.c | 44 ++++++++++++++++++++++++++------------------
2 files changed, 29 insertions(+), 19 deletions(-)
diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs
index 95ef84f6c9..baa0553225 100644
--- a/dlls/vbscript/tests/api.vbs
+++ b/dlls/vbscript/tests/api.vbs
@@ -594,7 +594,6 @@ if isEnglishLang then
Call ok(WeekDayName(1, false) = "Sunday", "WeekDayName(1, false) = " & WeekDayName(1, false))
Call ok(WeekDayName(1, true) = "Sun", "WeekDayName(1, true) = " & WeekDayName(1, true))
Call ok(WeekDayName(1, 10) = "Sun", "WeekDayName(1, 10) = " & WeekDayName(1, 10))
- Call ok(WeekDayName(1, true, 0) = "Sun", "WeekDayName(1, true, 0) = " & WeekDayName(1, true, 0))
Call ok(WeekDayName(1, true, 2) = "Mon", "WeekDayName(1, true, 2) = " & WeekDayName(1, true, 2))
Call ok(WeekDayName(1, true, 2.5) = "Mon", "WeekDayName(1, true, 2.5) = " & WeekDayName(1, true, 2.5))
Call ok(WeekDayName(1, true, 1.5) = "Mon", "WeekDayName(1, true, 1.5) = " & WeekDayName(1, true, 1.5))
@@ -609,6 +608,9 @@ if isEnglishLang then
Call ok(MonthName(12, true) = "Dec", "MonthName(12, true) = " & MonthName(12, true))
end if
+Call ok(WeekDayName(1, true, 0) = WeekDayName(1, true, firstDayOfWeek), _
+ "WeekDayName(1, true, 0) = " & WeekDayName(1, true, 0))
+
Call ok(getVT(Now()) = "VT_DATE", "getVT(Now()) = " & getVT(Now()))
Call ok(vbOKOnly = 0, "vbOKOnly = " & vbOKOnly)
diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c
index 81b1ced463..7c97db2a9b 100644
--- a/dlls/vbscript/tests/run.c
+++ b/dlls/vbscript/tests/run.c
@@ -123,6 +123,7 @@ DEFINE_EXPECT(OnScriptError);
#define DISPID_GLOBAL_LETOBJ 1018
#define DISPID_GLOBAL_SETOBJ 1019
#define DISPID_GLOBAL_TODO_WINE_OK 1020
+#define DISPID_GLOBAL_WEEKSTARTDAY 1021
#define DISPID_TESTOBJ_PROPGET 2000
#define DISPID_TESTOBJ_PROPPUT 2001
@@ -136,6 +137,7 @@ static const WCHAR testW[] = {'t','e','s','t',0};
static const WCHAR emptyW[] = {0};
static BOOL strict_dispid_check, is_english, allow_ui;
+static int first_day_of_week;
static const char *test_name = "(null)";
static int test_counter;
static SCRIPTUICHANDLING uic_handling = SCRIPTUICHANDLING_NOUIERROR;
@@ -204,27 +206,23 @@ static const char *vt2a(VARIANT *v)
}
}
-/* Returns true if the user interface is in English. Note that this does not
- * presume of the formatting of dates, numbers, etc.
+/* Sets is_english to true if the user interface is in English. Note that this
+ * does not presume the formatting of dates, numbers, etc.
+ * Sets first_day_of_week to 1 if Sunday, 2 if Monday, and so on.
*/
-static BOOL is_lang_english(void)
+static void detect_locale(void)
{
- static HMODULE hkernel32 = NULL;
- static LANGID (WINAPI *pGetThreadUILanguage)(void) = NULL;
- static LANGID (WINAPI *pGetUserDefaultUILanguage)(void) = NULL;
+ HMODULE kernel32 = GetModuleHandleA("kernel32.dll");
+ LANGID (WINAPI *pGetThreadUILanguage)(void) = (void*)GetProcAddress(kernel32, "GetThreadUILanguage");
- if (!hkernel32)
- {
- hkernel32 = GetModuleHandleA("kernel32.dll");
- pGetThreadUILanguage = (void*)GetProcAddress(hkernel32, "GetThreadUILanguage");
- pGetUserDefaultUILanguage = (void*)GetProcAddress(hkernel32, "GetUserDefaultUILanguage");
- }
- if (pGetThreadUILanguage && PRIMARYLANGID(pGetThreadUILanguage()) != LANG_ENGLISH)
- return FALSE;
- if (pGetUserDefaultUILanguage && PRIMARYLANGID(pGetUserDefaultUILanguage()) != LANG_ENGLISH)
- return FALSE;
+ is_english = ((!pGetThreadUILanguage || PRIMARYLANGID(pGetThreadUILanguage()) == LANG_ENGLISH) &&
+ PRIMARYLANGID(GetUserDefaultUILanguage()) == LANG_ENGLISH &&
+ PRIMARYLANGID(GetUserDefaultLangID()) == LANG_ENGLISH);
- return PRIMARYLANGID(GetUserDefaultLangID()) == LANG_ENGLISH;
+ GetLocaleInfoA(pGetThreadUILanguage ? pGetThreadUILanguage() : GetUserDefaultUILanguage(),
+ LOCALE_IFIRSTDAYOFWEEK | LOCALE_RETURN_NUMBER,
+ (void*)&first_day_of_week, sizeof(first_day_of_week));
+ first_day_of_week = 1 + (first_day_of_week + 1) % 7;
}
static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
@@ -1010,6 +1008,11 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD
*pid = DISPID_GLOBAL_ISENGLANG;
return S_OK;
}
+ if(!strcmp_wa(bstrName, "firstDayOfWeek")) {
+ test_grfdex(grfdex, fdexNameCaseInsensitive);
+ *pid = DISPID_GLOBAL_WEEKSTARTDAY;
+ return S_OK;
+ }
if(!strcmp_wa(bstrName, "testObj")) {
test_grfdex(grfdex, fdexNameCaseInsensitive);
*pid = DISPID_GLOBAL_TESTOBJ;
@@ -1183,6 +1186,11 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
V_BOOL(pvarRes) = is_english ? VARIANT_TRUE : VARIANT_FALSE;
return S_OK;
+ case DISPID_GLOBAL_WEEKSTARTDAY:
+ V_VT(pvarRes) = VT_I4;
+ V_I4(pvarRes) = first_day_of_week;
+ return S_OK;
+
case DISPID_GLOBAL_VBVAR:
CHECK_EXPECT(global_vbvar_i);
@@ -2355,7 +2363,7 @@ START_TEST(run)
int argc;
char **argv;
- is_english = is_lang_english();
+ detect_locale();
if(!is_english)
skip("Skipping some tests in non-English locale\n");
--
2.14.2
More information about the wine-patches
mailing list