[RFC PATCH 1/9] ntdll/tests: Add tests for iswctype.

Jeff Smith whydoubt at gmail.com
Thu Jan 9 00:53:41 CST 2020


Signed-off-by: Jeff Smith <whydoubt at gmail.com>
---
This series essentially supersedes the series starting with
https://source.winehq.org/patches/data/176232

It no longer contains anything regarding IsCharBlankW, as that is
associated with a different instance of the wctype table, and this
series is long enough as-is.

The first three patches are focused on ntdll, while the remainder
are focused on msvcrt, ucrtbase, etc.

 dlls/ntdll/tests/string.c | 72 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/dlls/ntdll/tests/string.c b/dlls/ntdll/tests/string.c
index 12027e8899..3b62bde1a7 100644
--- a/dlls/ntdll/tests/string.c
+++ b/dlls/ntdll/tests/string.c
@@ -69,6 +69,13 @@ static int      (__cdecl *p__strnicmp)(LPCSTR,LPCSTR,size_t);
 
 static int      (WINAPIV *p_sscanf)(const char *, const char *, ...);
 
+static int      (__cdecl *p_iswctype)(int, int);
+static int      (__cdecl *p_iswalpha)(int);
+static int      (__cdecl *p_iswdigit)(int);
+static int      (__cdecl *p_iswlower)(int);
+static int      (__cdecl *p_iswspace)(int);
+static int      (__cdecl *p_iswxdigit)(int);
+
 static void InitFunctionPtrs(void)
 {
     hntdll = LoadLibraryA("ntdll.dll");
@@ -113,6 +120,13 @@ static void InitFunctionPtrs(void)
         p__strnicmp = (void *)GetProcAddress(hntdll, "_strnicmp");
 
         p_sscanf = (void *)GetProcAddress(hntdll, "sscanf");
+
+        p_iswctype = (void*)GetProcAddress(hntdll, "iswctype");
+        p_iswalpha = (void*)GetProcAddress(hntdll, "iswalpha");
+        p_iswdigit = (void*)GetProcAddress(hntdll, "iswdigit");
+        p_iswlower = (void*)GetProcAddress(hntdll, "iswlower");
+        p_iswspace = (void*)GetProcAddress(hntdll, "iswspace");
+        p_iswxdigit = (void*)GetProcAddress(hntdll, "iswxdigit");
     } /* if */
 }
 
@@ -1501,6 +1515,63 @@ static void test_sscanf(void)
     ok(d == 0.0, "d = %lf\n", f);
 }
 
+static void test_iswctype(void)
+{
+    unsigned int c, i;
+    unsigned short types = 0;
+    unsigned short base_wctype[65536];
+    static const struct
+    {
+        unsigned int c;
+        unsigned int wctype;
+    }
+    iswctype_tests[] =
+    {
+        { '\t', C1_CNTRL | C1_SPACE | C1_BLANK },
+        { 0xa0, C1_SPACE | C1_BLANK },
+        { 0x85, C1_CNTRL },
+        { 0xad, C1_PUNCT },
+        { 0xaa, C1_PUNCT },
+        { 0xb5, C1_PUNCT },
+        { 0xba, C1_PUNCT },
+        { 0xb2, C1_PUNCT | C1_DIGIT },
+        { 0xb3, C1_PUNCT | C1_DIGIT },
+        { 0xb9, C1_PUNCT | C1_DIGIT },
+    };
+
+    for (c = 0; c <= 0xff; c++)
+    {
+        base_wctype[c] = p_iswctype(c, 0xffff);
+        types |= base_wctype[c];
+    }
+    todo_wine ok(types == 0x1ff, "Unexpected wctype bits present\n");
+
+    for (c = 0x100; c <= 0xffff; c++)
+    {
+        types = p_iswctype(c, 0xffff);
+        todo_wine_if(types != 0) ok(types == 0, "Unexpected iswctype for %#x\n", c);
+        types = p_iswalpha(c);
+        todo_wine_if(types != 0) ok(types == 0, "Unexpected iswalpha for %#x\n", c);
+        types = p_iswdigit(c);
+        todo_wine_if(types != 0) ok(types == 0, "Unexpected iswdigit for %#x\n", c);
+        types = p_iswlower(c);
+        todo_wine_if(types != 0) ok(types == 0, "Unexpected iswlower for %#x\n", c);
+        types = p_iswspace(c);
+        todo_wine_if(types != 0) ok(types == 0, "Unexpected iswspace for %#x\n", c);
+        types = p_iswxdigit(c);
+        todo_wine_if(types != 0) ok(types == 0, "Unexpected iswxdigit for %#x\n", c);
+    }
+
+    for (i = 0; i < ARRAY_SIZE(iswctype_tests); i++)
+    {
+        todo_wine {
+            ok(base_wctype[iswctype_tests[i].c] == iswctype_tests[i].wctype,
+                "Unexpected wctype %#x for char %#x\n",
+                base_wctype[iswctype_tests[i].c], iswctype_tests[i].c);
+        }
+    }
+}
+
 START_TEST(string)
 {
     InitFunctionPtrs();
@@ -1545,4 +1616,5 @@ START_TEST(string)
     test_toupper();
     test__strnicmp();
     test_sscanf();
+    test_iswctype();
 }
-- 
2.23.0




More information about the wine-devel mailing list