Dylan Smith : richedit: Added test for scroll position after EM_SETTEXTEX.

Alexandre Julliard julliard at winehq.org
Thu Jan 22 08:41:38 CST 2009


Module: wine
Branch: master
Commit: 9b7825f6f66fd8264d8c0600fab95c540ae0dec0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9b7825f6f66fd8264d8c0600fab95c540ae0dec0

Author: Dylan Smith <dylan.ah.smith at gmail.com>
Date:   Wed Jan 21 10:09:58 2009 -0500

richedit: Added test for scroll position after EM_SETTEXTEX.

---

 dlls/riched20/tests/editor.c |   74 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 73 insertions(+), 1 deletions(-)

diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c
index aa78e2a..244ab09 100644
--- a/dlls/riched20/tests/editor.c
+++ b/dlls/riched20/tests/editor.c
@@ -3345,7 +3345,9 @@ static void test_EM_STREAMOUT(void)
 
 static void test_EM_SETTEXTEX(void)
 {
-  HWND hwndRichEdit = new_richedit(NULL);
+  HWND hwndRichEdit, parent;
+  SCROLLINFO si;
+  int sel_start, sel_end;
   SETTEXTEX setText;
   GETTEXTEX getText;
   WCHAR TestItem1[] = {'T', 'e', 's', 't', 
@@ -3392,6 +3394,76 @@ static void test_EM_SETTEXTEX(void)
   int result;
   CHARRANGE cr;
   EDITSTREAM es;
+  WNDCLASSA cls;
+
+  /* Test the scroll position with and without a parent window.
+   *
+   * For some reason the scroll position is 0 after EM_SETTEXTEX
+   * with the ST_SELECTION flag only when the control has a parent
+   * window, even though the selection is at the end. */
+  cls.style = 0;
+  cls.lpfnWndProc = DefWindowProcA;
+  cls.cbClsExtra = 0;
+  cls.cbWndExtra = 0;
+  cls.hInstance = GetModuleHandleA(0);
+  cls.hIcon = 0;
+  cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+  cls.hbrBackground = GetStockObject(WHITE_BRUSH);
+  cls.lpszMenuName = NULL;
+  cls.lpszClassName = "ParentTestClass";
+  if(!RegisterClassA(&cls)) assert(0);
+
+  parent = CreateWindow(cls.lpszClassName, NULL, WS_POPUP|WS_VISIBLE,
+                        0, 0, 200, 60, NULL, NULL, NULL, NULL);
+  ok (parent != 0, "Failed to create parent window\n");
+
+  hwndRichEdit = CreateWindowEx(0,
+                        RICHEDIT_CLASS, NULL,
+                        ES_MULTILINE|WS_VSCROLL|WS_VISIBLE|WS_CHILD,
+                        0, 0, 200, 60, parent, NULL,
+                        hmoduleRichEdit, NULL);
+
+  setText.codepage = CP_ACP;
+  setText.flags = ST_SELECTION;
+  SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText,
+              (LPARAM)"{\\rtf 1\\par 2\\par 3\\par 4\\par 5\\par 6\\par 7\\par 8\\par 9\\par}");
+  si.cbSize = sizeof(si);
+  si.fMask = SIF_ALL;
+  GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+  todo_wine ok(si.nPos == 0, "Position is incorrectly at %d\n", si.nPos);
+  SendMessage(hwndRichEdit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
+  ok(sel_start == 18, "Selection start incorrectly at %d\n", sel_start);
+  ok(sel_end == 18, "Selection end incorrectly at %d\n", sel_end);
+
+  DestroyWindow(parent);
+
+  /* Test without a parent window */
+  hwndRichEdit = new_richedit(NULL);
+  setText.codepage = CP_ACP;
+  setText.flags = ST_SELECTION;
+  SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText,
+              (LPARAM)"{\\rtf 1\\par 2\\par 3\\par 4\\par 5\\par 6\\par 7\\par 8\\par 9\\par}");
+  si.cbSize = sizeof(si);
+  si.fMask = SIF_ALL;
+  GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+  ok(si.nPos != 0, "Position is incorrectly at %d\n", si.nPos);
+  SendMessage(hwndRichEdit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
+  ok(sel_start == 18, "Selection start incorrectly at %d\n", sel_start);
+  ok(sel_end == 18, "Selection end incorrectly at %d\n", sel_end);
+
+  /* The scroll position should also be 0 after EM_SETTEXTEX with ST_DEFAULT,
+   * but this time it is because the selection is at the beginning. */
+  setText.codepage = CP_ACP;
+  setText.flags = ST_DEFAULT;
+  SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText,
+              (LPARAM)"{\\rtf 1\\par 2\\par 3\\par 4\\par 5\\par 6\\par 7\\par 8\\par 9\\par}");
+  si.cbSize = sizeof(si);
+  si.fMask = SIF_ALL;
+  GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+  ok(si.nPos == 0, "Position is incorrectly at %d\n", si.nPos);
+  SendMessage(hwndRichEdit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
+  ok(sel_start == 0, "Selection start incorrectly at %d\n", sel_start);
+  ok(sel_end == 0, "Selection end incorrectly at %d\n", sel_end);
 
   setText.codepage = 1200;  /* no constant for unicode */
   getText.codepage = 1200;  /* no constant for unicode */




More information about the wine-cvs mailing list