Vincent Povirk : ole32: Add tests for StgConvertVariantToProperty.

Alexandre Julliard julliard at winehq.org
Mon Oct 8 13:39:56 CDT 2012


Module: wine
Branch: master
Commit: 718f09562900d9597bcfcaba54b80c7d280026cb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=718f09562900d9597bcfcaba54b80c7d280026cb

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Thu Oct  4 16:19:07 2012 -0500

ole32: Add tests for StgConvertVariantToProperty.

---

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

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();
 }




More information about the wine-cvs mailing list