Module: wine Branch: master Commit: aa1cfbbcc82d19933c4d32cc96996a4d9fe78b0d URL: https://source.winehq.org/git/wine.git/?a=commit;h=aa1cfbbcc82d19933c4d32cc9...
Author: Piotr Caban piotr@codeweavers.com Date: Thu Oct 11 19:12:19 2018 +0200
ole32/tests: Add free threaded marshaler GetUnmarshalClass tests.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ole32/tests/marshal.c | 50 +++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 21 deletions(-)
diff --git a/dlls/ole32/tests/marshal.c b/dlls/ole32/tests/marshal.c index 3a3f9e7..c53acf2 100644 --- a/dlls/ole32/tests/marshal.c +++ b/dlls/ole32/tests/marshal.c @@ -3205,6 +3205,7 @@ static void test_freethreadedmarshaler(void) IStream *pStream; IUnknown *pProxy; static const LARGE_INTEGER llZero; + CLSID clsid;
cLocks = 0; hr = CoCreateFreeThreadedMarshaler(NULL, &pFTUnknown); @@ -3218,6 +3219,12 @@ static void test_freethreadedmarshaler(void)
/* inproc normal marshaling */
+ hr = IMarshal_GetUnmarshalClass(pFTMarshal, &IID_IClassFactory, + &Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL, &clsid); + ok_ole_success(hr, IMarshal_GetUnmarshalClass); + ok(IsEqualIID(&clsid, &CLSID_InProcFreeMarshaler), "clsid = %s\n", + wine_dbgstr_guid(&clsid)); + hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, &Test_ClassFactory, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); ok_ole_success(hr, IMarshal_MarshalInterface); @@ -3234,27 +3241,6 @@ static void test_freethreadedmarshaler(void)
ok_no_locks();
-/* native doesn't allow us to unmarshal or release the stream data, - * presumably because it wants us to call CoMarshalInterface instead */ - if (0) - { - /* local normal marshaling */ - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, &Test_ClassFactory, MSHCTX_LOCAL, NULL, MSHLFLAGS_NORMAL); - ok_ole_success(hr, IMarshal_MarshalInterface); - - ok_more_than_one_lock(); - - test_freethreadedmarshaldata(pStream, MSHCTX_LOCAL, &Test_ClassFactory, MSHLFLAGS_NORMAL); - - IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); - hr = IMarshal_ReleaseMarshalData(pFTMarshal, pStream); - ok_ole_success(hr, IMarshal_ReleaseMarshalData); - - ok_no_locks(); - } - /* inproc table-strong marshaling */
IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); @@ -3332,6 +3318,28 @@ static void test_freethreadedmarshaler(void)
ok_no_locks();
+ /* local normal marshaling */ + + hr = IMarshal_GetUnmarshalClass(pFTMarshal, &IID_IClassFactory, + &Test_ClassFactory, MSHCTX_LOCAL, NULL, MSHLFLAGS_NORMAL, &clsid); + ok_ole_success(hr, IMarshal_GetUnmarshalClass); + ok(IsEqualIID(&clsid, &CLSID_StdMarshal), "clsid = %s\n", + wine_dbgstr_guid(&clsid)); + + IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); + hr = IMarshal_MarshalInterface(pFTMarshal, pStream, &IID_IClassFactory, &Test_ClassFactory, MSHCTX_LOCAL, NULL, MSHLFLAGS_NORMAL); + ok_ole_success(hr, IMarshal_MarshalInterface); + + ok_more_than_one_lock(); + + test_freethreadedmarshaldata(pStream, MSHCTX_LOCAL, &Test_ClassFactory, MSHLFLAGS_NORMAL); + + IStream_Seek(pStream, llZero, STREAM_SEEK_SET, NULL); + hr = CoReleaseMarshalData(pStream); + ok_ole_success(hr, CoReleaseMarshalData); + + ok_no_locks(); + IStream_Release(pStream); IMarshal_Release(pFTMarshal); }