Module: wine Branch: master Commit: 96427780894897c84646ba1a8060309b79ac4e25 URL: http://source.winehq.org/git/wine.git/?a=commit;h=96427780894897c84646ba1a80...
Author: Piotr Caban piotr@codeweavers.com Date: Fri Sep 16 11:20:18 2011 +0200
propsys/tests: Added InitVariantFromGUIDAsString tests.
---
dlls/propsys/tests/Makefile.in | 2 +- dlls/propsys/tests/propsys.c | 59 ++++++++++++++++++++++++++++++++++++++++ include/propvarutil.h | 2 + 3 files changed, 62 insertions(+), 1 deletions(-)
diff --git a/dlls/propsys/tests/Makefile.in b/dlls/propsys/tests/Makefile.in index 8db4008..312a3a9 100644 --- a/dlls/propsys/tests/Makefile.in +++ b/dlls/propsys/tests/Makefile.in @@ -1,5 +1,5 @@ TESTDLL = propsys.dll -IMPORTS = propsys ole32 +IMPORTS = propsys ole32 oleaut32
C_SRCS = \ propsys.c diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index e0895f3..1e63348 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -24,10 +24,13 @@ #include <stdarg.h> #include <stdio.h>
+#define NONAMELESSUNION + #include "windef.h" #include "winbase.h" #include "objbase.h" #include "propsys.h" +#include "propvarutil.h" #include "initguid.h" #include "wine/test.h"
@@ -46,6 +49,13 @@ static char *show_guid(const GUID *guid, char *buf) return buf; }
+static int strcmp_wa(LPCWSTR strw, const char *stra) +{ + CHAR buf[512]; + WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL); + return lstrcmpA(stra, buf); +} + static void test_PSStringFromPropertyKey(void) { static const WCHAR fillerW[] = {'X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X', @@ -450,9 +460,58 @@ static void test_PSRefreshPropertySchema(void) CoUninitialize(); }
+static void test_InitPropVariantFromGUIDAsString(void) +{ + PROPVARIANT propvar; + VARIANT var; + HRESULT hres; + int i; + + const struct { + REFGUID guid; + const char *str; + } testcases[] = { + {&IID_NULL, "{00000000-0000-0000-0000-000000000000}" }, + {&dummy_guid, "{DEADBEEF-DEAD-BEEF-DEAD-BEEFCAFEBABE}" }, + }; + + hres = InitPropVariantFromGUIDAsString(NULL, &propvar); + ok(hres == E_FAIL, "InitPropVariantFromGUIDAsString returned %x\n", hres); + + if(0) { + /* Returns strange data on Win7, crashes on older systems */ + InitVariantFromGUIDAsString(NULL, &var); + + /* Crashes on windows */ + InitPropVariantFromGUIDAsString(&IID_NULL, NULL); + InitVariantFromGUIDAsString(&IID_NULL, NULL); + } + + for(i=0; i<sizeof(testcases)/sizeof(testcases[0]); i++) { + memset(&propvar, 0, sizeof(PROPVARIANT)); + hres = InitPropVariantFromGUIDAsString(testcases[i].guid, &propvar); + ok(hres == S_OK, "%d) InitPropVariantFromGUIDAsString returned %x\n", i, hres); + ok(propvar.vt == VT_LPWSTR, "%d) propvar.vt = %d\n", i, propvar.vt); + ok(!strcmp_wa(propvar.u.pwszVal, testcases[i].str), "%d) propvar.u.pwszVal = %s\n", + i, wine_dbgstr_w(propvar.u.pwszVal)); + CoTaskMemFree(propvar.u.pwszVal); + + memset(&var, 0, sizeof(VARIANT)); + hres = InitVariantFromGUIDAsString(testcases[i].guid, &var); + ok(hres == S_OK, "%d) InitVariantFromGUIDAsString returned %x\n", i, hres); + ok(V_VT(&var) == VT_BSTR, "%d) V_VT(&var) = %d\n", i, V_VT(&var)); + ok(SysStringLen(V_BSTR(&var)) == 38, "SysStringLen returned %d\n", + SysStringLen(V_BSTR(&var))); + ok(!strcmp_wa(V_BSTR(&var), testcases[i].str), "%d) V_BSTR(&var) = %s\n", + i, wine_dbgstr_w(V_BSTR(&var))); + VariantClear(&var); + } +} + START_TEST(propsys) { test_PSStringFromPropertyKey(); test_PSPropertyKeyFromString(); test_PSRefreshPropertySchema(); + test_InitPropVariantFromGUIDAsString(); } diff --git a/include/propvarutil.h b/include/propvarutil.h index e830885..4d2a9b4 100644 --- a/include/propvarutil.h +++ b/include/propvarutil.h @@ -37,6 +37,8 @@ typedef int PROPVAR_CHANGE_FLAGS;
HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc, PROPVAR_CHANGE_FLAGS flags, VARTYPE vt); +HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar); +HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
#ifdef __cplusplus