Clinton Stimpson : riched20: Add tests for EM_GETMODIFY.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Aug 23 16:36:27 CDT 2006
Module: wine
Branch: master
Commit: bbd05a4644ff7752cdacdaa447da1c6e2d82adcf
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=bbd05a4644ff7752cdacdaa447da1c6e2d82adcf
Author: Clinton Stimpson <cjstimpson at afinternet.net>
Date: Tue Aug 22 20:09:16 2006 -0600
riched20: Add tests for EM_GETMODIFY.
---
dlls/riched20/editor.c | 2
dlls/riched20/tests/editor.c | 194 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 195 insertions(+), 1 deletions(-)
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index 02358d3..15d2654 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -1626,7 +1626,7 @@ LRESULT WINAPI RichEditANSIWndProc(HWND
size_t len = wszText ? lstrlenW(wszText) : 0;
int from, to;
ME_Style *style;
- TRACE("EM_SETTEXEX - %s, flags %d, cp %d\n", debugstr_w(wszText), (int)pStruct->flags, pStruct->codepage);
+ TRACE("EM_SETTEXTEX - %s, flags %d, cp %d\n", debugstr_w(wszText), (int)pStruct->flags, pStruct->codepage);
if (pStruct->codepage != 1200) {
FIXME("EM_SETTEXTEX only supports unicode right now!\n");
return 0;
diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c
index e9a7550..9d3df13 100644
--- a/dlls/riched20/tests/editor.c
+++ b/dlls/riched20/tests/editor.c
@@ -50,6 +50,7 @@ struct find_s {
int _todo_wine;
};
+
struct find_s find_tests[] = {
/* Find in empty text */
{0, -1, "foo", FR_DOWN, -1, 0},
@@ -1123,6 +1124,198 @@ static void test_WM_SETFONT()
DestroyWindow(hwndRichEdit);
}
+
+static DWORD CALLBACK test_EM_GETMODIFY_esCallback(DWORD_PTR dwCookie,
+ LPBYTE pbBuff,
+ LONG cb,
+ LONG *pcb)
+{
+ const char** str = (const char**)dwCookie;
+ int size = strlen(*str);
+ if(size > 3) /* let's make it peice-meal for fun */
+ size = 3;
+ *pcb = cb;
+ if (*pcb > size) {
+ *pcb = size;
+ }
+ if (*pcb > 0) {
+ memcpy(pbBuff, *str, *pcb);
+ *str += *pcb;
+ }
+ return 0;
+}
+
+static void test_EM_GETMODIFY(void)
+{
+ HWND hwndRichEdit = new_richedit(NULL);
+ LRESULT result;
+ SETTEXTEX setText;
+ WCHAR TestItem1[] = {'T', 'e', 's', 't',
+ 'S', 'o', 'm', 'e',
+ 'T', 'e', 'x', 't', 0};
+ WCHAR TestItem2[] = {'T', 'e', 's', 't',
+ 'S', 'o', 'm', 'e',
+ 'O', 't', 'h', 'e', 'r',
+ 'T', 'e', 'x', 't', 0};
+ const char* streamText = "hello world";
+ CHARFORMAT2 cf2;
+ PARAFORMAT2 pf2;
+ EDITSTREAM es;
+
+ HFONT testFont = CreateFontA (0,0,0,0,FW_LIGHT, 0, 0, 0, ANSI_CHARSET,
+ OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH |
+ FF_DONTCARE, "Courier");
+
+ setText.codepage = 1200; /* no constant for unicode */
+ setText.flags = ST_KEEPUNDO;
+
+
+ /* modify flag shouldn't be set when richedit is first created */
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ ok (result == 0,
+ "EM_GETMODIFY returned non-zero, instead of zero on create\n");
+
+ /* setting modify flag should actually set it */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, TRUE, 0);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ ok (result != 0,
+ "EM_GETMODIFY returned zero, instead of non-zero on EM_SETMODIFY\n");
+
+ /* clearing modify flag should actually clear it */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ ok (result == 0,
+ "EM_GETMODIFY returned non-zero, instead of zero on EM_SETMODIFY\n");
+
+ /* setting font doesn't change modify flag */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ SendMessage(hwndRichEdit, WM_SETFONT, (WPARAM)testFont,(LPARAM) MAKELONG((WORD) TRUE, 0));
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ todo_wine {
+ ok (result == 0,
+ "EM_GETMODIFY returned non-zero, instead of zero on setting font\n");
+ }
+
+ /* setting text should set modify flag */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM)TestItem1);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ ok (result != 0,
+ "EM_GETMODIFY returned zero, instead of non-zero on setting text\n");
+
+ /* undo previous text doesn't reset modify flag */
+ SendMessage(hwndRichEdit, WM_UNDO, 0, 0);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ todo_wine {
+ ok (result != 0,
+ "EM_GETMODIFY returned zero, instead of non-zero on undo after setting text\n");
+ }
+
+ /* set text with no flag to keep undo stack should not set modify flag */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ setText.flags = 0;
+ SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM)TestItem1);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ todo_wine {
+ ok (result == 0,
+ "EM_GETMODIFY returned non-zero, instead of zero when setting text while not keeping undo stack\n");
+ }
+
+ /* WM_SETTEXT doesn't modify */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)TestItem2);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ todo_wine {
+ ok (result == 0,
+ "EM_GETMODIFY returned non-zero for WM_SETTEXT\n");
+ }
+
+ /* clear the text */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ SendMessage(hwndRichEdit, WM_CLEAR, 0, 0);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ ok (result == 0,
+ "EM_GETMODIFY returned non-zero, instead of zero for WM_CLEAR\n");
+
+ /* replace text */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM)TestItem1);
+ SendMessage(hwndRichEdit, EM_SETSEL, 0, 2);
+ SendMessage(hwndRichEdit, EM_REPLACESEL, TRUE, (LPARAM)TestItem2);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ ok (result != 0,
+ "EM_GETMODIFY returned zero, instead of non-zero when replacing text\n");
+
+ /* copy/paste text 1 */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ SendMessage(hwndRichEdit, EM_SETSEL, 0, 2);
+ SendMessage(hwndRichEdit, WM_COPY, 0, 0);
+ SendMessage(hwndRichEdit, WM_PASTE, 0, 0);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ ok (result != 0,
+ "EM_GETMODIFY returned zero, instead of non-zero when pasting identical text\n");
+
+ /* copy/paste text 2 */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ SendMessage(hwndRichEdit, EM_SETSEL, 0, 2);
+ SendMessage(hwndRichEdit, WM_COPY, 0, 0);
+ SendMessage(hwndRichEdit, EM_SETSEL, 0, 3);
+ SendMessage(hwndRichEdit, WM_PASTE, 0, 0);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ ok (result != 0,
+ "EM_GETMODIFY returned zero, instead of non-zero when pasting different text\n");
+
+ /* press char */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ SendMessage(hwndRichEdit, EM_SETSEL, 0, 1);
+ SendMessage(hwndRichEdit, WM_CHAR, 'A', 0);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ ok (result != 0,
+ "EM_GETMODIFY returned zero, instead of non-zero for WM_CHAR\n");
+
+ /* set char format */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ cf2.cbSize = sizeof(CHARFORMAT2);
+ SendMessage(hwndRichEdit, EM_GETCHARFORMAT, (WPARAM) SCF_DEFAULT,
+ (LPARAM) &cf2);
+ cf2.dwMask = CFM_ITALIC | cf2.dwMask;
+ cf2.dwEffects = CFE_ITALIC ^ cf2.dwEffects;
+ SendMessage(hwndRichEdit, EM_SETCHARFORMAT, (WPARAM) SCF_ALL, (LPARAM) &cf2);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ ok (result != 0,
+ "EM_GETMODIFY returned zero, instead of non-zero for EM_SETCHARFORMAT\n");
+
+ /* set para format */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ pf2.cbSize = sizeof(PARAFORMAT2);
+ SendMessage(hwndRichEdit, EM_GETPARAFORMAT, 0,
+ (LPARAM) &pf2);
+ pf2.dwMask = PFM_ALIGNMENT | pf2.dwMask;
+ pf2.wAlignment = PFA_RIGHT;
+ SendMessage(hwndRichEdit, EM_SETPARAFORMAT, 0, (LPARAM) &pf2);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ todo_wine {
+ ok (result == 0,
+ "EM_GETMODIFY returned zero, instead of non-zero for EM_SETPARAFORMAT\n");
+ }
+
+ /* EM_STREAM */
+ SendMessage(hwndRichEdit, EM_SETMODIFY, FALSE, 0);
+ es.dwCookie = (DWORD_PTR)&streamText;
+ es.dwError = 0;
+ es.pfnCallback = test_EM_GETMODIFY_esCallback;
+ SendMessage(hwndRichEdit, EM_STREAMIN,
+ (WPARAM)(SF_TEXT), (LPARAM)&es);
+ result = SendMessage(hwndRichEdit, EM_GETMODIFY, 0, 0);
+ todo_wine {
+ ok (result != 0,
+ "EM_GETMODIFY returned zero, instead of non-zero for EM_STREAM\n");
+ }
+
+
+ DestroyWindow(hwndRichEdit);
+}
+
START_TEST( editor )
{
MSG msg;
@@ -1147,6 +1340,7 @@ START_TEST( editor )
test_EM_EXLIMITTEXT();
test_EM_GETLIMITTEXT();
test_WM_SETFONT();
+ test_EM_GETMODIFY();
/* Set the environment variable WINETEST_RICHED20 to keep windows
* responsive and open for 30 seconds. This is useful for debugging.
More information about the wine-cvs
mailing list