Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/ole32/tests/moniker.c | 47 +++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 8 deletions(-)
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c index b65c0115ca..e4d693b442 100644 --- a/dlls/ole32/tests/moniker.c +++ b/dlls/ole32/tests/moniker.c @@ -1531,12 +1531,11 @@ todo_wine_if(moniker_type == MKSYS_GENERICCOMPOSITE)
static void test_class_moniker(void) { + IMoniker *moniker, *inverse, *reduced; HRESULT hr; - IMoniker *moniker; DWORD moniker_type; DWORD hash; IBindCtx *bindctx; - IMoniker *inverse; IUnknown *unknown; FILETIME filetime;
@@ -1597,8 +1596,6 @@ todo_wine ok_ole_success(hr, IMoniker_BindToStorage); IUnknown_Release(unknown);
- IBindCtx_Release(bindctx); - hr = IMoniker_Inverse(moniker, &inverse); ok(hr == S_OK, "Failed to get inverse, hr %#x.\n", hr); hr = IMoniker_IsSystemMoniker(inverse, &moniker_type); @@ -1606,13 +1603,22 @@ todo_wine ok(moniker_type == MKSYS_ANTIMONIKER, "Unexpected moniker type %d.\n", moniker_type); IMoniker_Release(inverse);
+ /* Reduce() */ + hr = IMoniker_Reduce(moniker, NULL, MKRREDUCE_ALL, NULL, &reduced); + ok(hr == MK_S_REDUCED_TO_SELF, "Unexpected hr %#x.\n", hr); + ok(reduced == moniker, "Unexpected moniker.\n"); + IMoniker_Release(reduced); + + IBindCtx_Release(bindctx); + IMoniker_Release(moniker); }
static void test_file_moniker(WCHAR* path) { - IMoniker *moniker1 = NULL, *moniker2 = NULL, *inverse; + IMoniker *moniker1 = NULL, *moniker2 = NULL, *inverse, *reduced; DWORD moniker_type; + IBindCtx *bind_ctx; IStream *stream; IUnknown *unk; HRESULT hr; @@ -1654,6 +1660,21 @@ todo_wine hr = IMoniker_IsEqual(moniker1, moniker2); ok_ole_success(hr, IsEqual);
+ /* Reduce() */ + hr = CreateBindCtx(0, &bind_ctx); + ok(hr == S_OK, "Failed to create bind context, hr %#x.\n", hr); + + hr = IMoniker_Reduce(moniker1, NULL, MKRREDUCE_ALL, NULL, &reduced); +todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + + hr = IMoniker_Reduce(moniker1, bind_ctx, MKRREDUCE_ALL, NULL, &reduced); + ok(hr == MK_S_REDUCED_TO_SELF, "Unexpected hr %#x.\n", hr); + ok(reduced == moniker1, "Unexpected moniker.\n"); + IMoniker_Release(reduced); + + IBindCtx_Release(bind_ctx); + IStream_Release(stream); if (moniker1) IMoniker_Release(moniker1); @@ -1761,7 +1782,7 @@ static void test_item_moniker(void) { L"%", L"A", 0x41 }, { L"%", L"a", 0x41 }, }; - IMoniker *moniker, *moniker2; + IMoniker *moniker, *moniker2, *reduced; HRESULT hr; DWORD moniker_type, i; DWORD hash; @@ -1919,6 +1940,12 @@ todo_wine ok(moniker_type == MKSYS_ANTIMONIKER, "Unexpected moniker type %d.\n", moniker_type); IMoniker_Release(inverse);
+ /* Reduce() */ + hr = IMoniker_Reduce(moniker, NULL, MKRREDUCE_ALL, NULL, &reduced); + ok(hr == MK_S_REDUCED_TO_SELF, "Unexpected hr %#x.\n", hr); + ok(reduced == moniker, "Unexpected moniker.\n"); + IMoniker_Release(reduced); + IMoniker_Release(moniker);
/* IsEqual */ @@ -1961,13 +1988,12 @@ static void stream_write_dword(IStream *stream, DWORD value)
static void test_anti_moniker(void) { - IMoniker *moniker, *moniker2, *moniker3; + IMoniker *moniker, *moniker2, *moniker3, *inverse, *reduced; HRESULT hr; DWORD moniker_type; DWORD hash; IBindCtx *bindctx; FILETIME filetime; - IMoniker *inverse; IUnknown *unknown; static const WCHAR expected_display_name[] = { '\','.','.',0 }; IStream *stream; @@ -2143,6 +2169,11 @@ todo_wine
IStream_Release(stream);
+ hr = IMoniker_Reduce(moniker, NULL, MKRREDUCE_ALL, NULL, &reduced); + ok(hr == MK_S_REDUCED_TO_SELF, "Unexpected hr %#x.\n", hr); + ok(reduced == moniker, "Unexpected moniker.\n"); + IMoniker_Release(reduced); + IBindCtx_Release(bindctx); IMoniker_Release(moniker); IMoniker_Release(moniker2);
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/ole32/tests/moniker.c | 96 +++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-)
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c index e4d693b442..9806777698 100644 --- a/dlls/ole32/tests/moniker.c +++ b/dlls/ole32/tests/moniker.c @@ -1532,6 +1532,7 @@ todo_wine_if(moniker_type == MKSYS_GENERICCOMPOSITE) static void test_class_moniker(void) { IMoniker *moniker, *inverse, *reduced; + IEnumMoniker *enummoniker; HRESULT hr; DWORD moniker_type; DWORD hash; @@ -1609,6 +1610,21 @@ todo_wine ok(reduced == moniker, "Unexpected moniker.\n"); IMoniker_Release(reduced);
+ /* Enum() */ + enummoniker = (void *)0xdeadbeef; + hr = IMoniker_Enum(moniker, TRUE, &enummoniker); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!enummoniker, "Unexpected pointer.\n"); + + enummoniker = (void *)0xdeadbeef; + hr = IMoniker_Enum(moniker, FALSE, &enummoniker); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!enummoniker, "Unexpected pointer.\n"); + + hr = IMoniker_Enum(moniker, FALSE, NULL); +todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + IBindCtx_Release(bindctx);
IMoniker_Release(moniker); @@ -1617,6 +1633,7 @@ todo_wine static void test_file_moniker(WCHAR* path) { IMoniker *moniker1 = NULL, *moniker2 = NULL, *inverse, *reduced; + IEnumMoniker *enummoniker; DWORD moniker_type; IBindCtx *bind_ctx; IStream *stream; @@ -1673,6 +1690,21 @@ todo_wine ok(reduced == moniker1, "Unexpected moniker.\n"); IMoniker_Release(reduced);
+ /* Enum() */ + enummoniker = (void *)0xdeadbeef; + hr = IMoniker_Enum(moniker1, TRUE, &enummoniker); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!enummoniker, "Unexpected pointer.\n"); + + enummoniker = (void *)0xdeadbeef; + hr = IMoniker_Enum(moniker1, FALSE, &enummoniker); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!enummoniker, "Unexpected pointer.\n"); + + hr = IMoniker_Enum(moniker1, FALSE, NULL); +todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + IBindCtx_Release(bind_ctx);
IStream_Release(stream); @@ -1792,6 +1824,7 @@ static void test_item_moniker(void) static const WCHAR wszDelimiter[] = {'!',0}; static const WCHAR wszObjectName[] = {'T','e','s','t',0}; static const WCHAR expected_display_name[] = { '!','T','e','s','t',0 }; + IEnumMoniker *enummoniker; WCHAR *display_name; LARGE_INTEGER pos; IStream *stream; @@ -1946,6 +1979,21 @@ todo_wine ok(reduced == moniker, "Unexpected moniker.\n"); IMoniker_Release(reduced);
+ /* Enum() */ + enummoniker = (void *)0xdeadbeef; + hr = IMoniker_Enum(moniker, TRUE, &enummoniker); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!enummoniker, "Unexpected pointer.\n"); + + enummoniker = (void *)0xdeadbeef; + hr = IMoniker_Enum(moniker, FALSE, &enummoniker); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!enummoniker, "Unexpected pointer.\n"); + + hr = IMoniker_Enum(moniker, FALSE, NULL); +todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + IMoniker_Release(moniker);
/* IsEqual */ @@ -1996,6 +2044,7 @@ static void test_anti_moniker(void) FILETIME filetime; IUnknown *unknown; static const WCHAR expected_display_name[] = { '\','.','.',0 }; + IEnumMoniker *enummoniker; IStream *stream; WCHAR *name;
@@ -2169,11 +2218,27 @@ todo_wine
IStream_Release(stream);
+ /* Reduce() */ hr = IMoniker_Reduce(moniker, NULL, MKRREDUCE_ALL, NULL, &reduced); ok(hr == MK_S_REDUCED_TO_SELF, "Unexpected hr %#x.\n", hr); ok(reduced == moniker, "Unexpected moniker.\n"); IMoniker_Release(reduced);
+ /* Enum() */ + enummoniker = (void *)0xdeadbeef; + hr = IMoniker_Enum(moniker, TRUE, &enummoniker); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!enummoniker, "Unexpected pointer.\n"); + + enummoniker = (void *)0xdeadbeef; + hr = IMoniker_Enum(moniker, FALSE, &enummoniker); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(!enummoniker, "Unexpected pointer.\n"); + + hr = IMoniker_Enum(moniker, FALSE, NULL); +todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + IBindCtx_Release(bindctx); IMoniker_Release(moniker); IMoniker_Release(moniker2); @@ -2181,6 +2246,7 @@ todo_wine
static void test_generic_composite_moniker(void) { + IEnumMoniker *enummoniker; HRESULT hr; IMoniker *moniker; IMoniker *moniker1; @@ -2265,18 +2331,31 @@ todo_wine ok(moniker_type == MKSYS_GENERICCOMPOSITE, "Unexpected moniker type %d.\n", moniker_type); IMoniker_Release(inverse);
+ /* Enum() */ + hr = IMoniker_Enum(moniker, TRUE, &enummoniker); + ok(hr == S_OK, "Failed to get enumerator, hr %#x.\n", hr); + IEnumMoniker_Release(enummoniker); + + hr = IMoniker_Enum(moniker, FALSE, &enummoniker); + ok(hr == S_OK, "Failed to get enumerator, hr %#x.\n", hr); + IEnumMoniker_Release(enummoniker); + + hr = IMoniker_Enum(moniker, FALSE, NULL); +todo_wine + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + IMoniker_Release(moniker); }
static void test_pointer_moniker(void) { + IMoniker *moniker, *inverse; + IEnumMoniker *enummoniker; HRESULT hr; - IMoniker *moniker; DWORD moniker_type; DWORD hash; IBindCtx *bindctx; FILETIME filetime; - IMoniker *inverse; IUnknown *unknown; IStream *stream; IROTData *rotdata; @@ -2383,6 +2462,19 @@ todo_wine
IBindCtx_Release(bindctx);
+ /* Enum() */ + enummoniker = (void *)0xdeadbeef; + hr = IMoniker_Enum(moniker, TRUE, &enummoniker); +todo_wine + ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr); + ok(!enummoniker, "Unexpected pointer.\n"); + + enummoniker = (void *)0xdeadbeef; + hr = IMoniker_Enum(moniker, FALSE, &enummoniker); +todo_wine + ok(hr == E_NOTIMPL, "Unexpected hr %#x.\n", hr); + ok(!enummoniker, "Unexpected pointer.\n"); + IMoniker_Release(moniker); }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=62345
Your paranoid android.
=== wxppro (32 bit report) ===
ole32: moniker.c:2470: Test failed: Unexpected pointer. moniker.c:2476: Test failed: Unexpected pointer.
=== w2003std (32 bit report) ===
ole32: moniker.c:2470: Test failed: Unexpected pointer. moniker.c:2476: Test failed: Unexpected pointer.
On 12/19/19 5:31 PM, Marvin wrote:
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=62345
Your paranoid android.
=== wxppro (32 bit report) ===
ole32: moniker.c:2470: Test failed: Unexpected pointer. moniker.c:2476: Test failed: Unexpected pointer.
=== w2003std (32 bit report) ===
ole32: moniker.c:2470: Test failed: Unexpected pointer. moniker.c:2476: Test failed: Unexpected pointer.
Okay, ignore patch 2/2 please, older versions differ apparently.