vbscript/tests: Some tests require that the user interface be in English.

Francois Gouget fgouget at free.fr
Fri Sep 16 06:09:01 CDT 2011


With MUI versions of Windows checking for the default user language id is insufficient.
---
 dlls/vbscript/tests/lang.vbs |    2 +-
 dlls/vbscript/tests/run.c    |   35 ++++++++++++++++++++++++++---------
 2 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs
index 3511707..867779d 100644
--- a/dlls/vbscript/tests/lang.vbs
+++ b/dlls/vbscript/tests/lang.vbs
@@ -86,7 +86,7 @@ Call ok("ab " & empty = "ab ", """ab"" & empty = " & ("ab " & empty))
 Call ok(1 & 100000 = "1100000", "1 & 100000 = " & (1 & 100000))
 Call ok("ab" & x = "abxx", """ab"" & x = " & ("ab"&x))
 
-if(isEnglishLocale) then
+if(isEnglishLang) then
     Call ok("" & true = "True", """"" & true = " & true)
     Call ok(true & false = "TrueFalse", "true & false = " & (true & false))
 end if
diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c
index d98cf38..6b2ec84 100644
--- a/dlls/vbscript/tests/run.c
+++ b/dlls/vbscript/tests/run.c
@@ -69,7 +69,7 @@ DEFINE_EXPECT(testobj_propput_i);
 #define DISPID_GLOBAL_TRACE         1001
 #define DISPID_GLOBAL_OK            1002
 #define DISPID_GLOBAL_GETVT         1003
-#define DISPID_GLOBAL_ISENGLOC      1004
+#define DISPID_GLOBAL_ISENGLANG     1004
 #define DISPID_GLOBAL_VBVAR         1005
 #define DISPID_GLOBAL_TESTOBJ       1006
 #define DISPID_GLOBAL_ISNULLDISP    1007
@@ -135,10 +135,27 @@ static const char *vt2a(VARIANT *v)
     }
 }
 
-static BOOL is_english(void)
+/* Returns true if the user interface is in English. Note that this does not
+ * presume of the formatting of dates, numbers, etc.
+ */
+static BOOL is_lang_english(void)
 {
-    return PRIMARYLANGID(GetSystemDefaultLangID()) == LANG_ENGLISH
-        && PRIMARYLANGID(GetUserDefaultLangID()) == LANG_ENGLISH;
+    static HMODULE hkernel32 = NULL;
+    static LANGID (WINAPI *pGetThreadUILanguage)(void) = NULL;
+    static LANGID (WINAPI *pGetUserDefaultUILanguage)(void) = NULL;
+
+    if (!hkernel32)
+    {
+        hkernel32 = GetModuleHandleA("kernel32.dll");
+        pGetThreadUILanguage = (void*)GetProcAddress(hkernel32, "GetThreadUILanguage");
+        pGetUserDefaultUILanguage = (void*)GetProcAddress(hkernel32, "GetUserDefaultUILanguage");
+    }
+    if (pGetThreadUILanguage)
+        return PRIMARYLANGID(pGetThreadUILanguage()) == LANG_ENGLISH;
+    if (pGetUserDefaultUILanguage)
+        return PRIMARYLANGID(pGetUserDefaultUILanguage()) == LANG_ENGLISH;
+
+    return PRIMARYLANGID(GetUserDefaultLangID()) == LANG_ENGLISH;
 }
 
 static void test_disp(IDispatch *disp)
@@ -405,9 +422,9 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD
         *pid = DISPID_GLOBAL_GETVT;
         return S_OK;
     }
-    if(!strcmp_wa(bstrName, "isEnglishLocale")) {
+    if(!strcmp_wa(bstrName, "isEnglishLang")) {
         test_grfdex(grfdex, fdexNameCaseInsensitive);
-        *pid = DISPID_GLOBAL_ISENGLOC;
+        *pid = DISPID_GLOBAL_ISENGLANG;
         return S_OK;
     }
     if(!strcmp_wa(bstrName, "testObj")) {
@@ -511,7 +528,7 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
         V_BSTR(pvarRes) = a2bstr(vt2a(pdp->rgvarg));
         return S_OK;
 
-    case DISPID_GLOBAL_ISENGLOC:
+    case DISPID_GLOBAL_ISENGLANG:
         ok(wFlags == (INVOKE_FUNC|INVOKE_PROPERTYGET), "wFlags = %x\n", wFlags);
         ok(pdp != NULL, "pdp == NULL\n");
         ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
@@ -521,10 +538,10 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
         ok(pei != NULL, "pei == NULL\n");
 
         V_VT(pvarRes) = VT_BOOL;
-        if(is_english()) {
+        if(is_lang_english()) {
             V_BOOL(pvarRes) = VARIANT_TRUE;
         }else {
-            skip("Skipping some test in non-English locale\n");
+            skip("Skipping some tests in non-English UIs\n");
             V_BOOL(pvarRes) = VARIANT_FALSE;
         }
         return S_OK;
-- 
1.7.5.4



More information about the wine-patches mailing list