Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/ole32/tests/moniker.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+)
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c index 7b4bf5c0fa..7e77847837 100644 --- a/dlls/ole32/tests/moniker.c +++ b/dlls/ole32/tests/moniker.c @@ -2025,6 +2025,9 @@ todo_wine IMoniker_Release(moniker2);
/* Load with composed number > 1. */ + hr = CreateAntiMoniker(&moniker2); + ok(hr == S_OK, "Failed to create moniker, hr %#x.\n", hr); + hr = CreateStreamOnHGlobal(NULL, TRUE, &stream); ok(hr == S_OK, "Failed to create a stream, hr %#x.\n", hr);
@@ -2034,6 +2037,14 @@ todo_wine todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMoniker_IsEqual(moniker, moniker2); +todo_wine + ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr); + + hr = IMoniker_IsEqual(moniker2, moniker); +todo_wine + ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr); + hr = IMoniker_Hash(moniker, &hash); ok(hr == S_OK, "Failed to get hash value, hr %#x.\n", hr); todo_wine @@ -2076,6 +2087,14 @@ todo_wine todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMoniker_IsEqual(moniker, moniker2); +todo_wine + ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr); + + hr = IMoniker_IsEqual(moniker2, moniker); +todo_wine + ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr); + hr = IMoniker_Hash(moniker, &hash); ok(hr == S_OK, "Failed to get hash value, hr %#x.\n", hr); todo_wine @@ -2087,10 +2106,27 @@ todo_wine ok(!lstrcmpW(name, L""), "Unexpected display name %s.\n", wine_dbgstr_w(name)); CoTaskMemFree(name);
+ /* Back to initial value. */ + stream_write_dword(stream, 1); + + hr = IMoniker_Load(moniker, stream); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMoniker_IsEqual(moniker, moniker2); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMoniker_IsEqual(moniker2, moniker); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMoniker_IsEqual(moniker, NULL); +todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + IStream_Release(stream);
IBindCtx_Release(bindctx); IMoniker_Release(moniker); + IMoniker_Release(moniker2); }
static void test_generic_composite_moniker(void)
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/ole32/tests/moniker.c | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-)
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c index 7e77847837..b65c0115ca 100644 --- a/dlls/ole32/tests/moniker.c +++ b/dlls/ole32/tests/moniker.c @@ -1747,6 +1747,20 @@ static void test_item_moniker(void) { NULL, L"Item1", NULL, L"Item2", S_FALSE }, { NULL, L"Item1", NULL, L"ITEM1", S_OK }, }; + static const struct + { + const WCHAR *delim; + const WCHAR *item; + DWORD hash; + } hash_tests[] = + { + { L"!", L"Test", 0x73c }, + { L"%", L"Test", 0x73c }, + { L"%", L"TEST", 0x73c }, + { L"%", L"T", 0x54 }, + { L"%", L"A", 0x41 }, + { L"%", L"a", 0x41 }, + }; IMoniker *moniker, *moniker2; HRESULT hr; DWORD moniker_type, i; @@ -1851,6 +1865,20 @@ todo_wine IMoniker_Release(moniker2); IMoniker_Release(moniker);
+ /* Hashing */ + + for (i = 0; i < ARRAY_SIZE(hash_tests); ++i) + { + hr = CreateItemMoniker(hash_tests[i].delim, hash_tests[i].item, &moniker); + ok(hr == S_OK, "Failed to create a moniker, hr %#x.\n", hr); + + hr = IMoniker_Hash(moniker, &hash); + ok(hr == S_OK, "Failed to get hash value, hr %#x.\n", hr); + ok(hash == hash_tests[i].hash, "%d: unexpected hash value %#x.\n", i, hash); + + IMoniker_Release(moniker); + } + hr = CreateItemMoniker(wszDelimiter, wszObjectName, &moniker); ok_ole_success(hr, CreateItemMoniker);
@@ -1860,15 +1888,6 @@ todo_wine expected_item_moniker_comparison_data, sizeof(expected_item_moniker_comparison_data), 54, expected_display_name);
- /* Hashing */ - - hr = IMoniker_Hash(moniker, &hash); - ok_ole_success(hr, IMoniker_Hash); - - ok(hash == 0x73c, - "Hash value != 0x73c, instead was 0x%08x\n", - hash); - /* IsSystemMoniker test */
hr = IMoniker_IsSystemMoniker(moniker, &moniker_type);
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/ole32/tests/propvariant.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/dlls/ole32/tests/propvariant.c b/dlls/ole32/tests/propvariant.c index 18ecfa6528..2b7e6d7285 100644 --- a/dlls/ole32/tests/propvariant.c +++ b/dlls/ole32/tests/propvariant.c @@ -367,6 +367,19 @@ static void test_copy(void) hr = PropVariantClear(&propvarDst); ok(hr == S_OK, "PropVariantClear(...VT_BSTR...) failed\n");
+ /* BSTR with embedded null */ + propvarSrc.vt = VT_BSTR; + U(propvarSrc).bstrVal = SysAllocStringLen(L"Test Str\0ing", 12); + hr = PropVariantCopy(&propvarDst, &propvarSrc); + ok(hr == S_OK, "Failed to copy propvar, hr %#x.\n", hr); + ok(SysStringLen(U(propvarDst).bstrVal) == 8, "Unexpected copy length.\n"); + ok(SysStringLen(U(propvarSrc).bstrVal) == 12, "Unexpected source length.\n"); + ok(!lstrcmpW(U(propvarSrc).bstrVal, U(propvarDst).bstrVal), "BSTR not copied properly\n"); + hr = PropVariantClear(&propvarSrc); + ok(hr == S_OK, "Failed to clear propvar, hr %#x.\n", hr); + hr = PropVariantClear(&propvarDst); + ok(hr == S_OK, "Failed to clear propvar, hr %#x.\n", hr); + propvarSrc.vt = VT_LPWSTR; U(propvarSrc).pwszVal = wszTestString; hr = PropVariantCopy(&propvarDst, &propvarSrc);