Module: wine Branch: refs/heads/master Commit: e56f6a38b1e876082c94baceed862665aa3dbb4c URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e56f6a38b1e876082c94bace...
Author: Paul Vriens Paul.Vriens@xs4all.nl Date: Fri Apr 21 08:00:14 2006 +0200
usp10: Fix return codes of ScriptGetFontProperties + tests.
---
dlls/usp10/tests/usp10.c | 79 +++++++++++++++++++++++++++++++++++++++++++++- dlls/usp10/usp10.c | 22 +++++++------ 2 files changed, 90 insertions(+), 11 deletions(-)
diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c index 12907dc..f411ce8 100644 --- a/dlls/usp10/tests/usp10.c +++ b/dlls/usp10/tests/usp10.c @@ -32,6 +32,82 @@ #include <winuser.h> #include <winerror.h> #include <usp10.h>
+void test_ScriptGetFontProperties(void) +{ + HRESULT hr; + HDC hdc; + HWND hwnd; + SCRIPT_CACHE psc,old_psc; + SCRIPT_FONTPROPERTIES sfp; + + /* Only do the bare minumum to get a valid hdc */ + hwnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL); + assert(hwnd != 0); + + hdc = GetDC(hwnd); + ok( hdc != NULL, "HDC failed to be created %p\n", hdc); + + /* Some sanity checks for ScriptGetFontProperties */ + + hr = ScriptGetFontProperties(NULL,NULL,NULL); + ok( hr == E_INVALIDARG, "(NULL,NULL,NULL), expected E_INVALIDARG, got %08x\n", (unsigned int)hr); + + hr = ScriptGetFontProperties(NULL,NULL,&sfp); + ok( hr == E_INVALIDARG, "(NULL,NULL,&sfp), expected E_INVALIDARG, got %08x\n", (unsigned int)hr); + + /* Set psc to NULL, to be able to check if a pointer is returned in psc */ + psc = NULL; + hr = ScriptGetFontProperties(NULL,&psc,NULL); + ok( hr == E_INVALIDARG, "(NULL,&psc,NULL), expected E_INVALIDARG, got %08x\n", (unsigned int)hr); + ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); + + /* Set psc to NULL, to be able to check if a pointer is returned in psc */ + psc = NULL; + hr = ScriptGetFontProperties(NULL,&psc,&sfp); + ok( hr == E_PENDING, "(NULL,&psc,&sfp), expected E_PENDING, got %08x\n", (unsigned int)hr); + ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); + + hr = ScriptGetFontProperties(hdc,NULL,NULL); + ok( hr == E_INVALIDARG, "(hdc,NULL,NULL), expected E_INVALIDARG, got %08x\n", (unsigned int)hr); + + hr = ScriptGetFontProperties(hdc,NULL,&sfp); + ok( hr == E_INVALIDARG, "(hdc,NULL,&sfp), expected E_INVALIDARG, got %08x\n", (unsigned int)hr); + + /* Set psc to NULL, to be able to check if a pointer is returned in psc */ + psc = NULL; + hr = ScriptGetFontProperties(hdc,&psc,NULL); + ok( hr == E_INVALIDARG, "(hdc,&psc,NULL), expected E_INVALIDARG, got %08x\n", (unsigned int)hr); + ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); + + /* Pass an uninitialized sfp */ + psc = NULL; + hr = ScriptGetFontProperties(hdc,&psc,&sfp); + ok( hr == E_INVALIDARG, "(hdc,&psc,&sfp) partly uninitialized, expected E_INVALIDARG, got %08x\n", (unsigned int)hr); + ok( psc != NULL, "Expected a pointer in psc, got NULL\n"); + ScriptFreeCache(&psc); + ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); + + /* Give it the correct cBytes, we don't care about what's coming back */ + sfp.cBytes = sizeof(SCRIPT_FONTPROPERTIES); + psc = NULL; + hr = ScriptGetFontProperties(hdc,&psc,&sfp); + ok( hr == S_OK, "(hdc,&psc,&sfp) partly initialized, expected S_OK, got %08x\n", (unsigned int)hr); + ok( psc != NULL, "Expected a pointer in psc, got NULL\n"); + + /* Save the psc pointer */ + old_psc = psc; + /* Now a NULL hdc again */ + hr = ScriptGetFontProperties(NULL,&psc,&sfp); + ok( hr == S_OK, "(NULL,&psc,&sfp), expected S_OK, got %08x\n", (unsigned int)hr); + ok( psc == old_psc, "Expected psc not to be changed, was %p is now %p\n", old_psc, psc); + ScriptFreeCache(&psc); + ok( psc == NULL, "Expected psc to be NULL, got %p\n", psc); + + /* Cleanup */ + ReleaseDC(hwnd, hdc); + DestroyWindow(hwnd); +} + START_TEST(usp10) { HRESULT hr; @@ -211,5 +287,6 @@ START_TEST(usp10) DeleteObject(hrgn); ReleaseDC(hwnd, hdc); DestroyWindow(hwnd); - return; + + test_ScriptGetFontProperties(); } diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c index d1be349..efb942e 100644 --- a/dlls/usp10/usp10.c +++ b/dlls/usp10/usp10.c @@ -126,6 +126,10 @@ HRESULT WINAPI ScriptGetFontProperties(H TEXTMETRICW ptm;
TRACE("%p,%p,%p\n", hdc, psc, sfp); + + if (!psc || !sfp) + return E_INVALIDARG; + if (!hdc && !*psc) { TRACE("No Script_Cache (psc) and no hdc. Ask for one. Hdc=%p, psc=%p\n", hdc, *psc); return E_PENDING; @@ -145,16 +149,14 @@ HRESULT WINAPI ScriptGetFontProperties(H return E_INVALIDARG;
/* return something sensible? */ - if (NULL != sfp) { - sfp->wgBlank = 0; - if (GetTextMetricsW(phdc, &ptm)) - sfp->wgDefault = ptm.tmDefaultChar; - else - sfp->wgDefault = 0; - sfp->wgInvalid = 0; - sfp->wgKashida = 0xffff; - sfp->iKashidaWidth = 0; - } + sfp->wgBlank = 0; + if (GetTextMetricsW(phdc, &ptm)) + sfp->wgDefault = ptm.tmDefaultChar; + else + sfp->wgDefault = 0; + sfp->wgInvalid = 0; + sfp->wgKashida = 0xffff; + sfp->iKashidaWidth = 0; return 0; }