Author: pschweitzer
Date: Thu Aug 28 05:54:35 2008
New Revision: 35729
URL:
http://svn.reactos.org/svn/reactos?rev=35729&view=rev
Log:
Synced riched20_winetest, riched32_winetest with Wine HEAD
Modified:
trunk/rostests/winetests/riched20/editor.c
trunk/rostests/winetests/riched20/richole.c
trunk/rostests/winetests/riched20/testlist.c
trunk/rostests/winetests/riched32/testlist.c
Modified: trunk/rostests/winetests/riched20/editor.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/riched20/editor…
==============================================================================
--- trunk/rostests/winetests/riched20/editor.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/riched20/editor.c [iso-8859-1] Thu Aug 28 05:54:35 2008
@@ -614,7 +614,7 @@
(LPARAM) &cf2);
ok(rc == 1, "EM_SETCHARFORMAT returned %d instead of 1\n", rc);
rc = SendMessage(hwndRichEdit, EM_CANUNDO, 0, 0);
- todo_wine ok(rc == FALSE, "Should not be able to undo here.\n");
+ ok(rc == FALSE, "Should not be able to undo here.\n");
SendMessage(hwndRichEdit, EM_EMPTYUNDOBUFFER, 0, 0);
/* A valid flag, CHARFORMAT2 structure minimally filled */
@@ -1087,6 +1087,27 @@
DestroyWindow(hwndRichEdit);
}
+static void test_SETPARAFORMAT(void)
+{
+ HWND hwndRichEdit = new_richedit(NULL);
+ PARAFORMAT2 fmt;
+ HRESULT ret;
+ fmt.cbSize = sizeof(PARAFORMAT2);
+ fmt.dwMask = PFM_ALIGNMENT;
+ fmt.wAlignment = PFA_LEFT;
+
+ ret = SendMessage(hwndRichEdit, EM_SETPARAFORMAT, 0, (LPARAM) &fmt);
+ ok(ret != 0, "expected non-zero got %d\n", ret);
+
+ fmt.cbSize = sizeof(PARAFORMAT2);
+ fmt.dwMask = -1;
+ ret = SendMessage(hwndRichEdit, EM_GETPARAFORMAT, 0, (LPARAM) &fmt);
+ ok(ret == PFM_ALL2, "expected %x got %x\n", PFM_ALL2, ret);
+ ok(fmt.dwMask == PFM_ALL2, "expected %x got %x\n", PFM_ALL2, fmt.dwMask);
+
+ DestroyWindow(hwndRichEdit);
+}
+
static void test_TM_PLAINTEXT(void)
{
/*Tests plain text properties*/
@@ -1383,6 +1404,9 @@
static void test_EM_AUTOURLDETECT(void)
{
+ /* DO NOT change the properties of the first two elements. To shorten the
+ tests, all tests after WM_SETTEXT test just the first two elements -
+ one non-URL and one URL */
struct urls_s {
const char *text;
int is_url;
@@ -1647,10 +1671,12 @@
}
/* Test detection of URLs within normal text - WM_CHAR case. */
- for (i = 0; i < sizeof(urls)/sizeof(struct urls_s); i++) {
+ /* Test only the first two URL examples for brevity */
+ for (i = 0; i < 2; i++) {
hwndRichEdit = new_richedit(parent);
- for (j = 0; j < sizeof(templates_delim) / sizeof(const char *); j++) {
+ /* Also for brevity, test only the first three delimiters */
+ for (j = 0; j < 3; j++) {
char * at_pos;
int at_offset;
int end_offset;
@@ -1674,7 +1700,6 @@
}
}
SendMessage(hwndRichEdit, WM_GETTEXT, sizeof(buffer), (LPARAM)buffer);
- trace("Using template: %s\n", templates_delim[j]);
/* This assumes no templates start with the URL itself, and that they
have at least two characters before the URL text */
@@ -1784,7 +1809,8 @@
}
/* Test detection of URLs within normal text - EM_SETTEXTEX case. */
- for (i = 0; i < sizeof(urls)/sizeof(struct urls_s); i++) {
+ /* Test just the first two URL examples for brevity */
+ for (i = 0; i < 2; i++) {
SETTEXTEX st;
hwndRichEdit = new_richedit(parent);
@@ -1971,7 +1997,8 @@
}
/* Test detection of URLs within normal text - EM_REPLACESEL case. */
- for (i = 0; i < sizeof(urls)/sizeof(struct urls_s); i++) {
+ /* Test just the first two URL examples for brevity */
+ for (i = 0; i < 2; i++) {
hwndRichEdit = new_richedit(parent);
/* Set selection with X to the URL */
@@ -2223,6 +2250,728 @@
DestroyWindow(hwndRichEdit);
}
+unsigned int recursionLevel = 0;
+unsigned int WM_SIZE_recursionLevel = 0;
+BOOL bailedOutOfRecursion = FALSE;
+LRESULT WINAPI (*richeditProc)(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
+
+static LRESULT WINAPI RicheditStupidOverrideProcA(HWND hwnd, UINT message, WPARAM wParam,
LPARAM lParam)
+{
+ LRESULT r;
+
+ if (bailedOutOfRecursion) return 0;
+ if (recursionLevel >= 32) {
+ bailedOutOfRecursion = TRUE;
+ return 0;
+ }
+
+ recursionLevel++;
+ switch (message) {
+ case WM_SIZE:
+ WM_SIZE_recursionLevel++;
+ r = richeditProc(hwnd, message, wParam, lParam);
+ /* Because, uhhhh... I never heard of ES_DISABLENOSCROLL */
+ ShowScrollBar(hwnd, SB_VERT, TRUE);
+ WM_SIZE_recursionLevel--;
+ break;
+ default:
+ r = richeditProc(hwnd, message, wParam, lParam);
+ break;
+ }
+ recursionLevel--;
+ return r;
+}
+
+static void test_scrollbar_visibility(void)
+{
+ HWND hwndRichEdit;
+ const char *
text="a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n";
+ SCROLLINFO si;
+ WNDCLASSA cls;
+ BOOL r;
+
+ /* These tests show that richedit should temporarily refrain from automatically
+ hiding or showing its scrollbars (vertical at least) when an explicit request
+ is made via ShowScrollBar() or similar, outside of standard richedit logic.
+ Some applications depend on forced showing (when otherwise richedit would
+ hide the vertical scrollbar) and are thrown on an endless recursive loop
+ if richedit auto-hides the scrollbar again. Apparently they never heard of
+ the ES_DISABLENOSCROLL style... */
+
+ hwndRichEdit = new_richedit(NULL);
+
+ /* Test default scrollbar visibility behavior */
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Oddly, setting text to NULL does *not* reset the scrollbar range,
+ even though it hides the scrollbar */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Setting non-scrolling text again does *not* reset scrollbar range */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ DestroyWindow(hwndRichEdit);
+
+ /* Test again, with ES_DISABLENOSCROLL style */
+ hwndRichEdit = new_window(RICHEDIT_CLASS, ES_MULTILINE|ES_DISABLENOSCROLL, NULL);
+
+ /* Test default scrollbar visibility behavior */
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 1,
+ "reported page/range is %d (%d..%d) expected 0 (0..1)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 1,
+ "reported page/range is %d (%d..%d) expected 0 (0..1)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Oddly, setting text to NULL does *not* reset the scrollbar range */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Setting non-scrolling text again does *not* reset scrollbar range */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax > 1,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ DestroyWindow(hwndRichEdit);
+
+ /* Test behavior with explicit visibility request, using ShowScrollBar() */
+ hwndRichEdit = new_richedit(NULL);
+
+ /* Previously failed because builtin incorrectly re-hides scrollbar forced visible */
+ ShowScrollBar(hwndRichEdit, SB_VERT, TRUE);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ todo_wine {
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 100,
+ "reported page/range is %d (%d..%d) expected 0 (0..100)\n",
+ si.nPage, si.nMin, si.nMax);
+ }
+
+ /* Ditto, see above */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ todo_wine {
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 100,
+ "reported page/range is %d (%d..%d) expected 0 (0..100)\n",
+ si.nPage, si.nMin, si.nMax);
+ }
+
+ /* Ditto, see above */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ todo_wine {
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 100,
+ "reported page/range is %d (%d..%d) expected 0 (0..100)\n",
+ si.nPage, si.nMin, si.nMax);
+ }
+
+ /* Ditto, see above */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a\na");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ todo_wine {
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 100,
+ "reported page/range is %d (%d..%d) expected 0 (0..100)\n",
+ si.nPage, si.nMin, si.nMax);
+ }
+
+ /* Ditto, see above */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ todo_wine {
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 100,
+ "reported page/range is %d (%d..%d) expected 0 (0..100)\n",
+ si.nPage, si.nMin, si.nMax);
+ }
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text);
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ DestroyWindow(hwndRichEdit);
+
+ hwndRichEdit = new_richedit(NULL);
+
+ ShowScrollBar(hwndRichEdit, SB_VERT, FALSE);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Previously, builtin incorrectly re-shows explicitly hidden scrollbar */
+ ShowScrollBar(hwndRichEdit, SB_VERT, FALSE);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Testing effect of EM_SCROLL on scrollbar visibility. It seems that
+ EM_SCROLL will make visible any forcefully invisible scrollbar */
+ SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEDOWN, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ ShowScrollBar(hwndRichEdit, SB_VERT, FALSE);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Again, EM_SCROLL, with SB_LINEUP */
+ SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEUP, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ DestroyWindow(hwndRichEdit);
+
+
+ /* Test behavior with explicit visibility request, using SetWindowLong()() */
+ hwndRichEdit = new_richedit(NULL);
+
+#define ENABLE_WS_VSCROLL(hwnd) \
+ SetWindowLongA(hwnd, GWL_STYLE, GetWindowLongA(hwnd, GWL_STYLE) | WS_VSCROLL)
+#define DISABLE_WS_VSCROLL(hwnd) \
+ SetWindowLongA(hwnd, GWL_STYLE, GetWindowLongA(hwnd, GWL_STYLE) & ~WS_VSCROLL)
+
+ /* Previously failed because builtin incorrectly re-hides scrollbar forced visible */
+ ENABLE_WS_VSCROLL(hwndRichEdit);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Ditto, see above */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Ditto, see above */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Ditto, see above */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a\na");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Ditto, see above */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text);
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ DestroyWindow(hwndRichEdit);
+
+ hwndRichEdit = new_richedit(NULL);
+
+ DISABLE_WS_VSCROLL(hwndRichEdit);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)"a");
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage == 0 && si.nMin == 0 && si.nMax == 0,
+ "reported page/range is %d (%d..%d) expected all 0\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Previously, builtin incorrectly re-shows explicitly hidden scrollbar */
+ DISABLE_WS_VSCROLL(hwndRichEdit);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d) expected nMax/nPage nonzero\n",
+ si.nPage, si.nMin, si.nMax);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ DISABLE_WS_VSCROLL(hwndRichEdit);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Testing effect of EM_SCROLL on scrollbar visibility. It seems that
+ EM_SCROLL will make visible any forcefully invisible scrollbar */
+ SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEDOWN, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ DISABLE_WS_VSCROLL(hwndRichEdit);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) == 0),
+ "Vertical scrollbar is visible, should be invisible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ /* Again, EM_SCROLL, with SB_LINEUP */
+ SendMessage(hwndRichEdit, EM_SCROLL, SB_LINEUP, 0);
+ memset(&si, 0, sizeof(si));
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE | SIF_RANGE;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok (((GetWindowLongA(hwndRichEdit, GWL_STYLE) & WS_VSCROLL) != 0),
+ "Vertical scrollbar is invisible, should be visible.\n");
+ ok(si.nPage != 0 && si.nMin == 0 && si.nMax != 0,
+ "reported page/range is %d (%d..%d)\n",
+ si.nPage, si.nMin, si.nMax);
+
+ DestroyWindow(hwndRichEdit);
+
+ /* This window proc models what is going on with Corman Lisp 3.0.
+ At WM_SIZE, this proc unconditionally calls ShowScrollBar() to
+ force the scrollbar into visibility. Recursion should NOT happen
+ as a result of this action.
+ */
+ r = GetClassInfoA(NULL, RICHEDIT_CLASS, &cls);
+ if (r) {
+ richeditProc = cls.lpfnWndProc;
+ cls.lpfnWndProc = RicheditStupidOverrideProcA;
+ cls.lpszClassName = "RicheditStupidOverride";
+ if(!RegisterClassA(&cls)) assert(0);
+
+ recursionLevel = 0;
+ WM_SIZE_recursionLevel = 0;
+ bailedOutOfRecursion = FALSE;
+ hwndRichEdit = new_window(cls.lpszClassName, ES_MULTILINE, NULL);
+ ok(!bailedOutOfRecursion,
+ "WM_SIZE/scrollbar mutual recursion detected, expected none!\n");
+
+ recursionLevel = 0;
+ WM_SIZE_recursionLevel = 0;
+ bailedOutOfRecursion = FALSE;
+ MoveWindow(hwndRichEdit, 0, 0, 250, 100, TRUE);
+ ok(!bailedOutOfRecursion,
+ "WM_SIZE/scrollbar mutual recursion detected, expected none!\n");
+
+ /* Unblock window in order to process WM_DESTROY */
+ recursionLevel = 0;
+ bailedOutOfRecursion = FALSE;
+ WM_SIZE_recursionLevel = 0;
+ DestroyWindow(hwndRichEdit);
+ }
+}
+
static void test_EM_SETUNDOLIMIT(void)
{
/* cases we test for:
@@ -2452,6 +3201,12 @@
WCHAR TestItem1[] = {'T', 'e', 's', 't',
'S', 'o', 'm', 'e',
'T', 'e', 'x', 't', 0};
+ WCHAR TestItem1alt[] = {'T', 'T', 'e', 's',
+ 't', 'S', 'o', 'm',
+ 'e', 'T', 'e', 'x',
+ 't', 't', 'S', 'o',
+ 'm', 'e', 'T', 'e',
+ 'x', 't', 0};
WCHAR TestItem2[] = {'T', 'e', 's', 't',
'S', 'o', 'm', 'e',
'T', 'e', 'x', 't',
@@ -2480,6 +3235,7 @@
' ','\r', 0};
#define MAX_BUF_LEN 1024
WCHAR buf[MAX_BUF_LEN];
+ char bufACP[MAX_BUF_LEN];
char * p;
int result;
CHARRANGE cr;
@@ -2499,7 +3255,7 @@
"EM_GETTEXTEX results not what was set by EM_SETTEXTEX\n");
/* Unlike WM_SETTEXT/WM_GETTEXT pair, EM_SETTEXTEX/EM_GETTEXTEX does not
- convert \r to \r\n on return
+ convert \r to \r\n on return: !ST_SELECTION && Unicode && !\rtf
*/
setText.codepage = 1200; /* no constant for unicode */
getText.codepage = 1200; /* no constant for unicode */
@@ -2545,7 +3301,7 @@
"EM_GETTEXTEX results not what was set by EM_SETTEXTEX\n");
- /* \r\n pairs get changed into \r */
+ /* \r\n pairs get changed into \r: !ST_SELECTION && Unicode && !\rtf
*/
setText.codepage = 1200; /* no constant for unicode */
getText.codepage = 1200; /* no constant for unicode */
getText.cb = MAX_BUF_LEN;
@@ -2558,7 +3314,7 @@
ok(lstrcmpW(buf, TestItem3_after) == 0,
"EM_SETTEXTEX did not convert properly\n");
- /* \n also gets changed to \r */
+ /* \n also gets changed to \r: !ST_SELECTION && Unicode && !\rtf */
setText.codepage = 1200; /* no constant for unicode */
getText.codepage = 1200; /* no constant for unicode */
getText.cb = MAX_BUF_LEN;
@@ -2571,7 +3327,7 @@
ok(lstrcmpW(buf, TestItem3_after) == 0,
"EM_SETTEXTEX did not convert properly\n");
- /* \r\r\n gets changed into single space */
+ /* \r\r\n gets changed into single space: !ST_SELECTION && Unicode &&
!\rtf */
setText.codepage = 1200; /* no constant for unicode */
getText.codepage = 1200; /* no constant for unicode */
getText.cb = MAX_BUF_LEN;
@@ -2584,6 +3340,7 @@
ok(lstrcmpW(buf, TestItem4_after) == 0,
"EM_SETTEXTEX did not convert properly\n");
+ /* !ST_SELECTION && Unicode && !\rtf */
result = SendMessage(hwndRichEdit, EM_SETTEXTEX,
(WPARAM)&setText, (LPARAM) NULL);
SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf);
@@ -2593,14 +3350,14 @@
ok(lstrlenW(buf) == 0,
"EM_SETTEXTEX with NULL lParam should clear rich edit.\n");
- /* put some text back */
+ /* put some text back: !ST_SELECTION && Unicode && !\rtf */
setText.flags = 0;
SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem1);
/* select some text */
cr.cpMax = 1;
cr.cpMin = 3;
SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr);
- /* replace current selection */
+ /* replace current selection: ST_SELECTION && Unicode && !\rtf */
setText.flags = ST_SELECTION;
result = SendMessage(hwndRichEdit, EM_SETTEXTEX,
(WPARAM)&setText, (LPARAM) NULL);
@@ -2609,14 +3366,14 @@
" with no text should return 0. Got %i\n",
result);
- /* put some text back */
+ /* put some text back: !ST_SELECTION && Unicode && !\rtf */
setText.flags = 0;
SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem1);
/* select some text */
cr.cpMax = 1;
cr.cpMin = 3;
SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr);
- /* replace current selection */
+ /* replace current selection: ST_SELECTION && Unicode && !\rtf */
setText.flags = ST_SELECTION;
result = SendMessage(hwndRichEdit, EM_SETTEXTEX,
(WPARAM)&setText, (LPARAM) TestItem1);
@@ -2641,6 +3398,7 @@
(WPARAM)(SF_RTF), (LPARAM)&es);
trace("EM_STREAMOUT produced: \n%s\n", (char *)buf);
+ /* !ST_SELECTION && !Unicode && \rtf */
setText.codepage = CP_ACP;/* EM_STREAMOUT saved as ANSI string */
getText.codepage = 1200; /* no constant for unicode */
getText.cb = MAX_BUF_LEN;
@@ -2653,6 +3411,66 @@
SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf);
ok(lstrcmpW(buf, TestItem1) == 0,
"EM_GETTEXTEX results not what was set by EM_SETTEXTEX\n");
+
+ /* The following test demonstrates that EM_SETTEXTEX supports RTF strings with a
selection */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "TestSomeText"); /*
TestItem1 */
+ p = (char *)buf;
+ es.dwCookie = (DWORD_PTR)&p;
+ es.dwError = 0;
+ es.pfnCallback = test_WM_SETTEXT_esCallback;
+ memset(buf, 0, sizeof(buf));
+ SendMessage(hwndRichEdit, EM_STREAMOUT,
+ (WPARAM)(SF_RTF), (LPARAM)&es);
+ trace("EM_STREAMOUT produced: \n%s\n", (char *)buf);
+
+ /* select some text */
+ cr.cpMax = 1;
+ cr.cpMin = 3;
+ SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr);
+
+ /* ST_SELECTION && !Unicode && \rtf */
+ setText.codepage = CP_ACP;/* EM_STREAMOUT saved as ANSI string */
+ getText.codepage = 1200; /* no constant for unicode */
+ getText.cb = MAX_BUF_LEN;
+ getText.flags = GT_DEFAULT;
+ getText.lpDefaultChar = NULL;
+ getText.lpUsedDefChar = NULL;
+
+ setText.flags = ST_SELECTION;
+ SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) buf);
+ SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf);
+ ok(lstrcmpW(buf, TestItem1alt) == 0,
+ "EM_GETTEXTEX results not what was set by EM_SETTEXTEX when"
+ " using ST_SELECTION on an RTF string and non-Unicode\n");
+
+ /* The following test demonstrates that EM_SETTEXTEX replacing a selection */
+ setText.codepage = 1200; /* no constant for unicode */
+ getText.codepage = CP_ACP;
+ getText.cb = MAX_BUF_LEN;
+
+ setText.flags = 0;
+ SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) TestItem1); /*
TestItem1 */
+ SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) bufACP);
+
+ /* select some text */
+ cr.cpMax = 1;
+ cr.cpMin = 3;
+ SendMessage(hwndRichEdit, EM_EXSETSEL, 0, (LPARAM) &cr);
+
+ /* ST_SELECTION && !Unicode && !\rtf */
+ setText.codepage = CP_ACP;
+ getText.codepage = 1200; /* no constant for unicode */
+ getText.cb = MAX_BUF_LEN;
+ getText.flags = GT_DEFAULT;
+ getText.lpDefaultChar = NULL;
+ getText.lpUsedDefChar = NULL;
+
+ setText.flags = ST_SELECTION;
+ SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) bufACP);
+ SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) buf);
+ ok(lstrcmpW(buf, TestItem1alt) == 0,
+ "EM_GETTEXTEX results not what was set by EM_SETTEXTEX when"
+ " using ST_SELECTION and non-Unicode\n");
DestroyWindow(hwndRichEdit);
@@ -3687,7 +4505,7 @@
struct StringWithLength cookieForStream4;
const char * streamText4 =
"This text just needs to be long enough to cause run to be split onto "\
- "two seperate lines and make sure the null terminating character is "\
+ "two separate lines and make sure the null terminating character is "\
"handled properly.\0";
int length4 = strlen(streamText4) + 1;
cookieForStream4.buffer = (char *)streamText4;
@@ -4492,25 +5310,25 @@
/* one |two three */
SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
ok(sel_start == sel_end, "Selection should be empty\n");
- ok(sel_start == 4, "Cursur is at %d instead of %d\n", sel_start, 4);
+ ok(sel_start == 4, "Cursor is at %d instead of %d\n", sel_start, 4);
SEND_CTRL_RIGHT(hwnd);
/* one two |three */
SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
ok(sel_start == sel_end, "Selection should be empty\n");
- ok(sel_start == 9, "Cursur is at %d instead of %d\n", sel_start, 9);
+ ok(sel_start == 9, "Cursor is at %d instead of %d\n", sel_start, 9);
SEND_CTRL_LEFT(hwnd);
/* one |two three */
SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
ok(sel_start == sel_end, "Selection should be empty\n");
- ok(sel_start == 4, "Cursur is at %d instead of %d\n", sel_start, 4);
+ ok(sel_start == 4, "Cursor is at %d instead of %d\n", sel_start, 4);
SEND_CTRL_LEFT(hwnd);
/* |one two three */
SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
ok(sel_start == sel_end, "Selection should be empty\n");
- ok(sel_start == 0, "Cursur is at %d instead of %d\n", sel_start, 0);
+ ok(sel_start == 0, "Cursor is at %d instead of %d\n", sel_start, 0);
SendMessage(hwnd, EM_SETSEL, 8, 8);
/* one two | three */
@@ -4518,7 +5336,7 @@
/* one two |three */
SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
ok(sel_start == sel_end, "Selection should be empty\n");
- ok(sel_start == 9, "Cursur is at %d instead of %d\n", sel_start, 9);
+ ok(sel_start == 9, "Cursor is at %d instead of %d\n", sel_start, 9);
SendMessage(hwnd, EM_SETSEL, 11, 11);
/* one two th|ree */
@@ -4526,7 +5344,7 @@
/* one two |three */
SendMessage(hwnd, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
ok(sel_start == sel_end, "Selection should be empty\n");
- ok(sel_start == 9, "Cursur is at %d instead of %d\n", sel_start, 9);
+ ok(sel_start == 9, "Cursor is at %d instead of %d\n", sel_start, 9);
DestroyWindow(hwnd);
}
@@ -4565,6 +5383,7 @@
test_EM_POSFROMCHAR();
test_EM_SCROLLCARET();
test_EM_SCROLL();
+ test_scrollbar_visibility();
test_WM_SETTEXT();
test_EM_LINELENGTH();
test_EM_SETCHARFORMAT();
@@ -4598,6 +5417,7 @@
test_undo_coalescing();
test_word_movement();
test_EM_CHARFROMPOS();
+ test_SETPARAFORMAT();
/* Set the environment variable WINETEST_RICHED20 to keep windows
* responsive and open for 30 seconds. This is useful for debugging.
Modified: trunk/rostests/winetests/riched20/richole.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/riched20/richol…
==============================================================================
--- trunk/rostests/winetests/riched20/richole.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/riched20/richole.c [iso-8859-1] Thu Aug 28 05:54:35 2008
@@ -26,16 +26,12 @@
#include <winbase.h>
#include <wingdi.h>
#include <winuser.h>
+#include <initguid.h>
#include <ole2.h>
#include <richedit.h>
#include <richole.h>
#include <tom.h>
#include <wine/test.h>
-
-#include <initguid.h>
-DEFINE_GUID(IID_ITextDocument, 0x8cc497c0, 0xa1df, 0x11ce, 0x80, 0x98, 0x00, 0xaa, 0x00,
0x47, 0xbe, 0x5d);
-DEFINE_GUID(IID_ITextRange, 0x8cc497c2, 0xa1df, 0x11ce, 0x80, 0x98, 0x00, 0xaa, 0x00,
0x47, 0xbe, 0x5d);
-DEFINE_GUID(IID_ITextSelection, 0x8cc497c1, 0xa1df, 0x11ce, 0x80, 0x98, 0x00, 0xaa, 0x00,
0x47, 0xbe, 0x5d);
static HMODULE hmoduleRichEdit;
Modified: trunk/rostests/winetests/riched20/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/riched20/testli…
==============================================================================
--- trunk/rostests/winetests/riched20/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/riched20/testlist.c [iso-8859-1] Thu Aug 28 05:54:35 2008
@@ -6,12 +6,8 @@
#define STANDALONE
#include "wine/test.h"
-extern void func_editor(void);
-extern void func_richole(void);
const struct test winetest_testlist[] =
{
- { "editor", func_editor },
- { "richole", func_richole },
{ 0, 0 }
};
Modified: trunk/rostests/winetests/riched32/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/riched32/testli…
==============================================================================
--- trunk/rostests/winetests/riched32/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/riched32/testlist.c [iso-8859-1] Thu Aug 28 05:54:35 2008
@@ -6,10 +6,8 @@
#define STANDALONE
#include "wine/test.h"
-extern void func_editor(void);
const struct test winetest_testlist[] =
{
- { "editor", func_editor },
{ 0, 0 }
};