riched20/tests: Some tests for GetText().
This commit is contained in:
parent
f4438f1ee5
commit
b43a0e1175
|
@ -1142,10 +1142,16 @@ static HRESULT WINAPI ITextRange_fnInvoke(ITextRange *me, DISPID dispIdMember, R
|
||||||
static HRESULT WINAPI ITextRange_fnGetText(ITextRange *me, BSTR *pbstr)
|
static HRESULT WINAPI ITextRange_fnGetText(ITextRange *me, BSTR *pbstr)
|
||||||
{
|
{
|
||||||
ITextRangeImpl *This = impl_from_ITextRange(me);
|
ITextRangeImpl *This = impl_from_ITextRange(me);
|
||||||
|
|
||||||
|
FIXME("(%p)->(%p): stub\n", This, pbstr);
|
||||||
|
|
||||||
if (!This->reOle)
|
if (!This->reOle)
|
||||||
return CO_E_RELEASED;
|
return CO_E_RELEASED;
|
||||||
|
|
||||||
FIXME("not implemented %p\n", This);
|
if (!pbstr)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
*pbstr = NULL;
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -439,7 +439,7 @@ static void test_ITextDocument_Open(void)
|
||||||
VariantClear(&testfile);
|
VariantClear(&testfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_ITextSelection_GetText(void)
|
static void test_GetText(void)
|
||||||
{
|
{
|
||||||
HWND w;
|
HWND w;
|
||||||
IRichEditOle *reOle = NULL;
|
IRichEditOle *reOle = NULL;
|
||||||
|
@ -455,11 +455,14 @@ static void test_ITextSelection_GetText(void)
|
||||||
static const WCHAR bufW4[] = {'T', 'e', 's', 't', 'S', 'o', 'm',
|
static const WCHAR bufW4[] = {'T', 'e', 's', 't', 'S', 'o', 'm',
|
||||||
'e', 'T', 'e', 'x', 't', '\r', 0};
|
'e', 'T', 'e', 'x', 't', '\r', 0};
|
||||||
static const WCHAR bufW5[] = {'\r', 0};
|
static const WCHAR bufW5[] = {'\r', 0};
|
||||||
|
static const WCHAR bufW6[] = {'T','e','s','t','S','o','m','e','T',0};
|
||||||
BOOL is64bit = sizeof(void *) > sizeof(int);
|
BOOL is64bit = sizeof(void *) > sizeof(int);
|
||||||
|
ITextRange *range;
|
||||||
|
|
||||||
create_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
create_interfaces(&w, &reOle, &txtDoc, &txtSel);
|
||||||
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||||
|
|
||||||
|
/* ITextSelection */
|
||||||
first = 0, lim = 4;
|
first = 0, lim = 4;
|
||||||
SendMessageA(w, EM_SETSEL, first, lim);
|
SendMessageA(w, EM_SETSEL, first, lim);
|
||||||
hres = ITextSelection_GetText(txtSel, &bstr);
|
hres = ITextSelection_GetText(txtSel, &bstr);
|
||||||
|
@ -520,45 +523,151 @@ static void test_ITextSelection_GetText(void)
|
||||||
ok(hres == S_OK, "ITextSelection_GetText\n");
|
ok(hres == S_OK, "ITextSelection_GetText\n");
|
||||||
ok(!bstr, "got wrong text: %s\n", wine_dbgstr_w(bstr));
|
ok(!bstr, "got wrong text: %s\n", wine_dbgstr_w(bstr));
|
||||||
|
|
||||||
release_interfaces(&w, &reOle, &txtDoc, NULL);
|
/* ITextRange */
|
||||||
|
hres = ITextDocument_Range(txtDoc, 0, 4, &range);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
hres = ITextRange_GetText(range, &bstr);
|
||||||
|
todo_wine {
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
ok(!lstrcmpW(bstr, bufW1), "got wrong text: %s\n", wine_dbgstr_w(bstr));
|
||||||
|
}
|
||||||
|
SysFreeString(bstr);
|
||||||
|
ITextRange_Release(range);
|
||||||
|
|
||||||
hres = ITextSelection_GetText(txtSel, &bstr);
|
hres = ITextDocument_Range(txtDoc, 4, 0, &range);
|
||||||
ok(hres == CO_E_RELEASED, "got 0x%08x\n", hres);
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
hres = ITextRange_GetText(range, &bstr);
|
||||||
|
todo_wine {
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
ok(!lstrcmpW(bstr, bufW1), "got wrong text: %s\n", wine_dbgstr_w(bstr));
|
||||||
|
}
|
||||||
|
SysFreeString(bstr);
|
||||||
|
ITextRange_Release(range);
|
||||||
|
|
||||||
|
hres = ITextDocument_Range(txtDoc, 1, 1, &range);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
hres = ITextRange_GetText(range, &bstr);
|
||||||
|
todo_wine
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
ok(!bstr, "got wrong text: %s\n", wine_dbgstr_w(bstr));
|
||||||
if (!is64bit)
|
if (!is64bit)
|
||||||
{
|
{
|
||||||
|
hres = ITextRange_GetText(range, NULL);
|
||||||
|
ok(hres == E_INVALIDARG, "got 0x%08x\n", hres);
|
||||||
|
}
|
||||||
|
ITextRange_Release(range);
|
||||||
|
|
||||||
|
hres = ITextDocument_Range(txtDoc, 8, 12, &range);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
hres = ITextRange_GetText(range, &bstr);
|
||||||
|
todo_wine {
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
ok(!lstrcmpW(bstr, bufW3), "got wrong text: %s\n", wine_dbgstr_w(bstr));
|
||||||
|
}
|
||||||
|
SysFreeString(bstr);
|
||||||
|
ITextRange_Release(range);
|
||||||
|
|
||||||
|
hres = ITextDocument_Range(txtDoc, 8, 13, &range);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
hres = ITextRange_GetText(range, &bstr);
|
||||||
|
todo_wine {
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
ok(!lstrcmpW(bstr, bufW2), "got wrong text: %s\n", wine_dbgstr_w(bstr));
|
||||||
|
}
|
||||||
|
SysFreeString(bstr);
|
||||||
|
ITextRange_Release(range);
|
||||||
|
|
||||||
|
hres = ITextDocument_Range(txtDoc, 12, 13, &range);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
hres = ITextRange_GetText(range, &bstr);
|
||||||
|
todo_wine {
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
ok(!lstrcmpW(bstr, bufW5), "got wrong text: %s\n", wine_dbgstr_w(bstr));
|
||||||
|
}
|
||||||
|
SysFreeString(bstr);
|
||||||
|
ITextRange_Release(range);
|
||||||
|
|
||||||
|
hres = ITextDocument_Range(txtDoc, 0, -1, &range);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
hres = ITextRange_GetText(range, &bstr);
|
||||||
|
todo_wine
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
ok(!bstr, "got wrong text: %s\n", wine_dbgstr_w(bstr));
|
||||||
|
ITextRange_Release(range);
|
||||||
|
|
||||||
|
hres = ITextDocument_Range(txtDoc, -1, 9, &range);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
hres = ITextRange_GetText(range, &bstr);
|
||||||
|
todo_wine {
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
ok(!lstrcmpW(bstr, bufW6), "got wrong text: %s\n", wine_dbgstr_w(bstr));
|
||||||
|
}
|
||||||
|
SysFreeString(bstr);
|
||||||
|
|
||||||
|
release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||||
|
|
||||||
|
/* detached selection/range */
|
||||||
|
if (is64bit) {
|
||||||
|
bstr = (void*)0xdeadbeef;
|
||||||
|
hres = ITextSelection_GetText(txtSel, &bstr);
|
||||||
|
ok(hres == CO_E_RELEASED, "got 0x%08x\n", hres);
|
||||||
|
todo_wine
|
||||||
|
ok(bstr == NULL, "got %p\n", bstr);
|
||||||
|
|
||||||
|
bstr = (void*)0xdeadbeef;
|
||||||
|
hres = ITextRange_GetText(range, &bstr);
|
||||||
|
ok(hres == CO_E_RELEASED, "got 0x%08x\n", hres);
|
||||||
|
todo_wine
|
||||||
|
ok(bstr == NULL, "got %p\n", bstr);
|
||||||
|
}
|
||||||
|
else {
|
||||||
hres = ITextSelection_GetText(txtSel, NULL);
|
hres = ITextSelection_GetText(txtSel, NULL);
|
||||||
ok(hres == CO_E_RELEASED, "got 0x%08x\n", hres);
|
ok(hres == CO_E_RELEASED, "got 0x%08x\n", hres);
|
||||||
|
|
||||||
|
hres = ITextRange_GetText(range, NULL);
|
||||||
|
ok(hres == CO_E_RELEASED, "got 0x%08x\n", hres);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ITextRange_Release(range);
|
||||||
ITextSelection_Release(txtSel);
|
ITextSelection_Release(txtSel);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_ITextDocument_Range(void)
|
static void test_ITextDocument_Range(void)
|
||||||
{
|
{
|
||||||
|
static const CHAR test_text1[] = "TestSomeText";
|
||||||
HWND w;
|
HWND w;
|
||||||
IRichEditOle *reOle = NULL;
|
IRichEditOle *reOle = NULL;
|
||||||
ITextDocument *txtDoc = NULL;
|
ITextDocument *txtDoc = NULL;
|
||||||
ITextRange *txtRge = NULL;
|
ITextRange *txtRge, *range2;
|
||||||
ITextRange *pointer = NULL;
|
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
ULONG refcount;
|
LONG value;
|
||||||
|
|
||||||
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||||
hres = ITextDocument_Range(txtDoc, 0, 0, &txtRge);
|
hres = ITextDocument_Range(txtDoc, 0, 0, &txtRge);
|
||||||
ok(hres == S_OK, "ITextDocument_Range fails 0x%x.\n", hres);
|
ok(hres == S_OK, "ITextDocument_Range fails 0x%x.\n", hres);
|
||||||
refcount = get_refcount((IUnknown *)txtRge);
|
EXPECT_REF(txtRge, 1);
|
||||||
ok(refcount == 1, "get wrong refcount: returned %d expected 1\n", refcount);
|
|
||||||
|
|
||||||
pointer = txtRge;
|
hres = ITextDocument_Range(txtDoc, 0, 0, &range2);
|
||||||
hres = ITextDocument_Range(txtDoc, 0, 0, &txtRge);
|
|
||||||
ok(hres == S_OK, "ITextDocument_Range fails 0x%x.\n", hres);
|
ok(hres == S_OK, "ITextDocument_Range fails 0x%x.\n", hres);
|
||||||
ok(pointer != txtRge, "A new pointer should be returned\n");
|
ok(range2 != txtRge, "A new pointer should be returned\n");
|
||||||
ITextRange_Release(pointer);
|
ITextRange_Release(range2);
|
||||||
|
|
||||||
hres = ITextDocument_Range(txtDoc, 0, 0, NULL);
|
hres = ITextDocument_Range(txtDoc, 0, 0, NULL);
|
||||||
ok(hres == E_INVALIDARG, "ITextDocument_Range should fail 0x%x.\n", hres);
|
ok(hres == E_INVALIDARG, "ITextDocument_Range should fail 0x%x.\n", hres);
|
||||||
|
|
||||||
|
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||||
|
|
||||||
|
hres = ITextDocument_Range(txtDoc, 8, 30, &range2);
|
||||||
|
ok(hres == S_OK, "ITextDocument_Range fails 0x%x.\n", hres);
|
||||||
|
hres = ITextRange_GetStart(range2, &value);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
ok(value == 8, "got %d\n", value);
|
||||||
|
|
||||||
|
hres = ITextRange_GetEnd(range2, &value);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
|
ok(value == 13, "got %d\n", value);
|
||||||
|
ITextRange_Release(range2);
|
||||||
|
|
||||||
release_interfaces(&w, &reOle, &txtDoc, NULL);
|
release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||||
hres = ITextRange_CanEdit(txtRge, NULL);
|
hres = ITextRange_CanEdit(txtRge, NULL);
|
||||||
ok(hres == CO_E_RELEASED, "ITextRange after ITextDocument destroyed\n");
|
ok(hres == CO_E_RELEASED, "ITextRange after ITextDocument destroyed\n");
|
||||||
|
@ -579,7 +688,8 @@ static void test_ITextRange_GetChar(void)
|
||||||
first = 0, lim = 4;
|
first = 0, lim = 4;
|
||||||
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||||
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||||
ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
hres = ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
pch = 0xdeadbeef;
|
pch = 0xdeadbeef;
|
||||||
hres = ITextRange_GetChar(txtRge, &pch);
|
hres = ITextRange_GetChar(txtRge, &pch);
|
||||||
ok(hres == S_OK, "ITextRange_GetChar\n");
|
ok(hres == S_OK, "ITextRange_GetChar\n");
|
||||||
|
@ -590,7 +700,8 @@ static void test_ITextRange_GetChar(void)
|
||||||
first = 0, lim = 0;
|
first = 0, lim = 0;
|
||||||
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||||
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||||
ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
hres = ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
pch = 0xdeadbeef;
|
pch = 0xdeadbeef;
|
||||||
hres = ITextRange_GetChar(txtRge, &pch);
|
hres = ITextRange_GetChar(txtRge, &pch);
|
||||||
ok(hres == S_OK, "ITextRange_GetChar\n");
|
ok(hres == S_OK, "ITextRange_GetChar\n");
|
||||||
|
@ -601,7 +712,8 @@ static void test_ITextRange_GetChar(void)
|
||||||
first = 12, lim = 12;
|
first = 12, lim = 12;
|
||||||
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||||
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||||
ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
hres = ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
pch = 0xdeadbeef;
|
pch = 0xdeadbeef;
|
||||||
hres = ITextRange_GetChar(txtRge, &pch);
|
hres = ITextRange_GetChar(txtRge, &pch);
|
||||||
ok(hres == S_OK, "ITextRange_GetChar\n");
|
ok(hres == S_OK, "ITextRange_GetChar\n");
|
||||||
|
@ -612,7 +724,8 @@ static void test_ITextRange_GetChar(void)
|
||||||
first = 13, lim = 13;
|
first = 13, lim = 13;
|
||||||
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||||
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||||
ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
hres = ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
pch = 0xdeadbeef;
|
pch = 0xdeadbeef;
|
||||||
hres = ITextRange_GetChar(txtRge, &pch);
|
hres = ITextRange_GetChar(txtRge, &pch);
|
||||||
ok(hres == S_OK, "ITextRange_GetChar\n");
|
ok(hres == S_OK, "ITextRange_GetChar\n");
|
||||||
|
@ -623,7 +736,8 @@ static void test_ITextRange_GetChar(void)
|
||||||
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
create_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||||
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||||
first = 12, lim = 12;
|
first = 12, lim = 12;
|
||||||
ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
hres = ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
hres = ITextRange_GetChar(txtRge, NULL);
|
hres = ITextRange_GetChar(txtRge, NULL);
|
||||||
ok(hres == E_INVALIDARG, "ITextRange_GetChar\n");
|
ok(hres == E_INVALIDARG, "ITextRange_GetChar\n");
|
||||||
ITextRange_Release(txtRge);
|
ITextRange_Release(txtRge);
|
||||||
|
@ -692,7 +806,8 @@ static void test_ITextRange_GetStart_GetEnd(void)
|
||||||
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
SendMessageA(w, WM_SETTEXT, 0, (LPARAM)test_text1);
|
||||||
|
|
||||||
first = 1, lim = 6;
|
first = 1, lim = 6;
|
||||||
ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
hres = ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
start = 0xdeadbeef;
|
start = 0xdeadbeef;
|
||||||
hres = ITextRange_GetStart(txtRge, &start);
|
hres = ITextRange_GetStart(txtRge, &start);
|
||||||
ok(hres == S_OK, "ITextRange_GetStart\n");
|
ok(hres == S_OK, "ITextRange_GetStart\n");
|
||||||
|
@ -704,7 +819,8 @@ static void test_ITextRange_GetStart_GetEnd(void)
|
||||||
ITextRange_Release(txtRge);
|
ITextRange_Release(txtRge);
|
||||||
|
|
||||||
first = 6, lim = 1;
|
first = 6, lim = 1;
|
||||||
ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
hres = ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
start = 0xdeadbeef;
|
start = 0xdeadbeef;
|
||||||
hres = ITextRange_GetStart(txtRge, &start);
|
hres = ITextRange_GetStart(txtRge, &start);
|
||||||
ok(hres == S_OK, "ITextRange_GetStart\n");
|
ok(hres == S_OK, "ITextRange_GetStart\n");
|
||||||
|
@ -716,7 +832,8 @@ static void test_ITextRange_GetStart_GetEnd(void)
|
||||||
ITextRange_Release(txtRge);
|
ITextRange_Release(txtRge);
|
||||||
|
|
||||||
first = -1, lim = 13;
|
first = -1, lim = 13;
|
||||||
ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
hres = ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
start = 0xdeadbeef;
|
start = 0xdeadbeef;
|
||||||
hres = ITextRange_GetStart(txtRge, &start);
|
hres = ITextRange_GetStart(txtRge, &start);
|
||||||
ok(hres == S_OK, "ITextRange_GetStart\n");
|
ok(hres == S_OK, "ITextRange_GetStart\n");
|
||||||
|
@ -728,7 +845,8 @@ static void test_ITextRange_GetStart_GetEnd(void)
|
||||||
ITextRange_Release(txtRge);
|
ITextRange_Release(txtRge);
|
||||||
|
|
||||||
first = 13, lim = 13;
|
first = 13, lim = 13;
|
||||||
ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
hres = ITextDocument_Range(txtDoc, first, lim, &txtRge);
|
||||||
|
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||||
start = 0xdeadbeef;
|
start = 0xdeadbeef;
|
||||||
hres = ITextRange_GetStart(txtRge, &start);
|
hres = ITextRange_GetStart(txtRge, &start);
|
||||||
ok(hres == S_OK, "ITextRange_GetStart\n");
|
ok(hres == S_OK, "ITextRange_GetStart\n");
|
||||||
|
@ -1771,7 +1889,7 @@ START_TEST(richole)
|
||||||
|
|
||||||
test_Interfaces();
|
test_Interfaces();
|
||||||
test_ITextDocument_Open();
|
test_ITextDocument_Open();
|
||||||
test_ITextSelection_GetText();
|
test_GetText();
|
||||||
test_ITextSelection_GetChar();
|
test_ITextSelection_GetChar();
|
||||||
test_ITextSelection_GetStart_GetEnd();
|
test_ITextSelection_GetStart_GetEnd();
|
||||||
test_ITextSelection_Collapse();
|
test_ITextSelection_Collapse();
|
||||||
|
|
Loading…
Reference in New Issue