[PATCH 1/2] kernel32/tests: Add more tests for VerifyVersionInfo()

Nikolay Sivov nsivov at codeweavers.com
Sun Feb 25 10:37:48 CST 2018


New tests cases by Sebastian Lackner.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/kernel32/tests/version.c | 634 ++++++++++++++++++++++++++++++++----------
 1 file changed, 493 insertions(+), 141 deletions(-)

diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c
index 7b1359878e..8360994de0 100644
--- a/dlls/kernel32/tests/version.c
+++ b/dlls/kernel32/tests/version.c
@@ -163,15 +163,445 @@ static void test_GetVersionEx(void)
 
 static void test_VerifyVersionInfo(void)
 {
+    enum srcversion_mode
+    {
+        SRCVERSION_ZERO         = 0,
+        SRCVERSION_CURRENT      = 1,
+        SRCVERSION_INC_MINOR    = 2,
+        SRCVERSION_INC_SP_MINOR = 3,
+        SRCVERSION_INC_SP_MAJOR = 4,
+        SRCVERSION_DEC_SP_MAJOR = 5,
+        SRCVERSION_DEC_MAJOR    = 6,
+        SRCVERSION_INC_BUILD    = 7,
+        SRCVERSION_REQUIRES_SP  = 0x1000,
+    };
+
+    struct verify_version_test
+    {
+        DWORD verifymask; /* Type mask for VerifyVersionInfo() */
+        DWORD srcinfo;    /* The way current version info is modified. */
+        DWORD err;        /* Error code on failure, 0 on success. */
+
+        DWORD typemask1;
+        DWORD condition1;
+        DWORD typemask2;
+        DWORD condition2;
+        DWORD typemask3;
+        DWORD condition3;
+        DWORD typemask4;
+        DWORD condition4;
+
+        BOOL todo;
+    } verify_version_tests[] =
+    {
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_MINOR,
+            0,
+
+            VER_MAJORVERSION, VER_EQUAL,
+            VER_MINORVERSION, VER_LESS,
+            0, 0,
+            0, 0,
+            TRUE,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_MINORVERSION, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_CURRENT,
+            0,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_MINORVERSION, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_CURRENT,
+            0,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_MINORVERSION, VER_AND,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_MINOR,
+            0,
+
+            VER_MAJORVERSION, VER_LESS_EQUAL,
+            VER_MINORVERSION, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_AND,
+            VER_MINORVERSION, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_OR,
+            VER_MINORVERSION, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MINORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMINOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMINOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_EQUAL,
+        },
+        {
+            VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MINOR,
+            0,
+
+            VER_SERVICEPACKMAJOR, VER_EQUAL,
+            VER_SERVICEPACKMINOR, VER_LESS,
+            0, 0,
+            0, 0,
+            TRUE,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_SERVICEPACKMAJOR, VER_EQUAL,
+            VER_SERVICEPACKMINOR, VER_LESS,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MINOR,
+            0,
+
+            VER_MINORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_EQUAL,
+            VER_SERVICEPACKMINOR, VER_LESS,
+            0, 0,
+            TRUE,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MINORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_EQUAL,
+            VER_SERVICEPACKMINOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MINOR,
+            0,
+
+            VER_MAJORVERSION, VER_EQUAL,
+            VER_MINORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_EQUAL,
+            VER_SERVICEPACKMINOR, VER_LESS,
+            TRUE,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_EQUAL,
+            VER_MINORVERSION, VER_GREATER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_EQUAL,
+            VER_SERVICEPACKMINOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            0,
+
+            VER_MAJORVERSION, VER_LESS_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_GREATER,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MINORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            0,
+
+            VER_MAJORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_LESS,
+            0, 0,
+            0, 0,
+            TRUE,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            0,
+
+            VER_MAJORVERSION, VER_EQUAL,
+            VER_MINORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_LESS,
+            0, 0,
+            TRUE
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_DEC_MAJOR,
+            0,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_CURRENT,
+            0,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_MINORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_LESS,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_MINORVERSION, VER_GREATER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_LESS_EQUAL,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_AND,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION,
+            SRCVERSION_ZERO,
+            0,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER,
+            SRCVERSION_ZERO,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+        },
+        {
+            VER_SUITENAME,
+            SRCVERSION_ZERO,
+            0,
+
+            VER_SUITENAME, VER_AND,
+        },
+        {
+            VER_SUITENAME,
+            SRCVERSION_ZERO,
+            0,
+
+            VER_SUITENAME, VER_OR,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MINORVERSION, VER_GREATER_EQUAL,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            0,
+
+            VER_MINORVERSION, VER_LESS,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            0,
+
+            VER_MINORVERSION, VER_LESS_EQUAL,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MINORVERSION, VER_EQUAL,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_SP_MAJOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MINORVERSION, VER_GREATER_EQUAL,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MINORVERSION, VER_GREATER_EQUAL,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_MINOR,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MINORVERSION, VER_GREATER_EQUAL,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_CURRENT,
+            0,
+
+            VER_MINORVERSION, VER_GREATER_EQUAL,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_BUILD,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MINORVERSION, VER_GREATER_EQUAL,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_INC_BUILD,
+            0,
+
+            VER_MINORVERSION, VER_GREATER_EQUAL,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
+            0,
+
+            VER_MINORVERSION, VER_GREATER,
+        },
+        {
+            VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
+            0,
+
+            VER_MINORVERSION, VER_GREATER_EQUAL,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_MAJORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_GREATER,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
+            0,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_MINORVERSION, VER_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_GREATER,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
+            0,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_MINORVERSION, VER_LESS_EQUAL,
+            VER_SERVICEPACKMAJOR, VER_GREATER,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
+            0,
+
+            VER_MAJORVERSION, VER_GREATER_EQUAL,
+            VER_MINORVERSION, VER_AND,
+            VER_SERVICEPACKMAJOR, VER_GREATER,
+        },
+        {
+            VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
+            SRCVERSION_DEC_SP_MAJOR | SRCVERSION_REQUIRES_SP,
+            ERROR_OLD_WIN_VERSION,
+
+            VER_SERVICEPACKMAJOR, VER_GREATER,
+            VER_SERVICEPACKMINOR, VER_EQUAL,
+        },
+    };
+
     OSVERSIONINFOEXA info;
