[PATCH 1/2] ole32/tests: Add some tests for MonikerCommonPrefixWith().
Nikolay Sivov
nsivov at codeweavers.com
Mon Feb 3 01:20:29 CST 2020
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/ole32/tests/moniker.c | 117 +++++++++++++++++++++++++++++++++++++
1 file changed, 117 insertions(+)
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c
index d485360215..4c8d013e42 100644
--- a/dlls/ole32/tests/moniker.c
+++ b/dlls/ole32/tests/moniker.c
@@ -92,6 +92,24 @@ todo_wine_if(todo)
ok_(__FILE__, line)(type2 == type, "Unexpected moniker type %d.\n", type2);
}
+#define TEST_DISPLAY_NAME(m,name) _test_moniker_name(m, name, __LINE__)
+static void _test_moniker_name(IMoniker *moniker, const WCHAR *name, int line)
+{
+ WCHAR *display_name;
+ IBindCtx *pbc;
+ HRESULT hr;
+
+ hr = CreateBindCtx(0, &pbc);
+ ok_(__FILE__, line)(hr == S_OK, "Failed to create bind context, hr %#x.\n", hr);
+
+ hr = IMoniker_GetDisplayName(moniker, pbc, NULL, &display_name);
+ ok_(__FILE__, line)(hr == S_OK, "Failed to get display name, hr %#x.\n", hr);
+ ok_(__FILE__, line)(!lstrcmpW(display_name, name), "Unexpected display name %s.\n", wine_dbgstr_w(display_name));
+
+ CoTaskMemFree(display_name);
+ IBindCtx_Release(pbc);
+}
+
static IMoniker *create_antimoniker(DWORD level)
{
LARGE_INTEGER pos;
@@ -3221,6 +3239,104 @@ static void test_save_load_filemoniker(void)
IStream_Release(pStm);
}
+static void test_MonikerCommonPrefixWith(void)
+{
+ IMoniker *moniker, *item, *file1, *file2, *composite, *composite2;
+ HRESULT hr;
+
+ moniker = (void *)0xdeadbeef;
+ hr = MonikerCommonPrefixWith(NULL, NULL, &moniker);
+todo_wine {
+ ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+ ok(!moniker, "Unexpected pointer.\n");
+}
+ if (hr == E_NOTIMPL)
+ return;
+
+ hr = CreateItemMoniker(L"!", L"Item", &item);
+ ok(hr == S_OK, "Failed to create a moniker, hr %#x.\n", hr);
+
+ hr = MonikerCommonPrefixWith(item, NULL, &moniker);
+ ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+
+ hr = MonikerCommonPrefixWith(NULL, item, &moniker);
+ ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+
+ hr = MonikerCommonPrefixWith(item, item, &moniker);
+ ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+
+ hr = CreateFileMoniker(L"C:\\test.txt", &file1);
+ ok(hr == S_OK, "Failed to create a moniker, hr %#x.\n", hr);
+
+ hr = MonikerCommonPrefixWith(file1, NULL, &moniker);
+ ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+
+ hr = MonikerCommonPrefixWith(NULL, file1, &moniker);
+ ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+
+ /* F x F */
+ hr = MonikerCommonPrefixWith(file1, file1, &moniker);
+ ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+
+ hr = CreateFileMoniker(L"C:\\a\\test.txt", &file2);
+ ok(hr == S_OK, "Failed to create a moniker, hr %#x.\n", hr);
+
+ /* F1 x F2 */
+ hr = MonikerCommonPrefixWith(file1, file2, &moniker);
+ ok(hr == MK_E_NOPREFIX, "Unexpected hr %#x.\n", hr);
+
+ hr = CreateGenericComposite(file1, item, &composite);
+ ok(hr == S_OK, "Failed to create a moniker, hr %#x.\n", hr);
+
+ hr = CreateGenericComposite(file2, item, &composite2);
+ ok(hr == S_OK, "Failed to create a moniker, hr %#x.\n", hr);
+
+ /* F x (F,I) -> F */
+ hr = MonikerCommonPrefixWith(file1, composite, &moniker);
+ ok(hr == MK_S_ME, "Unexpected hr %#x.\n", hr);
+ ok(moniker == file1, "Unexpected pointer.\n");
+ IMoniker_Release(moniker);
+
+ /* F1 x (F2,I) -> F */
+ hr = MonikerCommonPrefixWith(file1, composite2, &moniker);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ TEST_MONIKER_TYPE(moniker, MKSYS_FILEMONIKER);
+ TEST_DISPLAY_NAME(moniker, L"C:\\");
+ IMoniker_Release(moniker);
+
+ /* (F2,I) x F1 -> F */
+ hr = MonikerCommonPrefixWith(composite2, file1, &moniker);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ TEST_MONIKER_TYPE(moniker, MKSYS_FILEMONIKER);
+ TEST_DISPLAY_NAME(moniker, L"C:\\");
+ IMoniker_Release(moniker);
+
+ /* (F,I) x (F) -> F */
+ hr = MonikerCommonPrefixWith(composite, file1, &moniker);
+ ok(hr == MK_S_HIM, "Unexpected hr %#x.\n", hr);
+ ok(moniker == file1, "Unexpected pointer.\n");
+ IMoniker_Release(moniker);
+
+ /* (F,I) x (F,I) -> (F,I) */
+ hr = MonikerCommonPrefixWith(composite, composite, &moniker);
+ ok(hr == MK_S_US, "Unexpected hr %#x.\n", hr);
+ TEST_MONIKER_TYPE(moniker, MKSYS_GENERICCOMPOSITE);
+ TEST_DISPLAY_NAME(moniker, L"C:\\test.txt!Item");
+ ok(moniker != composite, "Unexpected pointer.\n");
+ IMoniker_Release(moniker);
+
+ /* (F1,I) x (F2,I) -> () */
+ hr = MonikerCommonPrefixWith(composite, composite2, &moniker);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(!moniker, "Unexpected pointer %p.\n", moniker);
+
+ IMoniker_Release(composite2);
+ IMoniker_Release(composite);
+ IMoniker_Release(file2);
+ IMoniker_Release(file1);
+ IMoniker_Release(item);
+}
+
START_TEST(moniker)
{
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
@@ -3235,6 +3351,7 @@ START_TEST(moniker)
test_generic_composite_moniker();
test_pointer_moniker();
test_save_load_filemoniker();
+ test_MonikerCommonPrefixWith();
/* FIXME: test moniker creation funcs and parsing other moniker formats */
--
2.24.1
More information about the wine-devel
mailing list