[PATCH 4/5] msi/tests: Test deferral of CreateFolders and RemoveFolders.

Hans Leidekker hans at codeweavers.com
Mon May 14 03:56:00 CDT 2018


On Mon, 2018-05-14 at 00:29 -0500, Zebediah Figura wrote:
> diff --git a/dlls/msi/tests/custom.c b/dlls/msi/tests/custom.c
> index ff1be9b..aeee98e 100644
> --- a/dlls/msi/tests/custom.c
> +++ b/dlls/msi/tests/custom.c
> @@ -24,10 +24,13 @@
>  #include <windef.h>
>  #include <winbase.h>
>  #define COBJMACROS
> +#include <shlobj.h>
>  #include <msxml.h>
>  #include <msi.h>
>  #include <msiquery.h>
>  
> +static int todo_level, todo_do_loop;
> +
>  static void ok_(MSIHANDLE hinst, int todo, const char *file, int line, int condition, const char *msg, ...)
>  {
>      static char buffer[2000];
> @@ -47,8 +50,30 @@ static void ok_(MSIHANDLE hinst, int todo, const char *file, int line, int condi
>      MsiProcessMessage(hinst, INSTALLMESSAGE_USER, record);
>      MsiCloseHandle(record);
>  }
> -#define ok(hinst, condition, ...)           ok_(hinst, 0, __FILE__, __LINE__, condition, __VA_ARGS__)
> -#define todo_wine_ok(hinst, condition, ...) ok_(hinst, 1, __FILE__, __LINE__, condition, __VA_ARGS__)
> +
> +static void winetest_start_todo( int is_todo )
> +{
> +    todo_level = (todo_level << 1) | (is_todo != 0);
> +    todo_do_loop=1;
> +}
> +
> +static int winetest_loop_todo(void)
> +{
> +    int do_loop=todo_do_loop;
> +    todo_do_loop=0;
> +    return do_loop;
> +}
> +
> +static void winetest_end_todo(void)
> +{
> +    todo_level >>= 1;
> +}
> +
> +#define ok(hinst, condition, ...)   ok_(hinst, todo_level, __FILE__, __LINE__, condition, __VA_ARGS__)
> +#define todo_wine_if(is_todo) for (winetest_start_todo(is_todo); \
> +                                   winetest_loop_todo(); \
> +                                   winetest_end_todo())
> +#define todo_wine   todo_wine_if(1)
>  
>  static const char *dbgstr_w(WCHAR *str)
>  {
> @@ -886,7 +911,8 @@ static void test_costs(MSIHANDLE hinst)
>      cost = 0xdead;
>      r = MsiGetFeatureCostA(hinst, NULL, MSICOSTTREE_CHILDREN, INSTALLSTATE_LOCAL, &cost);
>      ok(hinst, r == ERROR_INVALID_PARAMETER, "got %u\n", r);
> -    todo_wine_ok(hinst, !cost, "got %d\n", cost);
> +    todo_wine
> +    ok(hinst, !cost, "got %d\n", cost);
>  
>      r = MsiGetFeatureCostA(hinst, "One", MSICOSTTREE_CHILDREN, INSTALLSTATE_LOCAL, NULL);
>      ok(hinst, r == RPC_X_NULL_REF_POINTER, "got %u\n", r);
> @@ -894,7 +920,8 @@ static void test_costs(MSIHANDLE hinst)
>      cost = 0xdead;
>      r = MsiGetFeatureCostA(hinst, "One", MSICOSTTREE_CHILDREN, INSTALLSTATE_LOCAL, &cost);
>      ok(hinst, !r, "got %u\n", r);
> -    todo_wine_ok(hinst, cost == 8, "got %d\n", cost);
> +    todo_wine
> +    ok(hinst, cost == 8, "got %d\n", cost);
>  
>      sz = cost = temp = 0xdead;
>      r = MsiEnumComponentCostsA(hinst, "One", 0, INSTALLSTATE_LOCAL, NULL, &sz, &cost, &temp);
> @@ -946,7 +973,8 @@ static void test_costs(MSIHANDLE hinst)
>      r = MsiEnumComponentCostsA(hinst, "One", 0, INSTALLSTATE_LOCAL, buffer, &sz, &cost, &temp);
>      ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
>      ok(hinst, !strcmp(buffer, "q"), "got \"%s\"\n", buffer);
> -    todo_wine_ok(hinst, sz == 4, "got size %u\n", sz);
> +    todo_wine
> +    ok(hinst, sz == 4, "got size %u\n", sz);
>      ok(hinst, cost == 8, "got cost %d\n", cost);
>      ok(hinst, !temp, "got temp %d\n", temp);
>  
> @@ -954,15 +982,19 @@ static void test_costs(MSIHANDLE hinst)
>      strcpy(buffer,"x");
>      r = MsiEnumComponentCostsA(hinst, "One", 0, INSTALLSTATE_LOCAL, buffer, &sz, &cost, &temp);
>      ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
> -    todo_wine_ok(hinst, !buffer[0], "got \"%s\"\n", buffer);
> -    todo_wine_ok(hinst, sz == 4, "got size %u\n", sz);
> +    todo_wine {
> +    ok(hinst, !buffer[0], "got \"%s\"\n", buffer);
> +    ok(hinst, sz == 4, "got size %u\n", sz);
> +    }
>  
>      sz = 2;
>      strcpy(buffer,"x");
>      r = MsiEnumComponentCostsA(hinst, "One", 0, INSTALLSTATE_LOCAL, buffer, &sz, &cost, &temp);
>      ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
> -    todo_wine_ok(hinst, !strcmp(buffer, "C"), "got \"%s\"\n", buffer);
> -    todo_wine_ok(hinst, sz == 4, "got size %u\n", sz);
> +    todo_wine {
> +    ok(hinst, !strcmp(buffer, "C"), "got \"%s\"\n", buffer);
> +    ok(hinst, sz == 4, "got size %u\n", sz);
> +    }
>  
>      sz = 3;
>      strcpy(buffer,"x");
> @@ -1021,7 +1053,8 @@ UINT WINAPI main_test(MSIHANDLE hinst)
>  
>      /* Test MsiGetDatabaseState() */
>      res = MsiGetDatabaseState(hinst);
> -    todo_wine_ok(hinst, res == MSIDBSTATE_ERROR, "expected MSIDBSTATE_ERROR, got %u\n", res);
> +    todo_wine
> +    ok(hinst, res == MSIDBSTATE_ERROR, "expected MSIDBSTATE_ERROR, got %u\n", res);
>  
>      test_props(hinst);
>      test_db(hinst);
> @@ -1101,7 +1134,8 @@ UINT WINAPI da_deferred(MSIHANDLE hinst)
>      len = sizeof(prop);
>      r = MsiGetPropertyA(hinst, "TESTPATH", prop, &len);
>      ok(hinst, r == ERROR_SUCCESS, "got %u\n", r);
> -    todo_wine_ok(hinst, !prop[0], "got %s\n", prop);
> +    todo_wine
> +    ok(hinst, !prop[0], "got %s\n", prop);
>  
>      /* Test modes */
>      ok(hinst, MsiGetMode(hinst, MSIRUNMODE_SCHEDULED), "should be scheduled\n");
> @@ -1113,3 +1147,34 @@ UINT WINAPI da_deferred(MSIHANDLE hinst)
>  
>      return ERROR_SUCCESS;
>  }
> +
> +static BOOL pf_exists(const char *file)
> +{
> +    char path[MAX_PATH];
> +
> +    if (FAILED(SHGetFolderPathA(NULL, CSIDL_PROGRAM_FILESX86, NULL, 0, path)))
> +        SHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES, NULL, 0, path);
> +    strcat(path, "\\");
> +    strcat(path, file);
> +    return GetFileAttributesA(path) != INVALID_FILE_ATTRIBUTES;
> +}

This fails to build:

custom.c: In function ‘test_props’:
custom.c:196:5: warning: implicit declaration of function ‘todo_wine_ok’ [-Wimplicit-function-declaration]
     todo_wine_ok(hinst, sz == 6, "got size %u\n", sz);




More information about the wine-devel mailing list