Nikolay Sivov : ole32/tests: Systematically check for supported moniker interfaces.
Alexandre Julliard
julliard at winehq.org
Mon Sep 27 15:21:45 CDT 2021
Module: wine
Branch: master
Commit: 5aed88a3b3650ac5acc293510bc229067e20bce7
URL: https://source.winehq.org/git/wine.git/?a=commit;h=5aed88a3b3650ac5acc293510bc229067e20bce7
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Sep 27 15:31:36 2021 +0300
ole32/tests: Systematically check for supported moniker interfaces.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ole32/tests/moniker.c | 59 +++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 53 insertions(+), 6 deletions(-)
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c
index ae46db110b6..db068f1426f 100644
--- a/dlls/ole32/tests/moniker.c
+++ b/dlls/ole32/tests/moniker.c
@@ -36,6 +36,21 @@
#include "wine/test.h"
#include "wine/heap.h"
+#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
+static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOOL supported)
+{
+ IUnknown *iface = iface_ptr;
+ HRESULT hr, expected_hr;
+ IUnknown *unk;
+
+ expected_hr = supported ? S_OK : E_NOINTERFACE;
+
+ hr = IUnknown_QueryInterface(iface, iid, (void **)&unk);
+ ok_(__FILE__, line)(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+ if (SUCCEEDED(hr))
+ IUnknown_Release(unk);
+}
+
#define ok_ole_success(hr, func) ok(hr == S_OK, #func " failed with error 0x%08x\n", hr)
#define CHECK_EXPECTED_METHOD(method_name) \
@@ -1896,6 +1911,13 @@ static void test_class_moniker(void)
hr = CreateClassMoniker(&GUID_NULL, &moniker);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ check_interface(moniker, &IID_IMoniker, TRUE);
+ check_interface(moniker, &IID_IPersist, TRUE);
+ check_interface(moniker, &IID_IPersistStream, TRUE);
+ check_interface(moniker, &CLSID_ClassMoniker, TRUE);
+ check_interface(moniker, &IID_IROTData, TRUE);
+ check_interface(moniker, &IID_IMarshal, TRUE);
+
hr = IMoniker_GetSizeMax(moniker, &size);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
ok(size.QuadPart == 20, "Unexpected size %u.\n", size.LowPart);
@@ -2222,6 +2244,14 @@ static void test_file_monikers(void)
hr = CreateFileMoniker(filename, &moniker);
ok(hr == S_OK, "Failed to create a moniker, hr %#x.\n", hr);
+ check_interface(moniker, &IID_IMoniker, TRUE);
+todo_wine
+ check_interface(moniker, &IID_IPersist, FALSE);
+ check_interface(moniker, &IID_IPersistStream, TRUE);
+ check_interface(moniker, &CLSID_FileMoniker, TRUE);
+ check_interface(moniker, &IID_IROTData, TRUE);
+ check_interface(moniker, &IID_IMarshal, TRUE);
+
hr = IMoniker_BindToStorage(moniker, NULL, NULL, &IID_IStorage, (void **)&storage);
ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
@@ -2753,6 +2783,14 @@ static void test_anti_moniker(void)
hr = CreateAntiMoniker(&moniker);
ok_ole_success(hr, CreateAntiMoniker);
+ check_interface(moniker, &IID_IMoniker, TRUE);
+todo_wine
+ check_interface(moniker, &IID_IPersist, FALSE);
+ check_interface(moniker, &IID_IPersistStream, TRUE);
+ check_interface(moniker, &CLSID_AntiMoniker, TRUE);
+ check_interface(moniker, &IID_IROTData, TRUE);
+ check_interface(moniker, &IID_IMarshal, TRUE);
+
hr = IMoniker_QueryInterface(moniker, &CLSID_AntiMoniker, (void **)&unknown);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
ok(unknown == (IUnknown *)moniker, "Unexpected interface.\n");
@@ -3067,6 +3105,13 @@ static void test_generic_composite_moniker(void)
hr = CreateGenericComposite(moniker1, moniker2, &moniker);
ok(hr == S_OK, "Failed to create a moniker, hr %#x.\n", hr);
+ check_interface(moniker, &IID_IMoniker, TRUE);
+todo_wine
+ check_interface(moniker, &IID_IPersist, FALSE);
+ check_interface(moniker, &IID_IPersistStream, TRUE);
+ check_interface(moniker, &IID_IROTData, TRUE);
+ check_interface(moniker, &IID_IMarshal, TRUE);
+
hr = CreateGenericComposite(moniker1, moniker2, &moniker);
ok(hr == S_OK, "Failed to create composite, hr %#x.\n", hr);
TEST_MONIKER_TYPE(moniker, MKSYS_GENERICCOMPOSITE);
@@ -3253,7 +3298,6 @@ static void test_pointer_moniker(void)
FILETIME filetime;
IUnknown *unknown;
IStream *stream;
- IROTData *rotdata;
LPOLESTR display_name;
IMarshal *marshal;
LARGE_INTEGER pos;
@@ -3267,6 +3311,14 @@ static void test_pointer_moniker(void)
hr = CreatePointerMoniker((IUnknown *)&factory.IClassFactory_iface, &moniker);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ check_interface(moniker, &IID_IMoniker, TRUE);
+todo_wine
+ check_interface(moniker, &IID_IPersist, FALSE);
+ check_interface(moniker, &IID_IPersistStream, TRUE);
+ check_interface(moniker, &CLSID_PointerMoniker, TRUE);
+ check_interface(moniker, &IID_IMarshal, TRUE);
+ check_interface(moniker, &IID_IROTData, FALSE);
+
hr = IMoniker_QueryInterface(moniker, &IID_IMoniker, NULL);
ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
@@ -3318,11 +3370,6 @@ static void test_pointer_moniker(void)
hr = IMoniker_IsDirty(moniker);
ok(hr == S_FALSE, "IMoniker_IsDirty should return S_FALSE, not 0x%08x\n", hr);
- /* IROTData::GetComparisonData test */
-
- hr = IMoniker_QueryInterface(moniker, &IID_IROTData, (void **)&rotdata);
- ok(hr == E_NOINTERFACE, "IMoniker_QueryInterface(IID_IROTData) should have returned E_NOINTERFACE instead of 0x%08x\n", hr);
-
/* Saving */
hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
More information about the wine-cvs
mailing list