Jactry Zeng : riched20/tests: Test IRichEditOle_InsertObject() with specified character position.
Alexandre Julliard
julliard at winehq.org
Mon May 24 15:59:53 CDT 2021
Module: wine
Branch: master
Commit: db7964bb2cffe04a483ac913158379544a573e7c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=db7964bb2cffe04a483ac913158379544a573e7c
Author: Jactry Zeng <jzeng at codeweavers.com>
Date: Thu May 20 15:56:11 2021 +0800
riched20/tests: Test IRichEditOle_InsertObject() with specified character position.
Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/riched20/tests/richole.c | 180 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 177 insertions(+), 3 deletions(-)
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
index 9f463fd69e0..c2457ae5146 100644
--- a/dlls/riched20/tests/richole.c
+++ b/dlls/riched20/tests/richole.c
@@ -3252,9 +3252,22 @@ static void test_InsertObject(void)
REOBJECT reo1, reo2, reo3, received_reo;
HRESULT hr;
HWND hwnd;
- LONG count;
+ const WCHAR *expected_string;
+ const CHAR *expected_stringA;
+ ITextSelection *selection;
+ IDataObject *dataobject;
+ TEXTRANGEA textrange;
+ FORMATETC formatetc;
+ CHARRANGE charrange;
+ GETTEXTEX gettextex;
+ STGMEDIUM stgmedium;
+ WCHAR buffer[1024];
+ CHAR bufferA[1024];
+ LONG count, result;
+ ITextRange *range;
+ BSTR bstr;
- create_interfaces(&hwnd, &reole, &doc, NULL);
+ create_interfaces(&hwnd, &reole, &doc, &selection);
SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)test_text1);
hr = IRichEditOle_InsertObject(reole, NULL);
@@ -3352,7 +3365,168 @@ static void test_InsertObject(void)
hr = IRichEditOle_GetObject(reole, REO_IOB_SELECTION, &received_reo, REO_GETOBJ_ALL_INTERFACES);
ok(hr == E_INVALIDARG, "IRichEditOle_GetObject should fail: 0x%08x\n", hr);
- release_interfaces(&hwnd, &reole, &doc, NULL);
+ SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)test_text1);
+
+ /* "abc|d|efg" */
+ INSERT_REOBJECT(reole, &reo1, 3, 1);
+ INSERT_REOBJECT(reole, &reo2, 5, 2);
+
+ SendMessageW(hwnd, EM_SETSEL, 2, 3);
+ result = SendMessageW(hwnd, EM_SELECTIONTYPE, 0, 0);
+ ok(result == SEL_TEXT, "Got selection type: %x.\n", result);
+
+ SendMessageW(hwnd, EM_SETSEL, 3, 4);
+ result = SendMessageW(hwnd, EM_SELECTIONTYPE, 0, 0);
+ todo_wine ok(result == SEL_OBJECT, "Got selection type: %x.\n", result);
+ todo_wine CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 1, NULL, NULL, reo1.polesite, 1);
+
+ SendMessageW(hwnd, EM_SETSEL, 2, 4);
+ result = SendMessageW(hwnd, EM_SELECTIONTYPE, 0, 0);
+ todo_wine ok(result == (SEL_TEXT | SEL_OBJECT), "Got selection type: %x.\n", result);
+
+ SendMessageW(hwnd, EM_SETSEL, 5, 6);
+ todo_wine CHECK_REOBJECT_STRUCT(reole, REO_IOB_SELECTION, REO_GETOBJ_ALL_INTERFACES, 1, NULL, NULL, reo2.polesite, 2);
+
+ expected_string = L"abc\xfffc""d\xfffc""efg";
+ gettextex.cb = sizeof(buffer);
+ gettextex.flags = GT_DEFAULT;
+ gettextex.codepage = 1200;
+ gettextex.lpDefaultChar = NULL;
+ gettextex.lpUsedDefChar = NULL;
+ result = SendMessageW(hwnd, EM_GETTEXTEX, (WPARAM)&gettextex, (LPARAM)buffer);
+ ok(result == lstrlenW(expected_string), "Got wrong length: %d.\n", result);
+ todo_wine ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
+
+ gettextex.flags = GT_RAWTEXT;
+ memset(buffer, 0, sizeof(buffer));
+ result = SendMessageW(hwnd, EM_GETTEXTEX, (WPARAM)&gettextex, (LPARAM)buffer);
+ ok(result == lstrlenW(expected_string), "Got wrong length: %d.\n", result);
+ todo_wine ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
+
+ expected_stringA = "abc d efg";
+ memset(bufferA, 0, sizeof(bufferA));
+ SendMessageA(hwnd, EM_SETSEL, 0, -1);
+ result = SendMessageA(hwnd, EM_GETSELTEXT, (WPARAM)sizeof(bufferA), (LPARAM)bufferA);
+ ok(result == strlen(expected_stringA), "Got wrong length: %d.\n", result);
+ todo_wine ok(!strcmp(bufferA, expected_stringA), "Got wrong content: %s.\n", bufferA);
+
+ memset(bufferA, 0, sizeof(bufferA));
+ textrange.lpstrText = bufferA;
+ textrange.chrg.cpMin = 0;
+ textrange.chrg.cpMax = 11;
+ result = SendMessageA(hwnd, EM_GETTEXTRANGE, 0, (LPARAM)&textrange);
+ ok(result == strlen(expected_stringA), "Got wrong length: %d.\n", result);
+ todo_wine ok(!strcmp(bufferA, expected_stringA), "Got wrong content: %s.\n", bufferA);
+
+ expected_string = L"abc\xfffc""d\xfffc""efg\r";
+ hr = ITextDocument_Range(doc, 0, 11, &range);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ hr = ITextRange_GetText(range, &bstr);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(lstrlenW(bstr) == lstrlenW(expected_string), "Got wrong length: %d.\n", lstrlenW(bstr));
+ todo_wine ok(!lstrcmpW(bstr, expected_string), "Got text: %s.\n", wine_dbgstr_w(bstr));
+ SysFreeString(bstr);
+ hr = ITextRange_SetRange(range, 3, 4);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ hr = ITextRange_GetChar(range, &result);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(result == 0xfffc, "Got char: %c\n", result);
+ ITextRange_Release(range);
+
+ SendMessageW(hwnd, EM_SETSEL, 0, -1);
+ hr = ITextSelection_GetText(selection, &bstr);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(lstrlenW(bstr) == lstrlenW(expected_string), "Got wrong length: %d.\n", lstrlenW(bstr));
+ todo_wine ok(!lstrcmpW(bstr, expected_string), "Got text: %s.\n", wine_dbgstr_w(bstr));
+ SysFreeString(bstr);
+ SendMessageW(hwnd, EM_SETSEL, 3, 4);
+ result = 0;
+ hr = ITextSelection_GetChar(selection, &result);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(result == 0xfffc, "Got char: %c\n", result);
+
+ SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)"");
+ result = SendMessageW(hwnd, EM_SETTEXTMODE, (WPARAM)TM_PLAINTEXT, 0);
+ ok(!result, "Got result %x.\n", result);
+ /* "abc|d|efg" */
+ SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)test_text1);
+ INSERT_REOBJECT(reole, &reo1, 3, 1);
+ INSERT_REOBJECT(reole, &reo2, 5, 2);
+
+ expected_string = L"abc d efg";
+ charrange.cpMin = 0;
+ charrange.cpMax = 11;
+ hr = IRichEditOle_GetClipboardData(reole, &charrange, 1, &dataobject);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ formatetc.cfFormat = CF_UNICODETEXT;
+ formatetc.dwAspect = DVASPECT_CONTENT;
+ formatetc.ptd = NULL;
+ formatetc.tymed = TYMED_HGLOBAL;
+ formatetc.lindex = -1;
+ hr = IDataObject_GetData(dataobject, &formatetc, &stgmedium);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(lstrlenW(stgmedium.hGlobal) == lstrlenW(expected_string), "Got wrong length: %d.\n", result);
+ todo_wine ok(!lstrcmpW(stgmedium.hGlobal, expected_string), "Got wrong content: %s.\n", debugstr_w(stgmedium.hGlobal));
+
+ expected_string = L"abc\xfffc""d\xfffc""efg";
+ gettextex.cb = sizeof(buffer);
+ gettextex.flags = GT_DEFAULT;
+ gettextex.codepage = 1200;
+ gettextex.lpDefaultChar = NULL;
+ gettextex.lpUsedDefChar = NULL;
+ result = SendMessageW(hwnd, EM_GETTEXTEX, (WPARAM)&gettextex, (LPARAM)buffer);
+ ok(result == lstrlenW(expected_string), "Got wrong length: %d.\n", result);
+ todo_wine ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
+
+ gettextex.flags = GT_RAWTEXT;
+ memset(buffer, 0, sizeof(buffer));
+ result = SendMessageW(hwnd, EM_GETTEXTEX, (WPARAM)&gettextex, (LPARAM)buffer);
+ ok(result == lstrlenW(expected_string), "Got wrong length: %d.\n", result);
+ todo_wine ok(!lstrcmpW(buffer, expected_string), "Got wrong content: %s.\n", debugstr_w(buffer));
+
+ expected_stringA = "abc d efg";
+ memset(bufferA, 0, sizeof(bufferA));
+ SendMessageA(hwnd, EM_SETSEL, 0, -1);
+ result = SendMessageA(hwnd, EM_GETSELTEXT, (WPARAM)sizeof(bufferA), (LPARAM)bufferA);
+ ok(result == strlen(expected_stringA), "Got wrong length: %d.\n", result);
+ todo_wine ok(!strcmp(bufferA, expected_stringA), "Got wrong content: %s.\n", bufferA);
+
+ memset(bufferA, 0, sizeof(bufferA));
+ textrange.lpstrText = bufferA;
+ textrange.chrg.cpMin = 0;
+ textrange.chrg.cpMax = 11;
+ result = SendMessageA(hwnd, EM_GETTEXTRANGE, 0, (LPARAM)&textrange);
+ ok(result == strlen(expected_stringA), "Got wrong length: %d.\n", result);
+ todo_wine ok(!strcmp(bufferA, expected_stringA), "Got wrong content: %s.\n", bufferA);
+
+ expected_string = L"abc\xfffc""d\xfffc""efg";
+ hr = ITextDocument_Range(doc, 0, 11, &range);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ hr = ITextRange_GetText(range, &bstr);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(lstrlenW(bstr) == lstrlenW(expected_string), "Got wrong length: %d.\n", lstrlenW(bstr));
+ todo_wine ok(!lstrcmpW(bstr, expected_string), "Got text: %s.\n", wine_dbgstr_w(bstr));
+ SysFreeString(bstr);
+ hr = ITextRange_SetRange(range, 3, 4);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ hr = ITextRange_GetChar(range, &result);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(result == 0xfffc, "Got char: %c\n", result);
+ ITextRange_Release(range);
+
+ SendMessageW(hwnd, EM_SETSEL, 0, -1);
+ hr = ITextSelection_GetText(selection, &bstr);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(lstrlenW(bstr) == lstrlenW(expected_string), "Got wrong length: %d.\n", lstrlenW(bstr));
+ todo_wine ok(!lstrcmpW(bstr, expected_string), "Got text: %s.\n", wine_dbgstr_w(bstr));
+ SysFreeString(bstr);
+ SendMessageW(hwnd, EM_SETSEL, 3, 4);
+ result = 0;
+ hr = ITextSelection_GetChar(selection, &result);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(result == 0xfffc, "Got char: %c\n", result);
+
+ release_interfaces(&hwnd, &reole, &doc, &selection);
}
static void test_GetStoryLength(void)
More information about the wine-cvs
mailing list