[2/4] ole32: Add tests for StgConvertVariantToProperty.

Vincent Povirk madewokherd at gmail.com
Thu Oct 4 17:10:51 CDT 2012


-------------- next part --------------
From af326689b47073df0c6c4bc12fa974f121c801ec Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Thu, 4 Oct 2012 16:19:07 -0500
Subject: [PATCH 2/4] ole32: Add tests for StgConvertVariantToProperty.

---
 dlls/ole32/tests/propvariant.c |   93 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 93 insertions(+)

diff --git a/dlls/ole32/tests/propvariant.c b/dlls/ole32/tests/propvariant.c
index 5f7adba..2de480a 100644
--- a/dlls/ole32/tests/propvariant.c
+++ b/dlls/ole32/tests/propvariant.c
@@ -408,9 +408,102 @@ static void test_propertytovariant(void)
     PropVariantClear(&propvar);
 }
 
+static void test_varianttoproperty(void)
+{
+    HANDLE hole32;
+    PROPVARIANT propvar;
+    SERIALIZEDPROPERTYVALUE *propvalue, *own_propvalue;
+    SERIALIZEDPROPERTYVALUE* (__stdcall *pStgConvertVariantToProperty)(
+        const PROPVARIANT*,USHORT,SERIALIZEDPROPERTYVALUE*,ULONG*,PROPID,BOOLEAN,ULONG*);
+    ULONG len;
+    static const WCHAR test_string[] = {'t','e','s','t',0};
+    BSTR test_string_bstr;
+
+    hole32 = GetModuleHandleA("ole32");
+
+    pStgConvertVariantToProperty = (void*)GetProcAddress(hole32, "StgConvertVariantToProperty");
+
+    if (!pStgConvertVariantToProperty)
+    {
+        win_skip("StgConvertVariantToProperty not available\n");
+        return;
+    }
+
+    own_propvalue = HeapAlloc(GetProcessHeap(), 0, sizeof(SERIALIZEDPROPERTYVALUE) + 20);
+
+    PropVariantInit(&propvar);
+
+    propvar.vt = VT_I4;
+    U(propvar).lVal = 0xfeabcdef;
+
+    len = 0xdeadbeef;
+    propvalue = pStgConvertVariantToProperty(&propvar, CP_WINUNICODE, NULL, &len,
+        0, FALSE, 0);
+
+    ok(propvalue == NULL, "got nonnull propvalue\n");
+    todo_wine ok(len == 8, "unexpected length %d\n", len);
+
+    if (len == 0xdeadbeef)
+    {
+        return;
+    }
+
+    len = 20;
+    propvalue = pStgConvertVariantToProperty(&propvar, CP_WINUNICODE, own_propvalue, &len,
+        0, FALSE, 0);
+
+    ok(propvalue == own_propvalue, "unexpected propvalue %p\n", propvalue);
+    ok(len == 8, "unexpected length %d\n", len);
+    ok(!memcmp(propvalue, serialized_i4, 8), "got wrong data\n");
+
+    propvar.vt = VT_EMPTY;
+    len = 20;
+    own_propvalue->dwType = 0xdeadbeef;
+    propvalue = pStgConvertVariantToProperty(&propvar, CP_WINUNICODE, own_propvalue, &len,
+        0, FALSE, 0);
+
+    ok(propvalue == own_propvalue, "unexpected propvalue %p\n", propvalue);
+    ok(len == 0, "unexpected length %d\n", len);
+    ok(propvalue->dwType == 0xdeadbeef, "unexpected type %d\n", propvalue->dwType);
+
+    propvar.vt = VT_NULL;
+    len = 20;
+    propvalue = pStgConvertVariantToProperty(&propvar, CP_WINUNICODE, own_propvalue, &len,
+        0, FALSE, 0);
+
+    ok(propvalue == own_propvalue, "unexpected propvalue %p\n", propvalue);
+    ok(len == 4, "unexpected length %d\n", len);
+    ok(!memcmp(propvalue, serialized_null, 4), "got wrong data\n");
+
+    test_string_bstr = SysAllocString(test_string);
+
+    propvar.vt = VT_BSTR;
+    U(propvar).bstrVal = test_string_bstr;
+    len = 20;
+    propvalue = pStgConvertVariantToProperty(&propvar, CP_WINUNICODE, own_propvalue, &len,
+        0, FALSE, 0);
+
+    ok(propvalue == own_propvalue, "unexpected propvalue %p\n", propvalue);
+    ok(len == 20, "unexpected length %d\n", len);
+    ok(!memcmp(propvalue, serialized_bstr_wc, 20), "got wrong data\n");
+
+    len = 20;
+    propvalue = pStgConvertVariantToProperty(&propvar, CP_UTF8, own_propvalue, &len,
+        0, FALSE, 0);
+
+    ok(propvalue == own_propvalue, "unexpected propvalue %p\n", propvalue);
+    ok(len == 16, "unexpected length %d\n", len);
+    ok(!memcmp(propvalue, serialized_bstr_mb, 16), "got wrong data\n");
+
+    SysFreeString(test_string_bstr);
+
+    HeapFree(GetProcessHeap(), 0, own_propvalue);
+}
+
 START_TEST(propvariant)
 {
     test_validtypes();
     test_copy();
     test_propertytovariant();
+    test_varianttoproperty();
 }
-- 
1.7.9.5


More information about the wine-patches mailing list