Author: fireball Date: Thu Jan 14 23:35:53 2010 New Revision: 45081
URL: http://svn.reactos.org/svn/reactos?rev=45081&view=rev Log: [winetests] - Sync gdi32 and user32 winetests to Wine-1.1.36.
Added: trunk/rostests/winetests/user32/uitools.c (with props) Modified: trunk/rostests/winetests/gdi32/font.c trunk/rostests/winetests/gdi32/metafile.c trunk/rostests/winetests/user32/clipboard.c trunk/rostests/winetests/user32/dialog.c trunk/rostests/winetests/user32/edit.c trunk/rostests/winetests/user32/listbox.c trunk/rostests/winetests/user32/menu.c trunk/rostests/winetests/user32/msg.c trunk/rostests/winetests/user32/sysparams.c trunk/rostests/winetests/user32/testlist.c trunk/rostests/winetests/user32/user32.rbuild trunk/rostests/winetests/user32/winstation.c
Modified: trunk/rostests/winetests/gdi32/font.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/font.c?rev... ============================================================================== --- trunk/rostests/winetests/gdi32/font.c [iso-8859-1] (original) +++ trunk/rostests/winetests/gdi32/font.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -2848,6 +2848,29 @@ DeleteDC(hdc); }
+static void test_oemcharset(void) +{ + HDC hdc; + LOGFONTA lf; + HFONT hfont, old_hfont; + int charset; + + hdc = CreateCompatibleDC(0); + ZeroMemory(&lf, sizeof(lf)); + lf.lfHeight = 12; + lf.lfCharSet = OEM_CHARSET; + lf.lfPitchAndFamily = FIXED_PITCH | FF_MODERN; + lstrcpyA(lf.lfFaceName, "Terminal"); + hfont = CreateFontIndirectA(&lf); + old_hfont = SelectObject(hdc, hfont); + charset = GetTextCharset(hdc); +todo_wine + ok(charset == OEM_CHARSET, "expected %d charset, got %d\n", OEM_CHARSET, charset); + SelectObject(hdc, old_hfont); + DeleteObject(hfont); + DeleteDC(hdc); +} + static void test_GetGlyphOutline(void) { MAT2 mat = { {0,1}, {0,0}, {0,0}, {0,1} }; @@ -2978,6 +3001,39 @@ width, height, ratio, width, ave_width, scale);
ok(ratio >= 90 && ratio <= 110, "expected width/height ratio 90-110, got %d\n", ratio); +} + +static void test_CreateFontIndirect(void) +{ + LOGFONTA lf, getobj_lf; + int ret, i; + HFONT hfont; + char TestName[][16] = {"Arial", "Arial Bold", "Arial Italic", "Arial Baltic"}; + + memset(&lf, 0, sizeof(lf)); + lf.lfCharSet = ANSI_CHARSET; + lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; + lf.lfHeight = 16; + lf.lfWidth = 16; + lf.lfQuality = DEFAULT_QUALITY; + lf.lfItalic = FALSE; + lf.lfWeight = FW_DONTCARE; + + for (i = 0; i < sizeof(TestName)/sizeof(TestName[0]); i++) + { + lstrcpyA(lf.lfFaceName, TestName[i]); + hfont = CreateFontIndirectA(&lf); + ok(hfont != 0, "CreateFontIndirectA failed\n"); + ret = GetObject(hfont, sizeof(getobj_lf), &getobj_lf); + ok(lf.lfItalic == getobj_lf.lfItalic, "lfItalic: expect %02x got %02x\n", lf.lfItalic, getobj_lf.lfItalic); + ok(lf.lfWeight == getobj_lf.lfWeight || + broken((SHORT)lf.lfWeight == getobj_lf.lfWeight), /* win9x */ + "lfWeight: expect %08x got %08x\n", lf.lfWeight, getobj_lf.lfWeight); + ok(!lstrcmpA(lf.lfFaceName, getobj_lf.lfFaceName) || + broken(!memcmp(lf.lfFaceName, getobj_lf.lfFaceName, LF_FACESIZE-1)), /* win9x doesn't ensure '\0' termination */ + "font names don't match: %s != %s\n", lf.lfFaceName, getobj_lf.lfFaceName); + DeleteObject(hfont); + } }
START_TEST(font) @@ -3023,4 +3079,6 @@ test_GetTextMetrics2("Arial", -11); test_GetTextMetrics2("Arial", -55); test_GetTextMetrics2("Arial", -110); -} + test_CreateFontIndirect(); + test_oemcharset(); +}
Modified: trunk/rostests/winetests/gdi32/metafile.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/metafile.c... ============================================================================== --- trunk/rostests/winetests/gdi32/metafile.c [iso-8859-1] (original) +++ trunk/rostests/winetests/gdi32/metafile.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -1030,6 +1030,63 @@ 0x14, 0x00, 0x00, 0x00 };
+static const unsigned char EMF_BITBLT[] = +{ + 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x20, 0x45, 0x4d, 0x46, 0x00, 0x00, 0x01, 0x00, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x04, 0x00, 0x00, 0x3b, 0x02, 0x00, 0x00, + 0x75, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0xb1, 0x05, 0x00, + 0x28, 0x11, 0x03, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x8c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x62, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00 +}; + + /* For debugging or dumping the raw metafiles produced by * new test functions. */ @@ -1380,6 +1437,70 @@ offset2 += emr2->nSize; } return 0; +} + + +/* tests blitting to an EMF */ +static void test_emf_BitBlt(void) +{ + HDC hdcDisplay, hdcMetafile, hdcBitmap; + HBITMAP hBitmap, hOldBitmap; + HENHMETAFILE hMetafile; +#define BMP_DIM 4 + BITMAPINFOHEADER bmih = + { + sizeof(BITMAPINFOHEADER), + BMP_DIM,/* biWidth */ + BMP_DIM,/* biHeight */ + 1, /* biPlanes */ + 24, /* biBitCount */ + BI_RGB, /* biCompression */ + 0, /* biXPelsPerMeter */ + 0, /* biYPelsPerMeter */ + 0, /* biClrUsed */ + 0, /* biClrImportant */ + }; + void *bits; + BOOL ret; + + hdcDisplay = CreateDCA("DISPLAY", NULL, NULL, NULL); + ok( hdcDisplay != 0, "CreateDCA error %d\n", GetLastError() ); + + hdcBitmap = CreateCompatibleDC(hdcDisplay); + ok( hdcBitmap != 0, "CreateCompatibleDC failed\n" ); + bmih.biXPelsPerMeter = MulDiv(GetDeviceCaps(hdcDisplay, LOGPIXELSX), 100, 3937); + bmih.biYPelsPerMeter = MulDiv(GetDeviceCaps(hdcDisplay, LOGPIXELSY), 100, 3937); + hBitmap = CreateDIBSection(hdcDisplay, (const BITMAPINFO *)&bmih, + DIB_RGB_COLORS, &bits, NULL, 0); + hOldBitmap = SelectObject(hdcBitmap, hBitmap); + + hdcMetafile = CreateEnhMetaFileA(hdcBitmap, NULL, NULL, NULL); + ok( hdcMetafile != 0, "CreateEnhMetaFileA failed\n" ); + + /* First fill the bitmap DC with something recognizable, like BLACKNESS */ + ret = BitBlt(hdcBitmap, 0, 0, BMP_DIM, BMP_DIM, 0, 0, 0, BLACKNESS); + ok( ret, "BitBlt(BLACKNESS) failed\n" ); + + ret = BitBlt(hdcMetafile, 0, 0, BMP_DIM, BMP_DIM, hdcBitmap, 0, 0, SRCCOPY); + ok( ret, "BitBlt(SRCCOPY) failed\n" ); + ret = BitBlt(hdcMetafile, 0, 0, BMP_DIM, BMP_DIM, 0, 0, 0, WHITENESS); + ok( ret, "BitBlt(WHITENESS) failed\n" ); + + hMetafile = CloseEnhMetaFile(hdcMetafile); + ok( hMetafile != 0, "CloseEnhMetaFile failed\n" ); + + if(compare_emf_bits(hMetafile, EMF_BITBLT, sizeof(EMF_BITBLT), + "emf_BitBlt", FALSE) != 0) + { + dump_emf_bits(hMetafile, "emf_BitBlt"); + dump_emf_records(hMetafile, "emf_BitBlt"); + } + + SelectObject(hdcBitmap, hOldBitmap); + DeleteObject(hBitmap); + DeleteDC(hdcBitmap); + DeleteDC(hdcDisplay); +#undef BMP_DIM }
/* Test a blank metafile. May be used as a template for new tests. */ @@ -1953,8 +2074,11 @@ SetRect(&rc_sclip, 100, 100, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); hrgn = CreateRectRgn(rc_sclip.left, rc_sclip.top, rc_sclip.right, rc_sclip.bottom); SelectClipRgn(hdc, hrgn); - GetClipBox(hdc, &rc_res); - todo_wine ok(EqualRect(&rc_res, &rc_sclip), + ret = GetClipBox(hdc, &rc_res); +todo_wine + ok(ret == SIMPLEREGION, "got %d\n", ret); + if(ret == SIMPLEREGION) + ok(EqualRect(&rc_res, &rc_sclip), "expected rc_res (%d, %d) - (%d, %d), got (%d, %d) - (%d, %d)\n", rc_sclip.left, rc_sclip.top, rc_sclip.right, rc_sclip.bottom, rc_res.left, rc_res.top, rc_res.right, rc_res.bottom); @@ -2625,6 +2749,7 @@ /* For enhanced metafiles (enhmfdrv) */ test_ExtTextOut(); test_SaveDC(); + test_emf_BitBlt();
/* For win-format metafiles (mfdrv) */ test_mf_SaveDC();
Modified: trunk/rostests/winetests/user32/clipboard.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/clipboard... ============================================================================== --- trunk/rostests/winetests/user32/clipboard.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/clipboard.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -56,7 +56,8 @@
SetLastError(0xdeadbeef); ok(!CloseClipboard(), "CloseClipboard should fail if clipboard wasn't open\n"); - test_last_error(ERROR_CLIPBOARD_NOT_OPEN); + ok(GetLastError() == ERROR_CLIPBOARD_NOT_OPEN || broken(GetLastError() == 0xdeadbeef), /* wow64 */ + "wrong error %u\n", GetLastError());
ok(OpenClipboard(0), "OpenClipboard failed\n"); ok(!GetClipboardOwner(), "clipboard should still be not owned\n"); @@ -188,7 +189,8 @@
SetLastError(0xdeadbeef); ok(!EmptyClipboard(), "EmptyClipboard should fail if clipboard wasn't open\n"); - test_last_error(ERROR_CLIPBOARD_NOT_OPEN); + ok(GetLastError() == ERROR_CLIPBOARD_NOT_OPEN || broken(GetLastError() == 0xdeadbeef), /* wow64 */ + "Wrong error %u\n", GetLastError()); }
static HGLOBAL create_text(void)
Modified: trunk/rostests/winetests/user32/dialog.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/dialog.c?... ============================================================================== --- trunk/rostests/winetests/user32/dialog.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/dialog.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -464,7 +464,6 @@ static LRESULT CALLBACK main_window_procA (HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { - LRESULT result; switch (uiMsg) { /* Add blank case statements for these to ensure we don't use them @@ -485,20 +484,19 @@ break; }
- result=DefWindowProcA (hwnd, uiMsg, wParam, lParam); - return result; + return DefWindowProcA (hwnd, uiMsg, wParam, lParam); }
static LRESULT CALLBACK disabled_test_proc (HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { - LRESULT result; - DWORD dw; - HWND hwndOk; - switch (uiMsg) { case WM_INITDIALOG: + { + DWORD dw; + HWND hwndOk; + dw = SendMessage(hwnd, DM_GETDEFID, 0, 0); assert(DC_HASDEFID == HIWORD(dw)); hwndOk = GetDlgItem(hwnd, LOWORD(dw)); @@ -508,6 +506,7 @@ PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, 0); PostMessage(hwnd, WM_COMMAND, IDCANCEL, 0); break; + } case WM_COMMAND: if (wParam == IDOK) { @@ -523,14 +522,12 @@ break; }
- result=DefWindowProcA (hwnd, uiMsg, wParam, lParam); - return result; + return DefWindowProcA (hwnd, uiMsg, wParam, lParam); }
static LRESULT CALLBACK testDlgWinProc (HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { - LRESULT result; switch (uiMsg) { /* Add blank case statements for these to ensure we don't use them @@ -544,8 +541,7 @@ (LPCREATESTRUCTA) lParam) ? 0 : (LRESULT) -1); }
- result=DefWindowProcA (hwnd, uiMsg, wParam, lParam); - return result; + return DefDlgProcA (hwnd, uiMsg, wParam, lParam); }
static BOOL RegisterWindowClasses (void)
Modified: trunk/rostests/winetests/user32/edit.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/edit.c?re... ============================================================================== --- trunk/rostests/winetests/user32/edit.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/edit.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -1070,11 +1070,11 @@ mid = lo + (hi - lo) / 2;
for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok(0 == ret, "expected 0 got %d\n", ret); } for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok(1 == ret, "expected 1 got %d\n", ret); } ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); @@ -1088,11 +1088,11 @@ mid = lo + (hi - lo) / 2;
for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok(0 == ret, "expected 0 got %d\n", ret); } for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok(1 == ret, "expected 1 got %d\n", ret); } ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); @@ -1106,11 +1106,11 @@ mid = lo + (hi - lo) / 2;
for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok(0 == ret, "expected 0 got %d\n", ret); } for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok(1 == ret, "expected 1 got %d\n", ret); } ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); @@ -1124,11 +1124,11 @@ mid = lo + (hi - lo) / 2 +1;
for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok((0 == ret || 1 == ret /* Vista */), "expected 0 or 1 got %d\n", ret); } for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok(1 == ret, "expected 1 got %d\n", ret); } ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); @@ -1142,11 +1142,11 @@ mid = lo + (hi - lo) / 2 +1;
for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok((0 == ret || 1 == ret /* Vista */), "expected 0 or 1 got %d\n", ret); } for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok(1 == ret, "expected 1 got %d\n", ret); } ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); @@ -1160,11 +1160,11 @@ mid = lo + (hi - lo) / 2 +1;
for (i = lo; i < mid; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok((0 == ret || 1 == ret /* Vista */), "expected 0 or 1 got %d\n", ret); } for (i = mid; i <= hi; i++) { - ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i)); + ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i)); ok(1 == ret, "expected 1 got %d\n", ret); } ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0); @@ -1524,7 +1524,7 @@ /* Edit controls that are in a parent window */
hwEdit = create_child_editcontrol(style | WS_VISIBLE, 0); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); + SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE); if (single_line) check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 0); check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 0); @@ -1534,7 +1534,7 @@ destroy_child_editcontrol(hwEdit);
hwEdit = create_child_editcontrol(style | WS_BORDER | WS_VISIBLE, 0); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); + SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE); if (single_line) check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, b); check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , b); @@ -1545,7 +1545,7 @@ destroy_child_editcontrol(hwEdit);
hwEdit = create_child_editcontrol(style | WS_VISIBLE, WS_EX_CLIENTEDGE); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); + SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE); if (single_line) check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1); check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1); @@ -1555,7 +1555,7 @@ destroy_child_editcontrol(hwEdit);
hwEdit = create_child_editcontrol(style | WS_BORDER | WS_VISIBLE, WS_EX_CLIENTEDGE); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); + SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE); if (single_line) check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1); check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1); @@ -1568,7 +1568,7 @@ /* Edit controls that are popup windows */
hwEdit = create_editcontrol(style | WS_POPUP, 0); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); + SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE); if (single_line) check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 0); check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 0); @@ -1578,7 +1578,7 @@ DestroyWindow(hwEdit);
hwEdit = create_editcontrol(style | WS_POPUP | WS_BORDER, 0); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); + SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE); if (single_line) check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, b); check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , b); @@ -1589,7 +1589,7 @@ DestroyWindow(hwEdit);
hwEdit = create_editcontrol(style | WS_POPUP, WS_EX_CLIENTEDGE); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); + SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE); if (single_line) check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1); check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1); @@ -1599,7 +1599,7 @@ DestroyWindow(hwEdit);
hwEdit = create_editcontrol(style | WS_POPUP | WS_BORDER, WS_EX_CLIENTEDGE); - SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE); + SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE); if (single_line) check_pos(hwEdit, metrics.tmHeight - 1, 0, metrics.tmHeight - 1, 1); check_pos(hwEdit, metrics.tmHeight , 0, metrics.tmHeight , 1); @@ -2179,7 +2179,7 @@ len = SendMessage(hwEdit, WM_GETTEXTLENGTH, 0, 0); ok(11 == len, "expected 11, got %d\n", len);
- r = SendMessage(hwEdit, WM_GETDLGCODE, (WPARAM)NULL, (LPARAM)NULL); + r = SendMessage(hwEdit, WM_GETDLGCODE, 0, 0); ok(0x8d == r, "expected 0x8d, got 0x%x\n", r);
r = SendMessage(hwEdit, WM_CHAR, VK_RETURN, 0x1c0001); @@ -2187,7 +2187,7 @@ len = SendMessage(hwEdit, WM_GETTEXTLENGTH, 0, 0); ok(13 == len, "expected 13, got %d\n", len);
- r = SendMessage(hwEdit, WM_GETDLGCODE, (WPARAM)NULL, (LPARAM)&msg); + r = SendMessage(hwEdit, WM_GETDLGCODE, 0, (LPARAM)&msg); ok(0x8d == r, "expected 0x8d, got 0x%x\n", r); r = SendMessage(hwEdit, WM_CHAR, VK_RETURN, 0x1c0001); ok(1 == r, "expected 1, got %d\n", r);
Modified: trunk/rostests/winetests/user32/listbox.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/listbox.c... ============================================================================== --- trunk/rostests/winetests/user32/listbox.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/listbox.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -146,7 +146,7 @@ listbox_query (hLB, &answer); listbox_ok (test, init, answer);
- SendMessage (hLB, LB_GETITEMRECT, (WPARAM) 1, (LPARAM) &second_item); + SendMessage (hLB, LB_GETITEMRECT, 1, (LPARAM) &second_item); buttonpress(hLB, (WORD)second_item.left, (WORD)second_item.top);
listbox_query (hLB, &answer); @@ -354,7 +354,7 @@ listbox_query(hLB, &answer); listbox_test_query(test_1, answer);
- SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); + SendMessage(hLB, LB_SETSEL, FALSE, -1); listbox_query(hLB, &answer); listbox_test_query(test_nosel, answer);
@@ -363,7 +363,7 @@ listbox_query(hLB, &answer); listbox_test_query(test_3, answer);
- SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); + SendMessage(hLB, LB_SETSEL, FALSE, -1); listbox_query(hLB, &answer); listbox_test_query(test_nosel, answer);
@@ -372,7 +372,7 @@ listbox_query(hLB, &answer); listbox_test_query(test_nosel, answer);
- SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); + SendMessage(hLB, LB_SETSEL, FALSE, -1); listbox_query(hLB, &answer); listbox_test_query(test_nosel, answer);
@@ -381,7 +381,7 @@ listbox_query(hLB, &answer); listbox_test_query(test_1, answer);
- SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); + SendMessage(hLB, LB_SETSEL, FALSE, -1); listbox_query(hLB, &answer); listbox_test_query(test_nosel, answer);
@@ -390,7 +390,7 @@ listbox_query(hLB, &answer); listbox_test_query(test_nosel, answer);
- SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); + SendMessage(hLB, LB_SETSEL, FALSE, -1); listbox_query(hLB, &answer); listbox_test_query(test_nosel, answer);
@@ -399,7 +399,7 @@ listbox_query(hLB, &answer); listbox_test_query(test_2, answer);
- SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1); + SendMessage(hLB, LB_SETSEL, FALSE, -1); listbox_query(hLB, &answer); listbox_test_query(test_nosel, answer);
@@ -1112,7 +1112,7 @@ "expected conversion to uppercase, got %s\n", pathBuffer);
/* Loaded path should have overwritten the label text */ - SendMessage(g_label, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)pathBuffer); + SendMessage(g_label, WM_GETTEXT, MAX_PATH, (LPARAM)pathBuffer); trace("Static control after DlgDirList: %s\n", pathBuffer); ok (strcmp("default contents", pathBuffer), "DlgDirList() did not modify static control!\n");
Modified: trunk/rostests/winetests/user32/menu.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/menu.c?re... ============================================================================== --- trunk/rostests/winetests/user32/menu.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/menu.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -390,8 +390,9 @@ ok( ret == itemid , "TrackPopupMenu returned %d error is %d\n", ret, gle); } ok( gle == 0 || - broken( gle == ERROR_INVALID_PARAMETER), /* win2k0 */ - "Last error is %d\n", gle); + broken(gle == 0xdeadbeef) || /* wow64 */ + broken(gle == ERROR_INVALID_PARAMETER), /* win2k0 */ + "Last error is %d\n", gle); } /* clean up */ DestroyMenu( hmenu);
Modified: trunk/rostests/winetests/user32/msg.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/msg.c?rev... ============================================================================== --- trunk/rostests/winetests/user32/msg.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/msg.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -161,7 +161,7 @@ { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 }, { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* Win9x: SWP_NOSENDCHANGING */ { WM_ACTIVATEAPP, sent|wparam, 1 }, - { WM_NCACTIVATE, sent|wparam, 1 }, + { WM_NCACTIVATE, sent }, { WM_GETTEXT, sent|defwinproc|optional }, { WM_ACTIVATE, sent|wparam, 1 }, { HCBT_SETFOCUS, hook }, @@ -268,7 +268,7 @@ { WM_NCPAINT, sent|optional }, { WM_GETTEXT, sent|defwinproc|optional }, { WM_ERASEBKGND, sent|optional }, - { WM_WINDOWPOSCHANGED, sent|wparam, /*SWP_NOZORDER|*/SWP_NOACTIVATE, 0, + { WM_WINDOWPOSCHANGED, sent|wparam|optional, /*SWP_NOZORDER|*/SWP_NOACTIVATE, 0, SWP_NOMOVE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOCLIENTSIZE }, { WM_MOVE, sent|defwinproc|optional }, { WM_SIZE, sent|defwinproc|optional }, @@ -631,9 +631,10 @@ { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, { WM_SIZE, sent|optional }, /* XP doesn't send it */ { WM_MOVE, sent|optional }, /* XP doesn't send it */ - { WM_NCACTIVATE, sent|wparam, 0 }, - { WM_ACTIVATE, sent|wparam, 0 }, - { WM_ACTIVATEAPP, sent|wparam, 0 }, + { WM_NCACTIVATE, sent|wparam|optional, 0 }, + { WM_ACTIVATE, sent|wparam|optional, 0 }, + { WM_ACTIVATEAPP, sent|wparam|optional, 0 }, + { HCBT_SETFOCUS, hook|optional }, { WM_KILLFOCUS, sent|wparam, 0 }, { WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, { WM_IME_NOTIFY, sent|wparam|optional|defwinproc, 1 }, @@ -1776,7 +1777,8 @@ message == WM_GETOBJECT || message == WM_TIMECHANGE || message == WM_DISPLAYCHANGE || - message == WM_DEVICECHANGE); + message == WM_DEVICECHANGE || + message == WM_DWMNCRENDERINGCHANGED); }
@@ -5384,6 +5386,7 @@ UpdateWindow(hwnd); SetFocus(0); flush_events(); + SetFocus(0); flush_sequence();
log_all_parent_messages++; @@ -6866,8 +6869,8 @@ { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_APPS, 0xc0000001 }, /* XP */ { WM_KEYUP, wparam|lparam, VK_APPS, 0xc0000001 }, { WM_KEYUP, sent|wparam|lparam, VK_APPS, 0xc0000001 }, - { WM_CONTEXTMENU, lparam, /*hwnd*/0, (LPARAM)-1 }, - { WM_CONTEXTMENU, sent|lparam, /*hwnd*/0, (LPARAM)-1 }, + { WM_CONTEXTMENU, lparam, /*hwnd*/0, -1 }, + { WM_CONTEXTMENU, sent|lparam, /*hwnd*/0, -1 }, { 0 } }; static const struct message WmVkF10Seq[] = { @@ -9324,17 +9327,21 @@ skip( "queuing key events not supported\n" ); goto done; } - ok(qstatus == MAKELONG(QS_KEY, QS_KEY), + ok(qstatus == MAKELONG(QS_KEY, QS_KEY) || + /* keybd_event seems to trigger a sent message on NT4 */ + qstatus == MAKELONG(QS_KEY|QS_SENDMESSAGE, QS_KEY|QS_SENDMESSAGE), "wrong qstatus %08x\n", qstatus);
PostMessageA(info.hwnd, WM_CHAR, 'z', 0); qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_POSTMESSAGE, QS_POSTMESSAGE|QS_KEY), + ok(qstatus == MAKELONG(QS_POSTMESSAGE, QS_POSTMESSAGE|QS_KEY) || + qstatus == MAKELONG(QS_POSTMESSAGE, QS_POSTMESSAGE|QS_KEY|QS_SENDMESSAGE), "wrong qstatus %08x\n", qstatus);
InvalidateRect(info.hwnd, NULL, FALSE); qstatus = GetQueueStatus(qs_all_input); - ok(qstatus == MAKELONG(QS_PAINT, QS_PAINT|QS_POSTMESSAGE|QS_KEY), + ok(qstatus == MAKELONG(QS_PAINT, QS_PAINT|QS_POSTMESSAGE|QS_KEY) || + qstatus == MAKELONG(QS_PAINT, QS_PAINT|QS_POSTMESSAGE|QS_KEY|QS_SENDMESSAGE), "wrong qstatus %08x\n", qstatus);
trace("signalling to send message\n"); @@ -9896,7 +9903,7 @@ /* Timer proc messages are not dispatched to the window proc, * and therefore not logged. */ - if (msg.message == WM_TIMER || msg.message == WM_SYSTIMER) + if ((msg.message == WM_TIMER || msg.message == WM_SYSTIMER) && msg.hwnd) { struct recvd_message s_msg;
@@ -10291,8 +10298,8 @@ }; static const struct message WmHide_1[] = { { WM_SHOWWINDOW, sent|wparam, 0 }, - { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE }, - { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, + { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE, 0, SWP_NOACTIVATE }, + { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE, 0, SWP_NOACTIVATE }, { HCBT_ACTIVATE, hook|optional }, { HCBT_SETFOCUS, hook|optional }, /* win2000 sends it */ { 0 } @@ -10840,6 +10847,7 @@ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE }, { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE }, { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, + { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, { WM_NCACTIVATE, sent|wparam, 1 }, { WM_GETTEXT, sent|defwinproc|optional }, { WM_ACTIVATE, sent|wparam, 1 }, @@ -12014,10 +12022,271 @@ flush_events(); }
+static const struct +{ + DWORD exp, broken; + BOOL todo; +} wait_idle_expect[] = +{ +/* 0 */ { WAIT_TIMEOUT, WAIT_TIMEOUT, FALSE }, + { WAIT_TIMEOUT, 0, FALSE }, + { WAIT_TIMEOUT, 0, FALSE }, + { WAIT_TIMEOUT, WAIT_TIMEOUT, FALSE }, + { WAIT_TIMEOUT, WAIT_TIMEOUT, FALSE }, +/* 5 */ { WAIT_TIMEOUT, 0, FALSE }, + { WAIT_TIMEOUT, 0, FALSE }, + { WAIT_TIMEOUT, WAIT_TIMEOUT, FALSE }, + { 0, 0, FALSE }, + { 0, 0, FALSE }, +/* 10 */ { 0, 0, FALSE }, + { 0, 0, FALSE }, + { 0, WAIT_TIMEOUT, FALSE }, + { 0, 0, FALSE }, +}; + +static DWORD CALLBACK do_wait_idle_child_thread( void *arg ) +{ + MSG msg; + + PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ); + Sleep( 200 ); + MsgWaitForMultipleObjects( 0, NULL, FALSE, 100, QS_ALLINPUT ); + return 0; +} + +static void do_wait_idle_child( int arg ) +{ + WNDCLASS cls; + MSG msg; + HWND hwnd = 0; + HANDLE thread; + DWORD id; + HANDLE start_event = OpenEventA( EVENT_ALL_ACCESS, FALSE, "test_WaitForInputIdle_start" ); + HANDLE end_event = OpenEventA( EVENT_ALL_ACCESS, FALSE, "test_WaitForInputIdle_end" ); + + memset( &cls, 0, sizeof(cls) ); + cls.lpfnWndProc = DefWindowProc; + cls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + cls.hCursor = LoadCursor(0, IDC_ARROW); + cls.lpszClassName = "TestClass"; + RegisterClass( &cls ); + + PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ); /* create the msg queue */ + + ok( start_event != 0, "failed to create start event, error %u\n", GetLastError() ); + ok( end_event != 0, "failed to create end event, error %u\n", GetLastError() ); + + switch (arg) + { + case 0: + SetEvent( start_event ); + break; + case 1: + SetEvent( start_event ); + Sleep( 200 ); + PeekMessage( &msg, 0, 0, 0, PM_REMOVE ); + break; + case 2: + SetEvent( start_event ); + Sleep( 200 ); + PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ); + PostThreadMessage( GetCurrentThreadId(), WM_COMMAND, 0x1234, 0xabcd ); + PeekMessage( &msg, 0, 0, 0, PM_REMOVE ); + break; + case 3: + SetEvent( start_event ); + Sleep( 200 ); + SendMessage( HWND_BROADCAST, WM_WININICHANGE, 0, 0 ); + break; + case 4: + SetEvent( start_event ); + Sleep( 200 ); + hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL); + while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE|PM_NOYIELD )) DispatchMessage( &msg ); + break; + case 5: + SetEvent( start_event ); + Sleep( 200 ); + hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL); + while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); + break; + case 6: + SetEvent( start_event ); + Sleep( 200 ); + hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL); + while (PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE )) + { + GetMessage( &msg, 0, 0, 0 ); + DispatchMessage( &msg ); + } + break; + case 7: + SetEvent( start_event ); + Sleep( 200 ); + hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL); + SetTimer( hwnd, 3, 1, NULL ); + Sleep( 200 ); + while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE|PM_NOYIELD )) DispatchMessage( &msg ); + break; + case 8: + SetEvent( start_event ); + Sleep( 200 ); + PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ); + MsgWaitForMultipleObjects( 0, NULL, FALSE, 100, QS_ALLINPUT ); + break; + case 9: + SetEvent( start_event ); + Sleep( 200 ); + hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL); + while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); + for (;;) GetMessage( &msg, 0, 0, 0 ); + break; + case 10: + SetEvent( start_event ); + Sleep( 200 ); + hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL); + SetTimer( hwnd, 3, 1, NULL ); + Sleep( 200 ); + while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg ); + break; + case 11: + SetEvent( start_event ); + Sleep( 200 ); + return; /* exiting the process makes WaitForInputIdle return success too */ + case 12: + PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ); + Sleep( 200 ); + MsgWaitForMultipleObjects( 0, NULL, FALSE, 100, QS_ALLINPUT ); + SetEvent( start_event ); + break; + case 13: + SetEvent( start_event ); + PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ); + Sleep( 200 ); + thread = CreateThread( NULL, 0, do_wait_idle_child_thread, NULL, 0, &id ); + WaitForSingleObject( thread, 10000 ); + CloseHandle( thread ); + break; + } + WaitForSingleObject( end_event, 2000 ); + CloseHandle( start_event ); + CloseHandle( end_event ); + if (hwnd) DestroyWindow( hwnd ); +} + +static LRESULT CALLBACK wait_idle_proc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) +{ + if (msg == WM_WININICHANGE) Sleep( 200 ); /* make sure the child waits */ + return DefWindowProcA( hwnd, msg, wp, lp ); +} + +static DWORD CALLBACK wait_idle_thread( void *arg ) +{ + WNDCLASS cls; + MSG msg; + HWND hwnd; + + memset( &cls, 0, sizeof(cls) ); + cls.lpfnWndProc = wait_idle_proc; + cls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + cls.hCursor = LoadCursor(0, IDC_ARROW); + cls.lpszClassName = "TestClass"; + RegisterClass( &cls ); + + hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP, 0, 0, 10, 10, 0, 0, 0, NULL); + while (GetMessage( &msg, 0, 0, 0 )) DispatchMessage( &msg ); + return 0; +} + +static void test_WaitForInputIdle( char *argv0 ) +{ + char path[MAX_PATH]; + PROCESS_INFORMATION pi; + STARTUPINFOA startup; + BOOL ret; + HANDLE start_event, end_event, thread; + unsigned int i; + DWORD id; + const IMAGE_DOS_HEADER *dos = (const IMAGE_DOS_HEADER *)GetModuleHandleA(0); + const IMAGE_NT_HEADERS *nt = (const IMAGE_NT_HEADERS *)((const char *)dos + dos->e_lfanew); + BOOL console_app = (nt->OptionalHeader.Subsystem != IMAGE_SUBSYSTEM_WINDOWS_GUI); + + if (console_app) /* build the test with -mwindows for better coverage */ + trace( "not built as a GUI app, WaitForInputIdle may not be fully tested\n" ); + + start_event = CreateEventA(NULL, 0, 0, "test_WaitForInputIdle_start"); + end_event = CreateEventA(NULL, 0, 0, "test_WaitForInputIdle_end"); + ok(start_event != 0, "failed to create start event, error %u\n", GetLastError()); + ok(end_event != 0, "failed to create end event, error %u\n", GetLastError()); + + memset( &startup, 0, sizeof(startup) ); + startup.cb = sizeof(startup); + startup.dwFlags = STARTF_USESHOWWINDOW; + startup.wShowWindow = SW_SHOWNORMAL; + + thread = CreateThread( NULL, 0, wait_idle_thread, NULL, 0, &id ); + + for (i = 0; i < sizeof(wait_idle_expect)/sizeof(wait_idle_expect[0]); i++) + { + ResetEvent( start_event ); + ResetEvent( end_event ); + sprintf( path, "%s msg %u", argv0, i ); + ret = CreateProcessA( NULL, path, NULL, NULL, TRUE, 0, NULL, NULL, &startup, &pi ); + ok( ret, "CreateProcess '%s' failed err %u.\n", path, GetLastError() ); + if (ret) + { + ret = WaitForSingleObject( start_event, 5000 ); + ok( ret == WAIT_OBJECT_0, "%u: WaitForSingleObject failed\n", i ); + if (ret == WAIT_OBJECT_0) + { + ret = WaitForInputIdle( pi.hProcess, 1000 ); + if (ret == WAIT_FAILED) + ok( console_app || + ret == wait_idle_expect[i].exp || + broken(ret == wait_idle_expect[i].broken), + "%u: WaitForInputIdle error %08x expected %08x\n", + i, ret, wait_idle_expect[i].exp ); + else if (wait_idle_expect[i].todo) + todo_wine + ok( ret == wait_idle_expect[i].exp || broken(ret == wait_idle_expect[i].broken), + "%u: WaitForInputIdle error %08x expected %08x\n", + i, ret, wait_idle_expect[i].exp ); + else + ok( ret == wait_idle_expect[i].exp || broken(ret == wait_idle_expect[i].broken), + "%u: WaitForInputIdle error %08x expected %08x\n", + i, ret, wait_idle_expect[i].exp ); + SetEvent( end_event ); + WaitForSingleObject( pi.hProcess, 1000 ); /* give it a chance to exit on its own */ + } + TerminateProcess( pi.hProcess, 0 ); /* just in case */ + winetest_wait_child_process( pi.hProcess ); + ret = WaitForInputIdle( pi.hProcess, 100 ); + ok( ret == WAIT_FAILED, "%u: WaitForInputIdle after exit error %08x\n", i, ret ); + CloseHandle( pi.hProcess ); + CloseHandle( pi.hThread ); + } + } + CloseHandle( start_event ); + PostThreadMessage( id, WM_QUIT, 0, 0 ); + WaitForSingleObject( thread, 10000 ); + CloseHandle( thread ); +} + START_TEST(msg) { + char **test_argv; BOOL ret; BOOL (WINAPI *pIsWinEventHookInstalled)(DWORD)= 0;/*GetProcAddress(user32, "IsWinEventHookInstalled");*/ + + int argc = winetest_get_mainargs( &test_argv ); + if (argc >= 3) + { + unsigned int arg; + /* Child process. */ + sscanf (test_argv[2], "%d", (unsigned int *) &arg); + do_wait_idle_child( arg ); + return; + }
init_procs();
@@ -12059,6 +12328,7 @@ test_ShowWindow(); test_PeekMessage(); test_PeekMessage2(); + test_WaitForInputIdle( test_argv[0] ); test_scrollwindowex(); test_messages(); test_setwindowpos();
Modified: trunk/rostests/winetests/user32/sysparams.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/sysparams... ============================================================================== --- trunk/rostests/winetests/user32/sysparams.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/sysparams.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -2764,6 +2764,27 @@ } }
+static void test_GetSysColorBrush(void) +{ + HBRUSH hbr; + + SetLastError(0xdeadbeef); + hbr = GetSysColorBrush(-1); + ok(hbr == NULL, "Expected NULL brush\n"); + ok(GetLastError() == 0xdeadbeef, "Expected last error not set, got %x\n", GetLastError()); + /* greater than max index */ + hbr = GetSysColorBrush(COLOR_MENUBAR); + if (hbr) + { + SetLastError(0xdeadbeef); + hbr = GetSysColorBrush(COLOR_MENUBAR + 1); + ok(hbr == NULL, "Expected NULL brush\n"); + ok(GetLastError() == 0xdeadbeef, "Expected last error not set, got %x\n", GetLastError()); + } + else + win_skip("COLOR_MENUBAR unsupported\n"); +} + START_TEST(sysparams) { int argc; @@ -2794,6 +2815,7 @@ test_GetSystemMetrics( ); trace("testing EnumDisplaySettings vs GetDeviceCaps\n"); test_EnumDisplaySettings( ); + test_GetSysColorBrush( );
change_counter = 0; change_last_param = 0;
Modified: trunk/rostests/winetests/user32/testlist.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/testlist.... ============================================================================== --- trunk/rostests/winetests/user32/testlist.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/testlist.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -26,6 +26,7 @@ extern void func_static(void); extern void func_sysparams(void); extern void func_text(void); +extern void func_uitools(void); extern void func_win(void); extern void func_winstation(void); extern void func_wsprintf(void); @@ -52,6 +53,7 @@ { "static", func_static }, { "sysparams", func_sysparams }, { "text", func_text }, + { "uitools", func_uitools }, { "win", func_win }, { "winstation", func_winstation }, { "wsprintf", func_wsprintf },
Added: trunk/rostests/winetests/user32/uitools.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/uitools.c... ============================================================================== --- trunk/rostests/winetests/user32/uitools.c (added) +++ trunk/rostests/winetests/user32/uitools.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -1,0 +1,69 @@ +/* Unit test suite for user interface functions + * + * Copyright 2009 Nikolay Sivov + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "wine/test.h" +#include "winbase.h" +#include "wingdi.h" +#include "winuser.h" + +static void test_FillRect(void) +{ + HDC hdc, hdcmem; + DWORD bits[64]; + HBITMAP hbmp, oldhbmp; + COLORREF col; + HBRUSH old_brush; + RECT r; + + /* fill bitmap data with white */ + memset(bits, 0xff, sizeof(bits)); + + hdc = GetDC(0); + ok( hdc != NULL, "CreateDC rets %p\n", hdc); + /* create a memory dc */ + hdcmem = CreateCompatibleDC(hdc); + ok(hdcmem != NULL, "CreateCompatibleDC rets %p\n", hdcmem); + /* test monochrome bitmap: should always work */ + hbmp = CreateBitmap(32, 32, 1, 1, bits); + ok(hbmp != NULL, "CreateBitmap returns %p\n", hbmp); + oldhbmp = SelectObject(hdcmem, hbmp); + ok(oldhbmp != NULL, "SelectObject returned NULL\n"); /* a memdc always has a bitmap selected */ + col = GetPixel(hdcmem, 0, 0); + ok( col == 0xffffff, "GetPixel returned %08x, expected 0xffffff\n", col); + + /* select black brush */ + old_brush = SelectObject(hdcmem, GetStockObject(BLACK_BRUSH)); + r.left = r.top = 0; + r.right = r.bottom = 5; + FillRect(hdcmem, &r, 0); + SelectObject(hdcmem, old_brush); + /* bitmap filled with last selected brush */ + col = GetPixel(hdcmem, 0, 0); + ok(col == 0, "GetPixel returned %08x, expected 0\n", col); + + SelectObject(hdcmem, oldhbmp); + DeleteObject(hbmp); + DeleteDC(hdcmem); + ReleaseDC(0, hdc); +} + +START_TEST(uitools) +{ + test_FillRect(); +}
Propchange: trunk/rostests/winetests/user32/uitools.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/rostests/winetests/user32/user32.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/user32.rb... ============================================================================== --- trunk/rostests/winetests/user32/user32.rbuild [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/user32.rbuild [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -28,6 +28,7 @@ <file>static.c</file> <file>sysparams.c</file> <file>text.c</file> + <file>uitools.c</file> <file>win.c</file> <file>winstation.c</file> <file>wsprintf.c</file>
Modified: trunk/rostests/winetests/user32/winstation.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/winstatio... ============================================================================== --- trunk/rostests/winetests/user32/winstation.c [iso-8859-1] (original) +++ trunk/rostests/winetests/user32/winstation.c [iso-8859-1] Thu Jan 14 23:35:53 2010 @@ -76,7 +76,8 @@ ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() ); SetLastError( 0xdeadbeef ); ok( !CloseDesktop( d1 ), "CloseDesktop succeeded\n" ); - ok( GetLastError() == ERROR_BUSY, "bad last error %d\n", GetLastError() ); + ok( GetLastError() == ERROR_BUSY || broken(GetLastError() == 0xdeadbeef), /* wow64 */ + "bad last error %d\n", GetLastError() ); print_object( d1 ); d2 = CreateDesktop( "foobar2", NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL ); trace( "created desktop %p\n", d2 ); @@ -84,7 +85,8 @@
SetLastError( 0xdeadbeef ); ok( !SetThreadDesktop( d2 ), "set thread desktop succeeded with existing window\n" ); - ok( GetLastError() == ERROR_BUSY, "bad last error %d\n", GetLastError() ); + ok( GetLastError() == ERROR_BUSY || broken(GetLastError() == 0xdeadbeef), /* wow64 */ + "bad last error %d\n", GetLastError() );
DestroyWindow( hwnd ); ok( SetThreadDesktop( d2 ), "set thread desktop failed\n" ); @@ -139,7 +141,8 @@ ok( w2 != w1, "CreateWindowStation returned default handle\n" ); SetLastError( 0xdeadbeef ); ok( !CloseDesktop( (HDESK)w2 ), "CloseDesktop succeeded on win station\n" ); - ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() ); + ok( GetLastError() == ERROR_INVALID_HANDLE || broken(GetLastError() == 0xdeadbeef), /* wow64 */ + "bad last error %d\n", GetLastError() ); ok( CloseWindowStation( w2 ), "CloseWindowStation failed\n" );
w2 = CreateWindowStation("WinSta0", 0, WINSTA_ALL_ACCESS, NULL ); @@ -200,7 +203,8 @@
SetLastError( 0xdeadbeef ); ok( !CloseDesktop(d1), "closing thread desktop succeeded\n" ); - ok( GetLastError() == ERROR_BUSY, "bad last error %d\n", GetLastError() ); + ok( GetLastError() == ERROR_BUSY || broken(GetLastError() == 0xdeadbeef), /* wow64 */ + "bad last error %d\n", GetLastError() );
SetLastError( 0xdeadbeef ); if (CloseHandle( d1 )) /* succeeds on nt4 */ @@ -225,7 +229,8 @@ ok( d2 != 0, "create foobar desktop failed\n" ); SetLastError( 0xdeadbeef ); ok( !CloseWindowStation( (HWINSTA)d2 ), "CloseWindowStation succeeded on desktop\n" ); - ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() ); + ok( GetLastError() == ERROR_INVALID_HANDLE || broken(GetLastError() == 0xdeadbeef), /* wow64 */ + "bad last error %d\n", GetLastError() );
SetLastError( 0xdeadbeef ); d3 = CreateDesktop( "foobar", NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL );