Jacek Caban : urlmon/tests: Add more user agent string tests.

Alexandre Julliard julliard at winehq.org
Thu Mar 25 16:49:23 CDT 2021


Module: wine
Branch: master
Commit: b599464326b72f35959e1458f7baa3e5cd973bdd
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b599464326b72f35959e1458f7baa3e5cd973bdd

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Mar 25 19:34:36 2021 +0100

urlmon/tests: Add more user agent string tests.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/urlmon/tests/misc.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)

diff --git a/dlls/urlmon/tests/misc.c b/dlls/urlmon/tests/misc.c
index abe77ac7eaf..5f468b80286 100644
--- a/dlls/urlmon/tests/misc.c
+++ b/dlls/urlmon/tests/misc.c
@@ -1448,13 +1448,27 @@ static void test_UrlMkGetSessionOption(void)
     ok(encoding == 0xdeadbeef, "encoding = %08x, exepcted 0xdeadbeef\n", encoding);
 }
 
+static size_t check_prefix(const char *str, const char *prefix)
+{
+    size_t len = strlen(prefix);
+    if(memcmp(str, prefix, len)) {
+        ok(0, "no %s prefix in %s\n", wine_dbgstr_a(prefix), wine_dbgstr_a(str));
+        return 0;
+    }
+    return len;
+}
+
 static void test_user_agent(void)
 {
     static const CHAR expected[] = "Mozilla/4.0 (compatible; MSIE ";
     static char test_str[] = "test";
     static char test2_str[] = "test\0test";
     static CHAR str[3];
+    OSVERSIONINFOW os_info = {sizeof(os_info)};
+    char ua[1024], buf[64];
+    unsigned int i;
     LPSTR str2 = NULL;
+    BOOL is_wow = FALSE;
     HRESULT hres;
     DWORD size, saved;
 
@@ -1493,6 +1507,67 @@ static void test_user_agent(void)
        "user agent was \"%s\", expected to start with \"%s\"\n",
        str2, expected);
 
+    GetVersionExW(&os_info);
+    if (sizeof(void*) == 4) IsWow64Process(GetCurrentProcess(), &is_wow);
+
+    for(i = 1; i < 12; i++) {
+        const char *p = ua;
+
+        if (i != 7) {
+            size = sizeof(ua);
+            hres = pObtainUserAgentString(i | 0x1000, ua, &size);
+            ok(hres == S_OK, "ObtainUserAgentString failed: %08x\n", hres);
+            ok(size == strlen(ua) + 1, "unexpected size %u, expected %u\n", size, strlen(ua) + 1);
+            ok(!strcmp(ua, str2), "unexpected UA for version %u %s, expected %s\n",
+               i, wine_dbgstr_a(ua), wine_dbgstr_a(str2));
+        }
+
+        size = sizeof(ua);
+        hres = pObtainUserAgentString(i != 1 ? i : 0x1007, ua, &size);
+        ok(hres == S_OK, "ObtainUserAgentString failed: %08x\n", hres);
+        ok(size == strlen(ua) + 1, "unexpected size %u, expected %u\n", size, strlen(ua) + 1);
+        if(i < 8 && i != 1)
+            ok(!strcmp(ua, str2), "unexpected UA for version %u %s, expected %s\n",
+               i, wine_dbgstr_a(ua), wine_dbgstr_a(str2));
+
+        p += check_prefix(p, "Mozilla/");
+        p += check_prefix(p, i < 9 ? "4.0 (" : "5.0 (");
+        if(i < 11) {
+            p += check_prefix(p, "compatible; ");
+            sprintf(buf, "MSIE %u.0; ", max(i, 7));
+            p += check_prefix(p, buf);
+        }
+        sprintf(buf, "Windows NT %u.%u; ", os_info.dwMajorVersion, os_info.dwMinorVersion);
+        p += check_prefix(p, buf);
+        if(is_wow) {
+            p += check_prefix(p, "WOW64; ");
+        }else if(sizeof(void*) == 8) {
+            p += check_prefix(p, "Win64; ");
+#ifdef __x86_64__
+            p += check_prefix(p, "x64; ");
+#endif
+        }
+        if(i != 1) {
+            p += check_prefix(p, "Trident/");
+            ok('5' <= *p && *p <= '8', "unexpected version '%c'\n", *p);
+            if(*p < '7') {
+                win_skip("skipping UA tests, too old IE\n");
+                break;
+            }
+            p++; /* skip version number */
+            p += check_prefix(p, ".0");
+        }
+        if(i == 11) {
+            p += check_prefix(p, "; rv:11.0) like Gecko");
+        }else {
+            if(i < 9)
+                p = strchr(p, ')');
+            p += check_prefix(p, ")");
+        }
+
+        ok(!*p, "unexpected suffix %s for version %u\n", wine_dbgstr_a(p), i);
+    }
+
     size = saved+10;
     hres = pObtainUserAgentString(0, str2, &size);
     ok(hres == S_OK, "ObtainUserAgentString failed: %08x\n", hres);




More information about the wine-cvs mailing list