Nikolay Sivov : ole32/tests: Add some tests for CommonPrefixWith().
Alexandre Julliard
julliard at winehq.org
Mon Sep 27 15:21:45 CDT 2021
Module: wine
Branch: master
Commit: 1f261967ac4ebc222ae83705a11d972c175872c8
URL: https://source.winehq.org/git/wine.git/?a=commit;h=1f261967ac4ebc222ae83705a11d972c175872c8
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Sep 27 15:31:37 2021 +0300
ole32/tests: Add some tests for CommonPrefixWith().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ole32/compositemoniker.c | 1 +
dlls/ole32/tests/moniker.c | 78 ++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 78 insertions(+), 1 deletion(-)
diff --git a/dlls/ole32/compositemoniker.c b/dlls/ole32/compositemoniker.c
index 0907950cb17..efb0e9de9e8 100644
--- a/dlls/ole32/compositemoniker.c
+++ b/dlls/ole32/compositemoniker.c
@@ -934,6 +934,7 @@ CompositeMonikerImpl_CommonPrefixWith(IMoniker* iface, IMoniker* pmkOther,
if (IMoniker_IsEqual(pmkOther,mostLeftMk1)==S_OK){
*ppmkPrefix=pmkOther;
+ IMoniker_AddRef(*ppmkPrefix);
return MK_S_HIM;
}
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c
index db068f1426f..ed55ec3e825 100644
--- a/dlls/ole32/tests/moniker.c
+++ b/dlls/ole32/tests/moniker.c
@@ -3042,7 +3042,7 @@ static void test_generic_composite_moniker(void)
{ "CI1I2", "A3", MKSYS_ANTIMONIKER, L"\\.." },
{ "CI1I3", "CA1I2", MKSYS_GENERICCOMPOSITE, L"!I1!I2" },
};
- IMoniker *moniker, *inverse, *moniker1, *moniker2;
+ IMoniker *moniker, *inverse, *moniker1, *moniker2, *moniker3;
IEnumMoniker *enummoniker;
IRunningObjectTable *rot;
DWORD hash, cookie;
@@ -3284,6 +3284,66 @@ todo_wine
IMoniker_Release(moniker);
IMoniker_Release(moniker1);
+ /* CommonPrefixWith() */
+ hr = create_moniker_from_desc("CI1I2", &moniker);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = create_moniker_from_desc("CI1I2", &moniker1);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ moniker2 = (void *)0xdeadbeef;
+ hr = IMoniker_CommonPrefixWith(moniker, NULL, &moniker2);
+todo_wine
+ ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
+ ok(!moniker2, "Unexpected pointer.\n");
+
+ /* With itself */
+ hr = IMoniker_CommonPrefixWith(moniker, moniker, &moniker2);
+ ok(hr == MK_S_US, "Unexpected hr %#x.\n", hr);
+todo_wine
+ ok(moniker2 != moniker, "Unexpected object.\n");
+ TEST_DISPLAY_NAME(moniker2, L"!I1!I2");
+ IMoniker_Release(moniker2);
+
+ /* Equal composites */
+ hr = IMoniker_CommonPrefixWith(moniker, moniker1, &moniker2);
+ ok(hr == MK_S_US, "Unexpected hr %#x.\n", hr);
+todo_wine
+ ok(moniker2 != moniker && moniker2 != moniker1, "Unexpected object.\n");
+ hr = IMoniker_IsEqual(moniker, moniker2);
+todo_wine
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ IMoniker_Release(moniker2);
+
+ hr = create_moniker_from_desc("I2", &moniker2);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMoniker_CommonPrefixWith(moniker, moniker2, &moniker3);
+ ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+ IMoniker_Release(moniker2);
+
+ hr = create_moniker_from_desc("I1", &moniker2);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMoniker_CommonPrefixWith(moniker, moniker2, &moniker3);
+ ok(hr == MK_S_HIM, "Unexpected hr %#x.\n", hr);
+ hr = IMoniker_IsEqual(moniker2, moniker3);
+todo_wine
+ ok(hr == S_OK && moniker3 != moniker2, "Unexpected object.\n");
+ IMoniker_Release(moniker3);
+
+ hr = IMoniker_CommonPrefixWith(moniker2, moniker, &moniker3);
+todo_wine
+ ok(hr == MK_S_ME, "Unexpected hr %#x.\n", hr);
+ if (SUCCEEDED(hr))
+ {
+ hr = IMoniker_IsEqual(moniker2, moniker3);
+ ok(hr == S_OK && moniker3 != moniker2, "Unexpected object.\n");
+ IMoniker_Release(moniker3);
+ }
+
+ IMoniker_Release(moniker2);
+
+ IMoniker_Release(moniker);
+ IMoniker_Release(moniker1);
+
IBindCtx_Release(bindctx);
}
@@ -3720,11 +3780,15 @@ todo_wine {
hr = CreateItemMoniker(L"!", L"Item", &item);
ok(hr == S_OK, "Failed to create a moniker, hr %#x.\n", hr);
+ moniker = (void *)0xdeadbeef;
hr = MonikerCommonPrefixWith(item, NULL, &moniker);
ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+ ok(!moniker, "Unexpected pointer.\n");
+ moniker = (void *)0xdeadbeef;
hr = MonikerCommonPrefixWith(NULL, item, &moniker);
ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+ ok(!moniker, "Unexpected pointer.\n");
hr = MonikerCommonPrefixWith(item, item, &moniker);
ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
@@ -3796,6 +3860,18 @@ todo_wine {
IMoniker_Release(composite2);
IMoniker_Release(composite);
+
+ /* (I1,(I2,I3)) x ((I1,I2),I4) */
+ hr = create_moniker_from_desc("CI1CI2I3", &composite);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = create_moniker_from_desc("CCI1I2I4", &composite2);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = MonikerCommonPrefixWith(composite, composite2, &moniker);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ TEST_MONIKER_TYPE(moniker, MKSYS_GENERICCOMPOSITE);
+ TEST_DISPLAY_NAME(moniker, L"!I1!I2");
+ IMoniker_Release(moniker);
+
IMoniker_Release(file2);
IMoniker_Release(file1);
IMoniker_Release(item);
More information about the wine-cvs
mailing list