Alex Villacís Lasso : riched20: EM_GETTEXTLENGTHEX must not count last paragraph break if GTL_USECRLF.

Alexandre Julliard julliard at winehq.org
Fri Dec 7 11:02:20 CST 2007


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

Author: Alex Villacís Lasso <a_villacis at palosanto.com>
Date:   Thu Dec  6 13:41:28 2007 -0500

riched20: EM_GETTEXTLENGTHEX must not count last paragraph break if GTL_USECRLF.

---

 dlls/riched20/caret.c        |    2 +-
 dlls/riched20/tests/editor.c |   42 ++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c
index 3bc5b5e..af52e9f 100644
--- a/dlls/riched20/caret.c
+++ b/dlls/riched20/caret.c
@@ -59,7 +59,7 @@ int ME_GetTextLengthEx(ME_TextEditor *editor, const GETTEXTLENGTHEX *how)
   length = ME_GetTextLength(editor);
 
   if ((GetWindowLongW(editor->hWnd, GWL_STYLE) & ES_MULTILINE) && (how->flags & GTL_USECRLF))
-    length += editor->nParagraphs;
+    length += editor->nParagraphs - 1;
   
   if (how->flags & GTL_NUMBYTES)
   {
diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c
index 83fe42d..5512017 100644
--- a/dlls/riched20/tests/editor.c
+++ b/dlls/riched20/tests/editor.c
@@ -2504,8 +2504,10 @@ static void test_EM_GETTEXTLENGTHEX(void)
     HWND hwnd;
     GETTEXTLENGTHEX gtl;
     int ret;
+    const char * base_string = "base string";
     const char * test_string = "a\nb\n\n\r\n";
     const char * test_string_after = "a";
+    const char * test_string_2 = "a\rtest\rstring";
     char buffer[64] = {0};
 
     /* single line */
@@ -2523,6 +2525,18 @@ static void test_EM_GETTEXTLENGTHEX(void)
     ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
     ok(ret == 0, "ret %d\n",ret);
 
+    SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) base_string);
+
+    gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF;
+    gtl.codepage = CP_ACP;
+    ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
+    ok(ret == strlen(base_string), "ret %d\n",ret);
+
+    gtl.flags = GTL_NUMCHARS | GTL_PRECISE;
+    gtl.codepage = CP_ACP;
+    ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
+    ok(ret == strlen(base_string), "ret %d\n",ret);
+
     SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) test_string);
 
     gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF;
@@ -2549,19 +2563,43 @@ static void test_EM_GETTEXTLENGTHEX(void)
     gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF;
     gtl.codepage = CP_ACP;
     ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
-    todo_wine ok(ret == 0, "ret %d\n",ret);
+    ok(ret == 0, "ret %d\n",ret);
 
     gtl.flags = GTL_NUMCHARS | GTL_PRECISE;
     gtl.codepage = CP_ACP;
     ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
     ok(ret == 0, "ret %d\n",ret);
 
+    SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) base_string);
+
+    gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF;
+    gtl.codepage = CP_ACP;
+    ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
+    ok(ret == strlen(base_string), "ret %d\n",ret);
+
+    gtl.flags = GTL_NUMCHARS | GTL_PRECISE;
+    gtl.codepage = CP_ACP;
+    ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
+    ok(ret == strlen(base_string), "ret %d\n",ret);
+
+    SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) test_string_2);
+
+    gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF;
+    gtl.codepage = CP_ACP;
+    ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
+    ok(ret == strlen(test_string_2) + 2, "ret %d\n",ret);
+
+    gtl.flags = GTL_NUMCHARS | GTL_PRECISE;
+    gtl.codepage = CP_ACP;
+    ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
+    ok(ret == strlen(test_string_2), "ret %d\n",ret);
+
     SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) test_string);
 
     gtl.flags = GTL_NUMCHARS | GTL_PRECISE | GTL_USECRLF;
     gtl.codepage = CP_ACP;
     ret = SendMessageA(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)&gtl, 0);
-    todo_wine ok(ret == 10, "ret %d\n",ret);
+    ok(ret == 10, "ret %d\n",ret);
 
     gtl.flags = GTL_NUMCHARS | GTL_PRECISE;
     gtl.codepage = CP_ACP;




More information about the wine-cvs mailing list