Rein Klazes : user32/tests: In sysparams fix another case where a test changes a users desktop setting .
Alexandre Julliard
julliard at winehq.org
Thu Apr 2 10:42:42 CDT 2009
Module: wine
Branch: master
Commit: ebbf99abce391fb08467616cf07d91c2256be780
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ebbf99abce391fb08467616cf07d91c2256be780
Author: Rein Klazes <wijn at online.nl>
Date: Thu Apr 2 11:37:13 2009 +0200
user32/tests: In sysparams fix another case where a test changes a users desktop setting.
Made several tests pass on NT4 (no SP), Vista and Win2k8.
---
dlls/user32/tests/sysparams.c | 53 ++++++++++++++++++++++++++++------------
1 files changed, 37 insertions(+), 16 deletions(-)
diff --git a/dlls/user32/tests/sysparams.c b/dlls/user32/tests/sysparams.c
index d7adfa4..165226a 100644
--- a/dlls/user32/tests/sysparams.c
+++ b/dlls/user32/tests/sysparams.c
@@ -709,11 +709,15 @@ static void test_SPI_SETBORDER( void ) /* 6 */
BOOL rc;
UINT old_border;
NONCLIENTMETRICSA ncmsave;
- INT CaptionWidth;
+ INT CaptionWidth,
+ PaddedBorderWidth;
ncmsave.cbSize = sizeof( ncmsave);
rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncmsave, 0);
- ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
+ if( !rc) {
+ win_skip("SPI_GETNONCLIENTMETRICS is not available\n");
+ return;
+ }
/* CaptionWidth from the registry may have different value of iCaptionWidth
* from the non client metrics (observed on WinXP).
* Fix this so we can safely restore settings with the nonclientmetrics */
@@ -735,8 +739,10 @@ static void test_SPI_SETBORDER( void ) /* 6 */
if (!test_error_msg(rc,"SPI_{GET,SET}BORDER"))
return;
/* FIXME: include new PaddedBorderWidth parameter */
- if( old_border != ncmsave.iBorderWidth){
- win_skip( "Can not reliable restore border width yet\n");
+ PaddedBorderWidth = ncmsave.iBorderWidth - old_border;
+ if( PaddedBorderWidth){
+ win_skip( "Can not reliable restore border width yet (PaddedBorderWidth = %d)\n",
+ PaddedBorderWidth);
return;
}
/* This will restore sane values if the test hang previous run. */
@@ -1395,6 +1401,7 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
Ncmstart.cbSize = sizeof(NONCLIENTMETRICSA);
trace("testing SPI_{GET,SET}NONCLIENTMETRICS\n");
+ change_counter = 0;
SetLastError(0xdeadbeef);
rc=SystemParametersInfoA( SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &Ncmorig, FALSE );
if (!test_error_msg(rc,"SPI_{GET,SET}NONCLIENTMETRICS"))
@@ -1448,7 +1455,7 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
/* test registry entries */
TEST_NONCLIENTMETRICS_REG( Ncmcur)
- /* test the systemm metrics with these settings */
+ /* test the system metrics with these settings */
test_GetSystemMetrics();
/* now for something invalid: increase the {menu|caption|smcaption} fonts
by a large amount will increase the {menu|caption|smcaption} height*/
@@ -1483,19 +1490,22 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
"SmCaptionHeight: %d expected %d\n", Ncmcur.iSmCaptionHeight, expect);
ok( Ncmcur.iCaptionWidth == 8 ||
+ Ncmcur.iCaptionWidth == 12 || /* Vista, W7b */
Ncmcur.iCaptionWidth == Ncmstart.iCaptionWidth, /* with windows XP theme, the value never changes */
- "CaptionWidth: %d expected 8\n", Ncmcur.iCaptionWidth);
+ "CaptionWidth: %d expected 8, 12 or %d\n", Ncmcur.iCaptionWidth, Ncmstart.iCaptionWidth);
ok( Ncmcur.iScrollWidth == 8,
"ScrollWidth: %d expected 8\n", Ncmcur.iScrollWidth);
ok( Ncmcur.iScrollHeight == 8,
"ScrollHeight: %d expected 8\n", Ncmcur.iScrollHeight);
- /* test the systemm metrics with these settings */
+ /* test the system metrics with these settings */
test_GetSystemMetrics();
/* restore */
rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),
&Ncmorig, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
test_change_message( SPI_SETNONCLIENTMETRICS, 0 );
ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%d\n",rc,GetLastError());
+ /* test the system metrics with these settings */
+ test_GetSystemMetrics();
}
static void test_SPI_SETMINIMIZEDMETRICS( void ) /* 44 */
@@ -2414,6 +2424,14 @@ static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam )
test_SPI_SETMOUSEBUTTONSWAP(); /* 33 */
test_SPI_SETFASTTASKSWITCH(); /* 36 */
test_SPI_SETDRAGFULLWINDOWS(); /* 37 */
+ /* test_WM_DISPLAYCHANGE seems to be somewhat buggy on
+ * some versions of Windows (Vista, Win2k8, Win7B) in that
+ * not all metrics are properly restored. Problems are
+ * SM_CXMAXTRACK, SM_CYMAXTRACK
+ * Fortunately setting the Non-Client metrics like in
+ * test_SPI_SETNONCLIENTMETRICS will corect this. That is why
+ * we do the DISPLAY change now... */
+ test_WM_DISPLAYCHANGE();
test_SPI_SETNONCLIENTMETRICS(); /* 42 */
test_SPI_SETMINIMIZEDMETRICS(); /* 44 */
test_SPI_SETICONMETRICS(); /* 46 */
@@ -2433,7 +2451,6 @@ static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam )
test_SPI_SETWHEELSCROLLCHARS(); /* 108 */
test_SPI_SETWALLPAPER(); /* 115 */
- test_WM_DISPLAYCHANGE();
SendMessageA( ghTestWnd, WM_DESTROY, 0, 0 );
return 0;
@@ -2514,10 +2531,11 @@ static void test_GetSystemMetrics( void)
{
TEXTMETRICA tmMenuFont;
UINT IconSpacing, IconVerticalSpacing;
+ BOOL rc;
HDC hdc = CreateIC( "Display", 0, 0, 0);
UINT avcwCaption;
- INT CaptionWidth;
+ INT CaptionWidthfromreg;
MINIMIZEDMETRICS minim;
NONCLIENTMETRICS ncm;
SIZE screen;
@@ -2525,11 +2543,14 @@ static void test_GetSystemMetrics( void)
minim.cbSize = sizeof( minim);
ncm.cbSize = sizeof( ncm);
SystemParametersInfo( SPI_GETMINIMIZEDMETRICS, 0, &minim, 0);
- SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
-
+ rc = SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
+ if( !rc) {
+ win_skip("SPI_GETNONCLIENTMETRICS is not available\n");
+ return;
+ }
/* CaptionWidth from the registry may have different value of iCaptionWidth
* from the non client metrics (observed on WinXP) */
- CaptionWidth = metricfromreg(
+ CaptionWidthfromreg = metricfromreg(
"Control Panel\\Desktop\\WindowMetrics","CaptionWidth", dpi);
get_text_metr_size( hdc, &ncm.lfMenuFont, &tmMenuFont, NULL);
get_text_metr_size( hdc, &ncm.lfCaptionFont, NULL, &avcwCaption);
@@ -2573,8 +2594,8 @@ static void test_GetSystemMetrics( void)
/* SM_RESERVED2 */
/* SM_RESERVED3 */
/* SM_RESERVED4 */
- ok_gsm( SM_CXMIN, 3 * max( CaptionWidth, 8) + GetSystemMetrics( SM_CYSIZE) +
- 4 + 4 * avcwCaption + 2 * GetSystemMetrics( SM_CXFRAME));
+ ok_gsm( SM_CXMIN, 3 * max( CaptionWidthfromreg >= 0 ? CaptionWidthfromreg : ncm.iCaptionWidth, 8) +
+ GetSystemMetrics( SM_CYSIZE) + 4 + 4 * avcwCaption + 2 * GetSystemMetrics( SM_CXFRAME));
ok_gsm( SM_CYMIN, GetSystemMetrics( SM_CYCAPTION) +
2 * GetSystemMetrics( SM_CYFRAME));
ok_gsm_2( SM_CXSIZE,
@@ -2661,8 +2682,8 @@ static void test_GetSystemMetrics( void)
ncm.iBorderWidth, ncm.iCaptionWidth, ncm.iCaptionHeight, IconSpacing, IconVerticalSpacing);
trace( "MenuHeight %d MenuWidth %d ScrollHeight %d ScrollWidth %d SmCaptionHeight %d SmCaptionWidth %d\n",
ncm.iMenuHeight, ncm.iMenuWidth, ncm.iScrollHeight, ncm.iScrollWidth, ncm.iSmCaptionHeight, ncm.iSmCaptionWidth);
- trace( "Captionfontchar width %d MenuFont %d,%d CaptionWidth from registry: %d\n",
- avcwCaption, tmMenuFont.tmHeight, tmMenuFont.tmExternalLeading, CaptionWidth);
+ trace( "Captionfontchar width %d MenuFont %d,%d CaptionWidth from registry: %d screen %d,%d\n",
+ avcwCaption, tmMenuFont.tmHeight, tmMenuFont.tmExternalLeading, CaptionWidthfromreg, screen.cx, screen.cy);
}
ReleaseDC( 0, hdc);
}
More information about the wine-cvs
mailing list