From 292f8266b951e8daef0067acb1ad3e98f218420d Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Tue, 6 Jun 2017 11:46:54 +0100 Subject: [PATCH] ole32/tests: Add tests for InitNew(). Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- 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 2db6de907b3..b30f63b5ada 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();