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/richole... ============================================================================== --- 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/testlis... ============================================================================== --- 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/testlis... ============================================================================== --- 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 } };