Module: wine Branch: master Commit: 292f8266b951e8daef0067acb1ad3e98f218420d URL: http://source.winehq.org/git/wine.git/?a=commit;h=292f8266b951e8daef0067acb1...
Author: Huw Davies huw@codeweavers.com Date: Tue Jun 6 11:46:54 2017 +0100
ole32/tests: Add tests for InitNew().
Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ole32/tests/ole2.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+)
diff --git a/dlls/ole32/tests/ole2.c b/dlls/ole32/tests/ole2.c index 2db6de9..b30f63b 100644 --- a/dlls/ole32/tests/ole2.c +++ b/dlls/ole32/tests/ole2.c @@ -2300,6 +2300,120 @@ static void test_data_cache_init(void) } }
+static void test_data_cache_initnew(void) +{ + HRESULT hr; + IOleCache2 *cache; + IPersistStorage *persist; + IStorage *stg_dib, *stg_mf, *stg_wine; + CLSID clsid; + static const STATDATA initnew_expect[] = + { + {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 1 }, + {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 1 }, + }; + static const STATDATA initnew2_expect[] = + { + {{ CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, 0, NULL, 1 }, + {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 2 }, + {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 2 }, + }; + static const STATDATA initnew3_expect[] = + { + {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 1 }, + {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 1 }, + {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 2 }, + {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 2 }, + {{ CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, 0, NULL, 3 }, + }; + static const STATDATA initnew4_expect[] = + { + {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 2 }, + {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 2 }, + {{ CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, 0, NULL, 3 }, + {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 4 }, + {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 4 }, + }; + + hr = StgCreateDocfile( NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DELETEONRELEASE, 0, &stg_dib ); + ok( hr == S_OK, "got %08x\n", hr); + hr = IStorage_SetClass( stg_dib, &CLSID_Picture_Dib ); + ok( hr == S_OK, "got %08x\n", hr); + + hr = StgCreateDocfile( NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DELETEONRELEASE, 0, &stg_mf ); + ok( hr == S_OK, "got %08x\n", hr); + hr = IStorage_SetClass( stg_mf, &CLSID_Picture_Metafile ); + ok( hr == S_OK, "got %08x\n", hr); + + hr = StgCreateDocfile( NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DELETEONRELEASE, 0, &stg_wine ); + ok( hr == S_OK, "got %08x\n", hr); + hr = IStorage_SetClass( stg_wine, &CLSID_WineTestOld ); + ok( hr == S_OK, "got %08x\n", hr); + + hr = CreateDataCache( NULL, &CLSID_WineTestOld, &IID_IOleCache2, (void **)&cache ); + ok( hr == S_OK, "got %08x\n", hr ); + IOleCache2_QueryInterface( cache, &IID_IPersistStorage, (void **) &persist ); + + hr = IPersistStorage_InitNew( persist, stg_dib ); + ok( hr == S_OK, "got %08x\n", hr); + + hr = IPersistStorage_GetClassID( persist, &clsid ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( IsEqualCLSID( &clsid, &CLSID_Picture_Dib ), "got %s\n", wine_dbgstr_guid( &clsid ) ); + + check_enum_cache( cache, initnew_expect, 2 ); + + hr = IPersistStorage_InitNew( persist, stg_mf ); + ok( hr == CO_E_ALREADYINITIALIZED, "got %08x\n", hr); + + hr = IPersistStorage_HandsOffStorage( persist ); + ok( hr == S_OK, "got %08x\n", hr); + + hr = IPersistStorage_GetClassID( persist, &clsid ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( IsEqualCLSID( &clsid, &CLSID_Picture_Dib ), "got %s\n", wine_dbgstr_guid( &clsid ) ); + + hr = IPersistStorage_InitNew( persist, stg_mf ); + ok( hr == S_OK, "got %08x\n", hr); + + hr = IPersistStorage_GetClassID( persist, &clsid ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( IsEqualCLSID( &clsid, &CLSID_Picture_Metafile ), "got %s\n", wine_dbgstr_guid( &clsid ) ); + + check_enum_cache( cache, initnew2_expect, 3 ); + + hr = IPersistStorage_HandsOffStorage( persist ); + ok( hr == S_OK, "got %08x\n", hr); + + hr = IPersistStorage_InitNew( persist, stg_dib ); + ok( hr == S_OK, "got %08x\n", hr); + + hr = IPersistStorage_GetClassID( persist, &clsid ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( IsEqualCLSID( &clsid, &CLSID_Picture_Dib ), "got %s\n", wine_dbgstr_guid( &clsid ) ); + + check_enum_cache( cache, initnew3_expect, 5 ); + + hr = IPersistStorage_HandsOffStorage( persist ); + ok( hr == S_OK, "got %08x\n", hr); + + hr = IPersistStorage_InitNew( persist, stg_wine ); + ok( hr == S_OK, "got %08x\n", hr); + + hr = IPersistStorage_GetClassID( persist, &clsid ); + ok( hr == S_OK, "got %08x\n", hr ); + ok( IsEqualCLSID( &clsid, &CLSID_WineTestOld ), "got %s\n", wine_dbgstr_guid( &clsid ) ); + + check_enum_cache( cache, initnew4_expect, 5 ); + + IStorage_Release( stg_wine ); + IStorage_Release( stg_mf ); + IStorage_Release( stg_dib ); + + IPersistStorage_Release( persist ); + IOleCache2_Release( cache ); +} + static void test_default_handler(void) { HRESULT hr; @@ -3054,6 +3168,7 @@ START_TEST(ole2) test_data_cache_dib_contents_stream( 1 ); test_data_cache_bitmap(); test_data_cache_init(); + test_data_cache_initnew(); test_default_handler(); test_runnable(); test_OleRun();