reactos/modules/rostests/apitests/user32/RedrawWindow.c
Tomáš Veselý 52d6a71461
[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)
2024-09-01 14:32:43 +03:00

1184 lines
41 KiB
C

/*
* PROJECT: ReactOS API tests
* LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+)
* PURPOSE: Test for RedrawWindow
* COPYRIGHT: Copyright 2018 Thomas Faber <thomas.faber@reactos.org>
* Copyright 2024 Tomáš Veselý <turican0@gmail.com>
*/
#include "precomp.h"
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
WndProc(
_In_ HWND hWnd,
_In_ UINT message,
_In_ WPARAM wParam,
_In_ LPARAM lParam)
{
disable_success_count
ok(GetCurrentThreadId() == dwThreadId, "Thread 0x%lx instead of 0x%lx\n", GetCurrentThreadId(), dwThreadId);
if (message == WM_PAINT)
{
got_paint = TRUE;
}
return DefWindowProcW(hWnd, message, wParam, lParam);
}
void GetMessageRedrawWindowTest()
{
HWND hWnd;
MSG msg;
HRGN hRgn;
BOOL ret;
int i;
SetCursorPos(0,0);
dwThreadId = GetCurrentThreadId();
RegisterSimpleClass(WndProc, L"CreateTest");
hWnd = CreateWindowExW(0, L"CreateTest", NULL, 0, 10, 10, 20, 20, NULL, NULL, 0, NULL);
ok(hWnd != NULL, "CreateWindow failed\n");
ShowWindow(hWnd, SW_SHOW);
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
{
DispatchMessageA( &msg );
}
ok(got_paint == TRUE, "Did not process WM_PAINT message\n");
got_paint = FALSE;
hRgn = CreateRectRgn(0, 0, 1, 1);
ok(hRgn != NULL, "CreateRectRgn failed\n");
ret = RedrawWindow(hWnd, NULL, hRgn, RDW_INTERNALPAINT | RDW_INVALIDATE);
ok(ret == TRUE, "RedrawWindow failed\n");
i = 0;
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
{
RECORD_MESSAGE(1, msg.message, POST, 0, 0);
if (msg.message == WM_PAINT)
{
i++;
if (i == 10)
{
ok(got_paint == FALSE, "Received unexpected WM_PAINT message\n");
}
}
if (msg.message != WM_PAINT || i >= 10)
{
DispatchMessageA( &msg );
}
}
ok(i == 10, "Received %d WM_PAINT messages\n", i);
ok(got_paint == TRUE, "Did not process WM_PAINT message\n");
TRACE_CACHE();
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();
}