+    DWORD servicepack;
+    unsigned int i;
     BOOL ret;
-    DWORD servicepack, error;
-
-    if(!pVerifyVersionInfoA || !pVerSetConditionMask)
-    {
-        win_skip("Needed functions not available\n");
-        return;
-    }
 
     /* Before we start doing some tests we should check what the version of
      * the ServicePack is. Tests on a box with no ServicePack will fail otherwise.
@@ -179,13 +609,15 @@ static void test_VerifyVersionInfo(void)
     info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
     GetVersionExA((OSVERSIONINFOA *)&info);
     servicepack = info.wServicePackMajor;
+    if (servicepack == 0)
+        skip("There is no ServicePack on this system. Some tests will be skipped.\n");
 
     /* Win8.1+ returns Win8 version in GetVersionEx when there's no app manifest targeting 8.1 */
     if (info.dwMajorVersion == 6 && info.dwMinorVersion == 2)
     {
         RTL_OSVERSIONINFOEXW rtlinfo;
         rtlinfo.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
-        ok(SUCCEEDED(pRtlGetVersion(&rtlinfo)), "RtlGetVersion failed\n");
+        ok(!pRtlGetVersion(&rtlinfo), "RtlGetVersion failed\n");
 
         if (rtlinfo.dwMajorVersion != 6 || rtlinfo.dwMinorVersion != 2)
         {
@@ -194,34 +626,65 @@ static void test_VerifyVersionInfo(void)
         }
     }
 
-    memset(&info, 0, sizeof(info));
+    for (i = 0; i < sizeof(verify_version_tests)/sizeof(verify_version_tests[0]); i++)
+    {
+        struct verify_version_test *test = &verify_version_tests[i];
+        DWORD srcinfo = test->srcinfo;
+        ULONGLONG mask;
 
-    ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION,
-        pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL));
-    ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+        if (servicepack == 0 && srcinfo & SRCVERSION_REQUIRES_SP)
+            continue;
+        srcinfo &= ~SRCVERSION_REQUIRES_SP;
 
-    SetLastError(0xdeadbeef);
-    ret = pVerifyVersionInfoA(&info, VER_BUILDNUMBER | VER_MAJORVERSION |
-        VER_MINORVERSION/* | VER_PLATFORMID | VER_SERVICEPACKMAJOR |
-        VER_SERVICEPACKMINOR | VER_SUITENAME | VER_PRODUCT_TYPE */,
-        pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL));
-    error = GetLastError();
-    ok(!ret, "VerifyVersionInfoA succeeded\n");
-    ok(error == ERROR_OLD_WIN_VERSION,
-       "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
+        info.dwOSVersionInfoSize = sizeof(info);
+        GetVersionExA((OSVERSIONINFOA *)&info);
 
-    /* tests special handling of VER_SUITENAME */
+        switch (srcinfo)
+        {
+        case SRCVERSION_ZERO:
+            memset(&info, 0, sizeof(info));
+            break;
+        case SRCVERSION_INC_MINOR:
+            info.dwMinorVersion++;
+            break;
+        case SRCVERSION_INC_SP_MINOR:
+            info.wServicePackMinor++;
+            break;
+        case SRCVERSION_INC_SP_MAJOR:
+            info.wServicePackMajor++;
+            break;
+        case SRCVERSION_DEC_SP_MAJOR:
+            info.wServicePackMajor--;
+            break;
+        case SRCVERSION_DEC_MAJOR:
+            info.dwMajorVersion--;
+            break;
+        case SRCVERSION_INC_BUILD:
+            info.dwBuildNumber++;
+            break;
+        default:
+            ;
+        }
 
-    ret = pVerifyVersionInfoA(&info, VER_SUITENAME,
-        pVerSetConditionMask(0, VER_SUITENAME, VER_AND));
-    ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+        mask = VerSetConditionMask(0, test->typemask1, test->condition1);
+        if (test->typemask2)
+            mask = VerSetConditionMask(mask, test->typemask2, test->condition2);
+        if (test->typemask3)
+            mask = VerSetConditionMask(mask, test->typemask3, test->condition3);
+        if (test->typemask4)
+            mask = VerSetConditionMask(mask, test->typemask4, test->condition4);
 
-    ret = pVerifyVersionInfoA(&info, VER_SUITENAME,
-        pVerSetConditionMask(0, VER_SUITENAME, VER_OR));
-    ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+        SetLastError(0xdeadbeef);
+        ret = VerifyVersionInfoA(&info, test->verifymask, mask);
+    todo_wine_if(test->todo)
+    {
+        ok(test->err ? !ret : ret, "%u: unexpected return value %d.\n", i, ret);
+        if (!ret)
+            ok(GetLastError() == test->err, "%u: unexpected error code %d, expected %d.\n", i, GetLastError(), test->err);
+    }
+    }
 
     /* test handling of version numbers */
