Zebediah Figura : devenum/tests: Add more tests for IPropertyBag methods.
Alexandre Julliard
julliard at winehq.org
Tue Apr 14 16:15:26 CDT 2020
Module: wine
Branch: master
Commit: 27f13b2bb4d0b9837775fe0a8a9e485eca53da0e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=27f13b2bb4d0b9837775fe0a8a9e485eca53da0e
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Tue Apr 14 00:16:01 2020 -0500
devenum/tests: Add more tests for IPropertyBag methods.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/devenum/tests/devenum.c | 128 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 124 insertions(+), 4 deletions(-)
diff --git a/dlls/devenum/tests/devenum.c b/dlls/devenum/tests/devenum.c
index a666b2753b..89f6f8d5bb 100644
--- a/dlls/devenum/tests/devenum.c
+++ b/dlls/devenum/tests/devenum.c
@@ -310,8 +310,10 @@ static IMoniker *check_display_name_(int line, IParseDisplayName *parser, WCHAR
static void test_directshow_filter(void)
{
+ SAFEARRAYBOUND bound = {.cElements = 10};
IParseDisplayName *parser;
IPropertyBag *prop_bag;
+ void *array_data;
IMoniker *mon;
WCHAR buffer[200];
LRESULT res;
@@ -348,9 +350,72 @@ static void test_directshow_filter(void)
ok(find_moniker(&CLSID_AudioRendererCategory, mon), "filter should be registered\n");
VariantClear(&var);
+ V_VT(&var) = VT_EMPTY;
hr = IPropertyBag_Read(prop_bag, L"FriendlyName", &var, NULL);
- ok(hr == S_OK, "Read failed: %#x\n", hr);
- ok(!wcscmp(V_BSTR(&var), L"test"), "got %s\n", wine_dbgstr_w(V_BSTR(&var)));
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(V_VT(&var) == VT_BSTR, "Got type %#x.\n", V_VT(&var));
+ ok(!wcscmp(V_BSTR(&var), L"test"), "Got name %s.\n", wine_dbgstr_w(V_BSTR(&var)));
+
+ VariantClear(&var);
+ V_VT(&var) = VT_LPWSTR;
+ hr = IPropertyBag_Read(prop_bag, L"FriendlyName", &var, NULL);
+ todo_wine ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+
+ V_VT(&var) = VT_BSTR;
+ hr = IPropertyBag_Read(prop_bag, L"FriendlyName", &var, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(V_VT(&var) == VT_BSTR, "Got type %#x.\n", V_VT(&var));
+ ok(!wcscmp(V_BSTR(&var), L"test"), "Got name %s.\n", wine_dbgstr_w(V_BSTR(&var)));
+
+ V_VT(&var) = VT_LPWSTR;
+ hr = IPropertyBag_Write(prop_bag, L"FriendlyName", &var);
+ todo_wine ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+ VariantClear(&var);
+
+ V_VT(&var) = VT_I4;
+ V_I4(&var) = 0xdeadbeef;
+ hr = IPropertyBag_Write(prop_bag, L"foobar", &var);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ V_VT(&var) = VT_EMPTY;
+ hr = IPropertyBag_Read(prop_bag, L"foobar", &var, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(V_VT(&var) == VT_I4, "Got type %#x.\n", V_VT(&var));
+ ok(V_I4(&var) == 0xdeadbeef, "Got value %#x.\n", V_I4(&var));
+
+ V_VT(&var) = VT_UI4;
+ hr = IPropertyBag_Read(prop_bag, L"foobar", &var, NULL);
+ todo_wine ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+ V_VT(&var) = VT_BSTR;
+ hr = IPropertyBag_Read(prop_bag, L"foobar", &var, NULL);
+ ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+
+ V_VT(&var) = VT_I4;
+ hr = IPropertyBag_Read(prop_bag, L"foobar", &var, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(V_VT(&var) == VT_I4, "Got type %#x.\n", V_VT(&var));
+ ok(V_I4(&var) == 0xdeadbeef, "Got value %#x.\n", V_I4(&var));
+
+ V_VT(&var) = VT_UI4;
+ hr = IPropertyBag_Write(prop_bag, L"foobar", &var);
+ todo_wine ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+
+ V_VT(&var) = VT_ARRAY | VT_UI1;
+ V_ARRAY(&var) = SafeArrayCreate(VT_UI1, 1, &bound);
+ SafeArrayAccessData(V_ARRAY(&var), &array_data);
+ memcpy(array_data, "test data", 10);
+ SafeArrayUnaccessData(V_ARRAY(&var));
+ hr = IPropertyBag_Write(prop_bag, L"foobar", &var);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ VariantClear(&var);
+ V_VT(&var) = VT_EMPTY;
+ hr = IPropertyBag_Read(prop_bag, L"foobar", &var, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(V_VT(&var) == (VT_ARRAY | VT_UI1), "Got type %#x.\n", V_VT(&var));
+ SafeArrayAccessData(V_ARRAY(&var), &array_data);
+ ok(!memcmp(array_data, "test data", 10), "Got wrong data.\n");
+ SafeArrayUnaccessData(V_ARRAY(&var));
IMoniker_Release(mon);
@@ -405,8 +470,10 @@ static void test_directshow_filter(void)
static void test_codec(void)
{
+ SAFEARRAYBOUND bound = {.cElements = 10};
IParseDisplayName *parser;
IPropertyBag *prop_bag;
+ void *array_data;
IMoniker *mon;
WCHAR buffer[200];
VARIANT var;
@@ -436,10 +503,63 @@ static void test_codec(void)
hr = IPropertyBag_Write(prop_bag, L"FriendlyName", &var);
ok(hr == S_OK, "Write failed: %#x\n", hr);
+ V_VT(&var) = VT_LPWSTR;
+ hr = IPropertyBag_Write(prop_bag, L"FriendlyName", &var);
+ todo_wine ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+
VariantClear(&var);
+ V_VT(&var) = VT_EMPTY;
hr = IPropertyBag_Read(prop_bag, L"FriendlyName", &var, NULL);
- ok(hr == S_OK, "Read failed: %#x\n", hr);
- ok(!wcscmp(V_BSTR(&var), L"test"), "got %s\n", wine_dbgstr_w(V_BSTR(&var)));
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(V_VT(&var) == VT_BSTR, "Got type %#x.\n", V_VT(&var));
+ ok(!wcscmp(V_BSTR(&var), L"test"), "Got name %s.\n", wine_dbgstr_w(V_BSTR(&var)));
+
+ VariantClear(&var);
+ V_VT(&var) = VT_LPWSTR;
+ hr = IPropertyBag_Read(prop_bag, L"FriendlyName", &var, NULL);
+ todo_wine ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+
+ V_VT(&var) = VT_BSTR;
+ hr = IPropertyBag_Read(prop_bag, L"FriendlyName", &var, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(V_VT(&var) == VT_BSTR, "Got type %#x.\n", V_VT(&var));
+ ok(!wcscmp(V_BSTR(&var), L"test"), "Got name %s.\n", wine_dbgstr_w(V_BSTR(&var)));
+
+ V_VT(&var) = VT_I4;
+ V_I4(&var) = 0xdeadbeef;
+ hr = IPropertyBag_Write(prop_bag, L"foobar", &var);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ V_VT(&var) = VT_EMPTY;
+ hr = IPropertyBag_Read(prop_bag, L"foobar", &var, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(V_VT(&var) == VT_I4, "Got type %#x.\n", V_VT(&var));
+ ok(V_I4(&var) == 0xdeadbeef, "Got value %#x.\n", V_I4(&var));
+
+ V_VT(&var) = VT_UI4;
+ hr = IPropertyBag_Read(prop_bag, L"foobar", &var, NULL);
+ todo_wine ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+ V_VT(&var) = VT_BSTR;
+ hr = IPropertyBag_Read(prop_bag, L"foobar", &var, NULL);
+ ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+
+ V_VT(&var) = VT_I4;
+ hr = IPropertyBag_Read(prop_bag, L"foobar", &var, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(V_VT(&var) == VT_I4, "Got type %#x.\n", V_VT(&var));
+ ok(V_I4(&var) == 0xdeadbeef, "Got value %#x.\n", V_I4(&var));
+
+ V_VT(&var) = VT_UI4;
+ hr = IPropertyBag_Write(prop_bag, L"foobar", &var);
+ todo_wine ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+
+ V_VT(&var) = VT_ARRAY | VT_UI1;
+ V_ARRAY(&var) = SafeArrayCreate(VT_UI1, 1, &bound);
+ SafeArrayAccessData(V_ARRAY(&var), &array_data);
+ memcpy(array_data, "test data", 10);
+ SafeArrayUnaccessData(V_ARRAY(&var));
+ hr = IPropertyBag_Write(prop_bag, L"foobar", &var);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
/* unlike DirectShow filters, these are automatically generated, so
* enumerating them will destroy the key */
More information about the wine-cvs
mailing list