riched20/tests: Fix and extend EM_FORMATRANGE tests.

This commit is contained in:
Paul Vriens 2009-03-24 10:17:13 +01:00 committed by Alexandre Julliard
parent 8e12ad4fae
commit e96fb0fa50
1 changed files with 80 additions and 31 deletions

View File

@ -4746,46 +4746,95 @@ static void test_WM_PASTE(void)
static void test_EM_FORMATRANGE(void) static void test_EM_FORMATRANGE(void)
{ {
int r; int i, tpp_x, tpp_y;
FORMATRANGE fr;
HDC hdc; HDC hdc;
HWND hwndRichEdit = new_richedit(NULL); HWND hwndRichEdit = new_richedit(NULL);
static const struct {
SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) haystack); const char *string; /* The string */
int first; /* First 'pagebreak', 0 for don't care */
int second; /* Second 'pagebreak', 0 for don't care */
} fmtstrings[] = {
{"WINE wine", 0, 0},
{"WINE wineWine", 0, 0},
{"WINE\r\nwine\r\nwine", 5, 10},
{"WINE\r\nWINEwine\r\nWINEwine", 5, 14},
{"WINE\r\n\r\nwine\r\nwine", 5, 6}
};
hdc = GetDC(hwndRichEdit); hdc = GetDC(hwndRichEdit);
ok(hdc != NULL, "Could not get HDC\n"); ok(hdc != NULL, "Could not get HDC\n");
/* Calculate the twips per pixel */
tpp_x = 1440 / GetDeviceCaps(hdc, LOGPIXELSX);
tpp_y = 1440 / GetDeviceCaps(hdc, LOGPIXELSY);
SendMessage(hwndRichEdit, EM_FORMATRANGE, FALSE, 0);
for (i = 0; i < sizeof(fmtstrings)/sizeof(fmtstrings[0]); i++)
{
FORMATRANGE fr;
GETTEXTLENGTHEX gtl;
SIZE stringsize;
int r, len;
SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) fmtstrings[i].string);
gtl.flags = GTL_NUMCHARS | GTL_PRECISE;
gtl.codepage = CP_ACP;
len = SendMessageA(hwndRichEdit, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
/* Get some size information for the string */
GetTextExtentPoint32(hdc, fmtstrings[i].string, strlen(fmtstrings[i].string), &stringsize);
/* Define the box to be half the width needed and a bit larger than the height.
* Changes to the width means we have at least 2 pages. Changes to the height
* is done so we can check the changing of fr.rc.bottom.
*/
fr.hdc = fr.hdcTarget = hdc; fr.hdc = fr.hdcTarget = hdc;
fr.rc.top = fr.rcPage.top = fr.rc.left = fr.rcPage.left = 0; fr.rc.top = fr.rcPage.top = fr.rc.left = fr.rcPage.left = 0;
fr.rc.right = fr.rcPage.right = GetDeviceCaps(hdc, HORZRES); fr.rc.right = fr.rcPage.right = (stringsize.cx / 2) * tpp_x;
fr.rc.bottom = fr.rcPage.bottom = GetDeviceCaps(hdc, VERTRES); fr.rc.bottom = fr.rcPage.bottom = (stringsize.cy + 10) * tpp_y;
fr.chrg.cpMin = 0;
fr.chrg.cpMax = 20;
r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, 0); r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, 0);
todo_wine { todo_wine {
ok(r == 31, "EM_FORMATRANGE expect %d, got %d\n", 31, r); ok(r == len, "Expected %d, got %d\n", len, r);
}
r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) &fr);
todo_wine {
ok(r == 20 || r == 9, "EM_FORMATRANGE expect 20 or 9, got %d\n", r);
} }
/* We know that the page can't hold the full string. See how many characters
* are on the first one
*/
fr.chrg.cpMin = 0; fr.chrg.cpMin = 0;
fr.chrg.cpMax = 10; fr.chrg.cpMax = -1;
r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) &fr); r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) &fr);
todo_wine { todo_wine {
ok(r == 10, "EM_FORMATRANGE expect %d, got %d\n", 10, r); ok(fr.rc.bottom == (stringsize.cy * tpp_y), "Expected bottom to be %d, got %d\n", (stringsize.cy * tpp_y), fr.rc.bottom);
} }
if (fmtstrings[i].first)
todo_wine {
ok(r == fmtstrings[i].first, "Expected %d, got %d\n", fmtstrings[i].first, r);
}
else
ok(r < len, "Expected < %d, got %d\n", len, r);
/* Do another page */
fr.chrg.cpMin = r;
r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) &fr);
if (fmtstrings[i].second)
todo_wine {
ok(r == fmtstrings[i].second, "Expected %d, got %d\n", fmtstrings[i].second, r);
}
else
ok (r < len, "Expected < %d, got %d\n", len, r);
/* There is at least on more page, but we don't care */
r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, 0); r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, 0);
todo_wine { todo_wine {
ok(r == 31, "EM_FORMATRANGE expect %d, got %d\n", 31, r); ok(r == len, "Expected %d, got %d\n", len, r);
}
} }
ReleaseDC(NULL, hdc);
DestroyWindow(hwndRichEdit); DestroyWindow(hwndRichEdit);
} }