-    
     /* v3.10 is always less than v4.x even
      * if the minor version is tested */
     info.dwMajorVersion = 3;
@@ -245,124 +708,13 @@ static void test_VerifyVersionInfo(void)
             VER_MAJORVERSION, VER_GREATER_EQUAL));
     ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
 
-    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
-    GetVersionExA((OSVERSIONINFOA *)&info);
-    info.wServicePackMinor++;
-    SetLastError(0xdeadbeef);
-    ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-        pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
-    error = GetLastError();
-    ok(!ret, "VerifyVersionInfoA succeeded\n");
-    ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some wink2 */,
-       "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
-
-    if (servicepack == 0)
-    {
-        skip("There is no ServicePack on this system\n");
-    }
-    else
-    {
-        info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
-        GetVersionExA((OSVERSIONINFOA *)&info);
-        info.wServicePackMajor--;
-        ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-            pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER));
-        ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
-
-        info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
-        GetVersionExA((OSVERSIONINFOA *)&info);
-        info.wServicePackMajor--;
-        ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-            pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
-        ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
-    }
-
-    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
-    GetVersionExA((OSVERSIONINFOA *)&info);
-    info.wServicePackMajor++;
-    ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-        pVerSetConditionMask(0, VER_MINORVERSION, VER_LESS));
-    ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
-
-    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
-    GetVersionExA((OSVERSIONINFOA *)&info);
-    info.wServicePackMajor++;
-    ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-        pVerSetConditionMask(0, VER_MINORVERSION, VER_LESS_EQUAL));
-    ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
-
-    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
-    GetVersionExA((OSVERSIONINFOA *)&info);
-    info.wServicePackMajor--;
-    SetLastError(0xdeadbeef);
-    ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-        pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL));
-    error = GetLastError();
-    ok(!ret, "VerifyVersionInfoA succeeded\n");
-    ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
-       "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
-
-    /* test the failure hierarchy for the four version fields */
-
-    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
-    GetVersionExA((OSVERSIONINFOA *)&info);
-    info.wServicePackMajor++;
-    SetLastError(0xdeadbeef);
-    ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-        pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
-    error = GetLastError();
-    ok(!ret, "VerifyVersionInfoA succeeded\n");
-    ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
-       "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
-
-    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
-    GetVersionExA((OSVERSIONINFOA *)&info);
-    info.dwMinorVersion++;
-    SetLastError(0xdeadbeef);
-    ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-        pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
-    error = GetLastError();
-    ok(!ret, "VerifyVersionInfoA succeeded\n");
-    ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
-       "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
-
-    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
-    GetVersionExA((OSVERSIONINFOA *)&info);
-    info.dwMajorVersion++;
-    SetLastError(0xdeadbeef);
-    ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-        pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
-    error = GetLastError();
-    ok(!ret, "VerifyVersionInfoA succeeded\n");
-    ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
-       "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
-
-    ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-        pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
-    ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
-
-    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
-    GetVersionExA((OSVERSIONINFOA *)&info);
-    info.dwBuildNumber++;
-    SetLastError(0xdeadbeef);
-    ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-        pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
-    error = GetLastError();
-    ok(!ret, "VerifyVersionInfoA succeeded\n");
-    ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */,
-       "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error);
-
-    ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
-        pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL));
-    ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
-
     /* test bad dwOSVersionInfoSize */
     info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
     GetVersionExA((OSVERSIONINFOA *)&info);
     info.dwOSVersionInfoSize = 0;
     ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
         pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL));
-    ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError());
+    ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError());
 }
 
 START_TEST(version)
-- 
2.16.1




More information about the wine-devel mailing list