https://git.reactos.org/?p=reactos.git;a=commitdiff;h=52d6a714611e43b2b92414c523e05386810fd8e3
commit 52d6a714611e43b2b92414c523e05386810fd8e3 Author: Tomáš Veselý <turic...@gmail.com> AuthorDate: Sun Sep 1 13:32:43 2024 +0200 Commit: GitHub <nore...@github.com> CommitDate: Sun Sep 1 14:32:43 2024 +0300 [USER32_APITEST] Improve RedrawWindow API test by testing flags (#7160) As part of fixing some bugs like CORE-13149, extend the tests to include more detailed examination of rendering functions. Extend the RedrawWindow test to include tests of all flags. As part of it, I am also testing the 2-point states of the render areas. I moved the original test without changes into a separate function GetMessageRedrawWindowTest. For the flag tests I added FlagsRedrawWindowTest function. It sequentially tests the RedrawWindow with different flag combinations and compares the results with those discovered in Windows XP and Windows 11 (the values in both versions confirmed to be identical). The API test turned out well in ReactOS, the only deviation was that in many cases (whenever the RDW_INVALIDATE flag is present) a WM_ERASEBKGND message is received after the window is rendered without the RDW_ERASE flag. (this is what I'm focusing on now in https://github.com/turican0/reactos/tree/fix-RDW_ERASE-in-co_UserRedrawWindow, but before I merge it, I want to create more API tests) --- modules/rostests/apitests/user32/RedrawWindow.c | 1100 ++++++++++++++++++++++- 1 file changed, 1098 insertions(+), 2 deletions(-) diff --git a/modules/rostests/apitests/user32/RedrawWindow.c b/modules/rostests/apitests/user32/RedrawWindow.c index 50ed0ea19e8..c5ce8d333f4 100644 --- a/modules/rostests/apitests/user32/RedrawWindow.c +++ b/modules/rostests/apitests/user32/RedrawWindow.c @@ -3,6 +3,7 @@ * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+) * PURPOSE: Test for RedrawWindow * COPYRIGHT: Copyright 2018 Thomas Faber <thomas.fa...@reactos.org> + * Copyright 2024 Tomáš Veselý <turic...@gmail.com> */ #include "precomp.h" @@ -10,6 +11,11 @@ static DWORD dwThreadId; static BOOL got_paint; +BOOL resultWmEraseGnd = FALSE; +BOOL resultWmNcPaint = FALSE; +int paintIndex = 0; +const wchar_t CHILD_CLASS_NAME[] = L"ChildWindowClass"; + static LRESULT CALLBACK @@ -28,8 +34,7 @@ WndProc( return DefWindowProcW(hWnd, message, wParam, lParam); } - -START_TEST(RedrawWindow) +void GetMessageRedrawWindowTest() { HWND hWnd; MSG msg; @@ -86,3 +91,1094 @@ START_TEST(RedrawWindow) DeleteObject(hRgn); DestroyWindow(hWnd); } + +void DrawContent(HDC hdc, RECT* rect, COLORREF color) +{ + HBRUSH hBrush = CreateSolidBrush(color); + FillRect(hdc, rect, hBrush); + DeleteObject(hBrush); + + SetBkMode(hdc, TRANSPARENT); + SetTextColor(hdc, RGB(255, 255, 255)); + DrawTextW(hdc, L"Test RedrawWindow", -1, rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE); +} + +LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) + { + case WM_DESTROY: + { + PostQuitMessage(0); + return 0; + } + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + RECT rect; + GetClientRect(hwnd, &rect); + DrawContent(hdc, &rect, RGB(0, 255, 0)); + EndPaint(hwnd, &ps); + paintIndex++; + return 0; + } + case WM_ERASEBKGND: + { + if(paintIndex != 0) + resultWmEraseGnd = TRUE; + return 0; + } + case WM_NCPAINT: + { + if (paintIndex != 0) + resultWmNcPaint = TRUE; + return 0; + } + } + return DefWindowProc(hwnd, uMsg, wParam, lParam); +} + +LRESULT CALLBACK ChildWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) { + case WM_SYNCPAINT: + { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255)); + FillRect(hdc, &ps.rcPaint, brush); + DeleteObject(brush); + EndPaint(hwnd, &ps); + break; + } + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + HBRUSH brush = CreateSolidBrush(RGB(0, 0, 255)); + FillRect(hdc, &ps.rcPaint, brush); + DeleteObject(brush); + EndPaint(hwnd, &ps); + break; + } + case WM_DESTROY: + { + PostQuitMessage(0); + return 0; + } + } + return DefWindowProc(hwnd, uMsg, wParam, lParam); +} + +typedef struct STRUCT_TestRedrawWindow +{ + const wchar_t* testName; + DWORD flags; + BOOL useRegion; + RECT regRect; + BOOL useRect; + RECT rectRect; + BOOL forcePaint; + BOOL redrawResult; + int testPixelPre1x; + int testPixelPre1y; + int testPixelPre2x; + int testPixelPre2y; + int testPixelPost1x; + int testPixelPost1y; + int testPixelPost2x; + int testPixelPost2y; + int testChild; + COLORREF resultColorPre1; + COLORREF resultColorPre2; + COLORREF resultColorPost1; + COLORREF resultColorPost2; + RECT resultUpdateRect; + BOOL resultNeedsUpdate; + BOOL resultRedraw; + BOOL resultWmEraseGnd; + BOOL resultWmNcPaint; + int resultPaintIndex; +} STRUCT_TestRedrawWindow; + +typedef struct STRUCT_TestRedrawWindowCompare +{ + COLORREF resultColorPre1; + COLORREF resultColorPre2; + COLORREF resultColorPost1; + COLORREF resultColorPost2; + RECT resultUpdateRect; + BOOL resultNeedsUpdate; + BOOL resultWmEraseGnd; + BOOL resultWmNcPaint; + int resultPaintIndex; +} STRUCT_TestRedrawWindowCompare; + +void ServeSomeMessages(int messageTime, int messageCount) +{ + DWORD startTime; + + MSG msg = { 0 }; + startTime = GetTickCount(); + while (GetTickCount() - startTime < messageTime * messageCount) + { + if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + else + { + Sleep(messageTime); + } + } +} + +void TestRedrawWindow(STRUCT_TestRedrawWindow* ptestRW) { + DWORD style; + int width; + int height; + HWND hChildWnd = NULL; + HRGN RgnUpdate; + RECT* prect; + + resultWmEraseGnd = FALSE; + resultWmNcPaint = FALSE; + paintIndex = 0; + + WNDCLASSW wc = { 0 }; + wc.lpfnWndProc = WindowProc; + wc.hInstance = GetModuleHandle(NULL); + wc.lpszClassName = ptestRW->testName; + RegisterClassW(&wc); + RECT rectWin = { 0, 0, 800, 600 }; + style = WS_OVERLAPPEDWINDOW; + AdjustWindowRectEx(&rectWin, style, FALSE, 0); + width = rectWin.right - rectWin.left; + height = rectWin.bottom - rectWin.top; + HWND hwnd = CreateWindowExW(0, wc.lpszClassName, wc.lpszClassName, WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, CW_USEDEFAULT, width, height, NULL, NULL, GetModuleHandle(NULL), NULL); + if (hwnd == NULL) + return; + + ShowWindow(hwnd, SW_SHOW); + if(!ptestRW->testChild) + UpdateWindow(hwnd); + + if (ptestRW->testChild) + { + WNDCLASSW wcChild = { 0 }; + wcChild.lpfnWndProc = ChildWindowProc; + wcChild.hInstance = GetModuleHandle(NULL); + wcChild.lpszClassName = CHILD_CLASS_NAME; + RegisterClassW(&wcChild); + + hChildWnd = CreateWindowExW( + 0, + CHILD_CLASS_NAME, + L"Child Window", + WS_CHILD | WS_VISIBLE, + 10, 10, 200, 200, + hwnd, + NULL, + GetModuleHandle(NULL), + NULL + ); + } + + HDC hdc = GetDC(hwnd); + RECT drect = { 0, 0, 800, 600 }; + DrawContent(hdc, &drect, RGB(255, 0, 0)); + ReleaseDC(hwnd, hdc); + + RgnUpdate = NULL; + if (ptestRW->useRegion) + { + RgnUpdate = CreateRectRgn(ptestRW->regRect.left, ptestRW->regRect.top, ptestRW->regRect.right, ptestRW->regRect.bottom); + } + + prect=NULL; + if (ptestRW->useRect) + { + prect = &ptestRW->rectRect; + } + + if (ptestRW->testChild) + { + ServeSomeMessages(10, 10); + } + + ptestRW->resultRedraw = RedrawWindow(hwnd, prect, RgnUpdate, ptestRW->flags); + + if (ptestRW->testChild) + { + ServeSomeMessages(10, 10); + } + + hdc = GetDC(hwnd); + ptestRW->resultColorPre1 = GetPixel(hdc, ptestRW->testPixelPre1x, ptestRW->testPixelPre1y); + ptestRW->resultColorPre2 = GetPixel(hdc, ptestRW->testPixelPre2x, ptestRW->testPixelPre2y); + ReleaseDC(hwnd, hdc); + + ptestRW->resultNeedsUpdate = GetUpdateRect(hwnd, &ptestRW->resultUpdateRect, FALSE); + + if (ptestRW->forcePaint) + { + UpdateWindow(hwnd); + } + + hdc = GetDC(hwnd); + ptestRW->resultColorPost1 = GetPixel(hdc, ptestRW->testPixelPost1x, ptestRW->testPixelPost1y); + ptestRW->resultColorPost2 = GetPixel(hdc, ptestRW->testPixelPost2x, ptestRW->testPixelPost2y); + ReleaseDC(hwnd, hdc); + + ptestRW->resultWmEraseGnd = resultWmEraseGnd; + ptestRW->resultWmNcPaint = resultWmNcPaint; + ptestRW->resultPaintIndex = paintIndex; + + if (RgnUpdate) DeleteObject(RgnUpdate); + + if (hChildWnd != NULL) + DestroyWindow(hChildWnd); + if (hwnd != NULL) + DestroyWindow(hwnd); +} + +UINT TestRedrawWindow2(STRUCT_TestRedrawWindow* ptestRW, STRUCT_TestRedrawWindowCompare* ptestRWcompare) +{ + UINT countErrors = 0; + + TestRedrawWindow(ptestRW); + + if (ptestRW->resultRedraw) + { + if (ptestRWcompare->resultColorPre1 != ptestRW->resultColorPre1) + { + trace("DIFFERENCE-resultColorPre1 0x%06x 0x%06x\n", (int)ptestRW->resultColorPre1, (int)ptestRWcompare->resultColorPre1); + countErrors++; + } + if (ptestRWcompare->resultColorPre2 != ptestRW->resultColorPre2) + { + trace("DIFFERENCE-resultColorPre2 0x%06x 0x%06x\n", (int)ptestRW->resultColorPre2, (int)ptestRWcompare->resultColorPre2); + countErrors++; + } + if (ptestRWcompare->resultColorPost1 != ptestRW->resultColorPost1) + { + trace("DIFFERENCE-resultColorPost1 0x%06x 0x%06x\n", (int)ptestRW->resultColorPost1, (int)ptestRWcompare->resultColorPost1); + countErrors++; + } + if (ptestRWcompare->resultColorPost2 != ptestRW->resultColorPost2) + { + trace("DIFFERENCE-resultColorPost2 0x%06x 0x%06x\n", (int)ptestRW->resultColorPost2, (int)ptestRWcompare->resultColorPost2); + countErrors++; + } + if (ptestRWcompare->resultNeedsUpdate != ptestRW->resultNeedsUpdate) + { + trace("DIFFERENCE-resultNeedsUpdate %d %d\n", ptestRW->resultNeedsUpdate, ptestRWcompare->resultNeedsUpdate); + countErrors++; + } + if (ptestRW->resultNeedsUpdate) + { + if (ptestRWcompare->resultUpdateRect.left != ptestRW->resultUpdateRect.left) + { + trace("DIFFERENCE-resultUpdateRect.left %d %d\n", (int)ptestRW->resultUpdateRect.left, (int)ptestRWcompare->resultUpdateRect.left); + countErrors++; + } + if (ptestRWcompare->resultUpdateRect.top != ptestRW->resultUpdateRect.top) + { + trace("DIFFERENCE-resultUpdateRect.top %d %d\n", (int)ptestRW->resultUpdateRect.top, (int)ptestRWcompare->resultUpdateRect.top); + countErrors++; + } + if (ptestRWcompare->resultUpdateRect.right != ptestRW->resultUpdateRect.right) + { + trace("DIFFERENCE-resultUpdateRect.right %d %d\n", (int)ptestRW->resultUpdateRect.right, (int)ptestRWcompare->resultUpdateRect.right); + countErrors++; + } + if (ptestRWcompare->resultUpdateRect.bottom != ptestRW->resultUpdateRect.bottom) + { + trace("DIFFERENCE-resultUpdateRect.bottom %d %d\n", (int)ptestRW->resultUpdateRect.bottom, (int)ptestRWcompare->resultUpdateRect.bottom); + countErrors++; + } + } + if (ptestRWcompare->resultWmEraseGnd != ptestRW->resultWmEraseGnd) + { + trace("DIFFERENCE-resultWmEraseGnd %d %d\n", ptestRW->resultWmEraseGnd, ptestRWcompare->resultWmEraseGnd); + countErrors++; + } + if (ptestRWcompare->resultWmNcPaint != ptestRW->resultWmNcPaint) + { + trace("DIFFERENCE-resultWmNcPaint %d %d\n", ptestRW->resultWmNcPaint, ptestRWcompare->resultWmNcPaint); + countErrors++; + } + if (ptestRWcompare->resultPaintIndex != ptestRW->resultPaintIndex) + { + trace("DIFFERENCE-resultPaintIndex %d %d\n", ptestRW->resultPaintIndex, ptestRWcompare->resultPaintIndex); + countErrors++; + } + } + if (countErrors > 0) + { + trace("COUNT OF DIFFERENCES - %d\n", countErrors); + } + + return countErrors; +} + +void InitRect(RECT *rect, int left, int top, int right, int bottom) { + rect->left = left; + rect->top = top; + rect->right = right; + rect->bottom = bottom; +} + +void FlagsRedrawWindowTest() +{ + STRUCT_TestRedrawWindow testRW; + STRUCT_TestRedrawWindowCompare testRWcompare; + + testRW.testPixelPre1x = 50; + testRW.testPixelPre1y = 50; + testRW.testPixelPre2x = 50; + testRW.testPixelPre2y = 550; + testRW.testPixelPost1x = 50; + testRW.testPixelPost1y = 50; + testRW.testPixelPost2x = 50; + testRW.testPixelPost2y = 550; + + // RDW_ERASE tests + testRW.testName = L"Test1"; + testRW.flags = 0; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 0, 200, 200); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test1 fail\n"); + + testRW.testName = L"Test2"; + testRW.flags = RDW_ERASE; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 0, 200, 200); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test2 fail\n"); + + testRW.testName = L"Test3"; + testRW.flags = RDW_INVALIDATE; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test3 fail\n"); + + testRW.testName = L"Test4"; + testRW.flags = RDW_INVALIDATE | RDW_ERASE; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = TRUE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test4 fail\n"); + + // RDW_FRAME tests + testRW.testName = L"Test5"; + testRW.flags = RDW_FRAME; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test5 fail\n"); + + testRW.testName = L"Test6"; + testRW.flags = RDW_INVALIDATE | RDW_FRAME; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = TRUE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test6 fail\n"); + + // RDW_INTERNALPAINT tests + testRW.testName = L"Test7"; + testRW.flags = RDW_INTERNALPAINT; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test7 fail\n"); + + testRW.testName = L"Test8"; + testRW.flags = RDW_INVALIDATE | RDW_INTERNALPAINT; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test8 fail\n"); + + // RDW_NOERASE tests + testRW.testName = L"Test9"; + testRW.flags = RDW_NOERASE; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test9 fail\n"); + + testRW.testName = L"Test10"; + testRW.flags = RDW_INVALIDATE | RDW_NOERASE; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test10 fail\n"); + + testRW.testName = L"Test11"; + testRW.flags = RDW_NOERASE | RDW_ERASE; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test11 fail\n"); + + testRW.testName = L"Test12"; + testRW.flags = RDW_INVALIDATE | RDW_NOERASE | RDW_ERASE; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = TRUE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test12 fail\n"); + + // RDW_NOFRAME tests + testRW.testName = L"Test13"; + testRW.flags = RDW_NOFRAME; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test13 fail\n"); + + testRW.testName = L"Test14"; + testRW.flags = RDW_INVALIDATE | RDW_NOFRAME; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test14 fail\n"); + + testRW.testName = L"Test15"; + testRW.flags = RDW_INVALIDATE | RDW_VALIDATE | RDW_NOFRAME; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test15 fail\n"); + + testRW.testName = L"Test16"; + testRW.flags = RDW_VALIDATE | RDW_NOFRAME; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test16 fail\n"); + + // RDW_NOINTERNALPAINT tests + testRW.testName = L"Test17"; + testRW.flags = RDW_NOINTERNALPAINT; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test17 fail\n"); + + testRW.testName = L"Test18"; + testRW.flags = RDW_INVALIDATE | RDW_NOINTERNALPAINT; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test18 fail\n"); + + testRW.testName = L"Test19"; + testRW.flags = RDW_VALIDATE | RDW_NOINTERNALPAINT; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test19 fail\n"); + + // RDW_ERASENOW tests + testRW.testName = L"Test20"; + testRW.flags = RDW_ERASENOW; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test20 fail\n"); + + testRW.testName = L"Test21"; + testRW.flags = RDW_INVALIDATE | RDW_ERASENOW; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test21 fail\n"); + + testRW.testName = L"Test22"; + testRW.flags = RDW_VALIDATE | RDW_ERASENOW; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test22 fail\n"); + + // RDW_UPDATENOW tests + testRW.testName = L"Test23"; + testRW.flags = RDW_UPDATENOW; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test23 fail\n"); + + testRW.testName = L"Test24"; + testRW.flags = RDW_INVALIDATE | RDW_UPDATENOW; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x0000FF00; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test24 fail\n"); + + testRW.testName = L"Test25"; + testRW.flags = RDW_VALIDATE | RDW_UPDATENOW; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test25 fail\n"); + + // RDW_ALLCHILDREN/RDW_NOCHILDREN tests + testRW.testName = L"Test26"; + testRW.flags = RDW_NOCHILDREN; + testRW.useRegion = FALSE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = TRUE; + + testRWcompare.resultColorPre1 = 0x00FF0000; + testRWcompare.resultColorPre2 = 0x0000FF00; + testRWcompare.resultColorPost1 = 0x00FF0000; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test26 fail\n"); + + testRW.testName = L"Test27"; + testRW.flags = RDW_INVALIDATE | RDW_NOCHILDREN; + testRW.useRegion = FALSE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = TRUE; + + testRWcompare.resultColorPre1 = 0x0000FF00; + testRWcompare.resultColorPre2 = 0x0000FF00; + testRWcompare.resultColorPost1 = 0x0000FF00; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test27 fail\n"); + + testRW.testName = L"Test28"; + testRW.flags = RDW_VALIDATE | RDW_NOCHILDREN; + testRW.useRegion = FALSE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = TRUE; + + testRWcompare.resultColorPre1 = 0x00FF0000; + testRWcompare.resultColorPre2 = 0x0000FF00; + testRWcompare.resultColorPost1 = 0x00FF0000; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test28 fail\n"); + + testRW.testName = L"Test29"; + testRW.flags = RDW_ALLCHILDREN; + testRW.useRegion = FALSE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = TRUE; + + testRWcompare.resultColorPre1 = 0x00FF0000; + testRWcompare.resultColorPre2 = 0x0000FF00; + testRWcompare.resultColorPost1 = 0x00FF0000; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test29 fail\n"); + + testRW.testName = L"Test30"; + testRW.flags = RDW_INVALIDATE | RDW_ALLCHILDREN; + testRW.useRegion = FALSE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = TRUE; + + testRWcompare.resultColorPre1 = 0x00FF0000; + testRWcompare.resultColorPre2 = 0x0000FF00; + testRWcompare.resultColorPre1 = 0x00FF0000; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test30 fail\n"); + + testRW.testName = L"Test31"; + testRW.flags = RDW_VALIDATE | RDW_ALLCHILDREN; + testRW.useRegion = FALSE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = TRUE; + + testRWcompare.resultColorPre1 = 0x00FF0000; + testRWcompare.resultColorPre2 = 0x0000FF00; + testRWcompare.resultColorPost1 = 0x00FF0000; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test31 fail\n"); + + testRW.testName = L"Test32"; + testRW.flags = RDW_NOCHILDREN; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = TRUE; + + testRWcompare.resultColorPre1 = 0x00FF0000; + testRWcompare.resultColorPre2 = 0x0000FF00; + testRWcompare.resultColorPost1 = 0x00FF0000; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test32 fail\n"); + + testRW.testName = L"Test33"; + testRW.flags = RDW_INVALIDATE | RDW_NOCHILDREN; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = TRUE; + + testRWcompare.resultColorPre1 = 0x00FF0000; + testRWcompare.resultColorPre2 = 0x0000FF00; + testRWcompare.resultColorPre1 = 0x00FF0000; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test33 fail\n"); + + testRW.testName = L"Test34"; + testRW.flags = RDW_VALIDATE | RDW_NOCHILDREN; + testRW.useRegion = TRUE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = FALSE; + InitRect(&testRW.rectRect, 0, 0, 200, 200); + testRW.forcePaint = TRUE; + testRW.testChild = TRUE; + + testRWcompare.resultColorPre1 = 0x00FF0000; + testRWcompare.resultColorPre2 = 0x0000FF00; + testRWcompare.resultColorPost1 = 0x00FF0000; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test34 fail\n"); + + // rect defined area tests + testRW.testName = L"Test35"; + testRW.flags = 0; + testRW.useRegion = FALSE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = TRUE; + InitRect(&testRW.rectRect, 0, 500, 800, 600); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x000000FF; + InitRect(&testRWcompare.resultUpdateRect, 0, 0, 200, 200); + testRWcompare.resultNeedsUpdate = FALSE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 1; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test35 fail\n"); + + testRW.testName = L"Test36"; + testRW.flags = RDW_INVALIDATE | RDW_ERASENOW; + testRW.useRegion = FALSE; + InitRect(&testRW.regRect, 0, 500, 800, 600); + testRW.useRect = TRUE; + InitRect(&testRW.rectRect, 0, 500, 800, 600); + testRW.forcePaint = TRUE; + testRW.testChild = FALSE; + + testRWcompare.resultColorPre1 = 0x000000FF; + testRWcompare.resultColorPre2 = 0x000000FF; + testRWcompare.resultColorPost1 = 0x000000FF; + testRWcompare.resultColorPost2 = 0x0000FF00; + InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + testRWcompare.resultNeedsUpdate = TRUE; + testRWcompare.resultWmEraseGnd = FALSE; + testRWcompare.resultWmNcPaint = FALSE; + testRWcompare.resultPaintIndex = 2; + ok(0 == TestRedrawWindow2(&testRW, &testRWcompare),"Test36 fail\n"); +} + +START_TEST(RedrawWindow) +{ + FlagsRedrawWindowTest(); + GetMessageRedrawWindowTest(); +}