From a3c162da5b4fdf92468e4e281c526b53337d5fed Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sergio=20G=C3=B3mez=20Del=20Real?= Date: Wed, 6 Dec 2017 10:52:27 -0500 Subject: [PATCH] ole32/tests: Add tests for enhmetafile and CONTENTS stream saving. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Sergio Gómez Del Real Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/ole32/tests/ole2.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/dlls/ole32/tests/ole2.c b/dlls/ole32/tests/ole2.c index ca6756a6e5c..a8cbcdeb1eb 100644 --- a/dlls/ole32/tests/ole2.c +++ b/dlls/ole32/tests/ole2.c @@ -229,6 +229,16 @@ static void create_bitmap( STGMEDIUM *med ) med->pUnkForRelease = NULL; } +static void create_emf(STGMEDIUM *med) +{ + HDC hdc = CreateEnhMetaFileW(NULL, NULL, NULL, NULL); + + Rectangle(hdc, 0, 0, 150, 300); + med->tymed = TYMED_ENHMF; + U(med)->hEnhMetaFile = CloseEnhMetaFile(hdc); + med->pUnkForRelease = NULL; +} + static void create_mfpict(STGMEDIUM *med) { METAFILEPICT *mf; @@ -4110,6 +4120,7 @@ static void get_stgdef(struct storage_def *stg_def, CLIPFORMAT cf, STGMEDIUM *st BYTE *data; int data_size; METAFILEPICT *mfpict; + HDC hdc; switch (cf) { @@ -4149,6 +4160,27 @@ static void get_stgdef(struct storage_def *stg_def, CLIPFORMAT cf, STGMEDIUM *st stg_def->stream[stm_idx].data_size = data_size; stg_def->stream[stm_idx].data = data; break; + case CF_ENHMETAFILE: + if (!strcmp(stg_def->stream[stm_idx].name, "CONTENTS")) + { + data_size = GetEnhMetaFileBits(U(stg_med)->hEnhMetaFile, 0, NULL); + data = HeapAlloc(GetProcessHeap(), 0, sizeof(DWORD) + sizeof(ENHMETAHEADER) + data_size); + *((DWORD *)data) = sizeof(ENHMETAHEADER); + GetEnhMetaFileBits(U(stg_med)->hEnhMetaFile, data_size, data + sizeof(DWORD) + sizeof(ENHMETAHEADER)); + memcpy(data + sizeof(DWORD), data + sizeof(DWORD) + sizeof(ENHMETAHEADER), sizeof(ENHMETAHEADER)); + data_size += sizeof(DWORD) + sizeof(ENHMETAHEADER); + } + else + { + hdc = GetDC(NULL); + data_size = GetWinMetaFileBits(U(stg_med)->hEnhMetaFile, 0, NULL, MM_ANISOTROPIC, hdc); + data = HeapAlloc(GetProcessHeap(), 0, data_size); + GetWinMetaFileBits(U(stg_med)->hEnhMetaFile, data_size, data, MM_ANISOTROPIC, hdc); + ReleaseDC(NULL, hdc); + } + stg_def->stream[stm_idx].data_size = data_size; + stg_def->stream[stm_idx].data = data; + break; } } @@ -4162,6 +4194,9 @@ static void get_stgmedium(CLIPFORMAT cfFormat, STGMEDIUM *stgmedium) case CF_METAFILEPICT: create_mfpict(stgmedium); break; + case CF_ENHMETAFILE: + create_emf(stgmedium); + break; default: ok(0, "cf %x not implemented\n", cfFormat); } @@ -4208,6 +4243,42 @@ static void test_data_cache_save_data(void) }, { { + { CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF }, + }, + 1, 1, &CLSID_WineTest, + { + &CLSID_WineTestOld, 1, { { "\2OlePres000", CF_ENHMETAFILE, DVASPECT_CONTENT, 0, NULL, 0 } } + } + }, + { + { + { CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, + }, + 1, 1, &CLSID_Picture_Dib, + { + &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } } + } + }, + { + { + { CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, + }, + 1, 1, &CLSID_Picture_Metafile, + { + &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } } + } + }, + { + { + { CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF }, + }, + 1, 1, &CLSID_Picture_EnhMetafile, + { + &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } } + } + }, + { + { { 0 } } } -- 2.11.4.GIT