riched20: Implement SetEnd().
This commit is contained in:
parent
3a0670ed7e
commit
f0959dc175
|
@ -948,14 +948,31 @@ static HRESULT WINAPI ITextRange_fnGetEnd(ITextRange *me, LONG *pcpLim)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ITextRange_fnSetEnd(ITextRange *me, LONG cpLim)
|
||||
static HRESULT WINAPI ITextRange_fnSetEnd(ITextRange *me, LONG end)
|
||||
{
|
||||
ITextRangeImpl *This = impl_from_ITextRange(me);
|
||||
int len;
|
||||
|
||||
TRACE("(%p)->(%d)\n", This, end);
|
||||
|
||||
if (!This->reOle)
|
||||
return CO_E_RELEASED;
|
||||
|
||||
FIXME("not implemented %p\n", This);
|
||||
return E_NOTIMPL;
|
||||
if (end == This->end)
|
||||
return S_FALSE;
|
||||
|
||||
if (end < This->start) {
|
||||
This->start = This->end = max(0, end);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
len = ME_GetTextLength(This->reOle->editor);
|
||||
if (end > len)
|
||||
This->end = len + 1;
|
||||
else
|
||||
This->end = end;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ITextRange_fnGetFont(ITextRange *me, ITextFont **font)
|
||||
|
|
|
@ -759,6 +759,76 @@ static void test_ITextRange_GetStart_GetEnd(void)
|
|||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
ok(end == 12, "got %d\n", end);
|
||||
|
||||
/* SetEnd */
|
||||
hres = ITextRange_SetStart(txtRge, 0);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
|
||||
/* same value */
|
||||
hres = ITextRange_SetEnd(txtRge, 5);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
|
||||
hres = ITextRange_SetEnd(txtRge, 5);
|
||||
ok(hres == S_FALSE, "got 0x%08x\n", hres);
|
||||
|
||||
/* negative resets to 0 */
|
||||
hres = ITextRange_SetEnd(txtRge, -1);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
|
||||
end = -1;
|
||||
hres = ITextRange_GetEnd(txtRge, &end);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
ok(end == 0, "got %d\n", end);
|
||||
|
||||
start = -1;
|
||||
hres = ITextRange_GetStart(txtRge, &start);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
ok(start == 0, "got %d\n", start);
|
||||
|
||||
/* greater than initial end, but less than total char count */
|
||||
hres = ITextRange_SetStart(txtRge, 3);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
|
||||
hres = ITextRange_SetEnd(txtRge, 1);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
|
||||
start = 0;
|
||||
hres = ITextRange_GetStart(txtRge, &start);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
ok(start == 1, "got %d\n", start);
|
||||
|
||||
end = 0;
|
||||
hres = ITextRange_GetEnd(txtRge, &end);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
ok(end == 1, "got %d\n", end);
|
||||
|
||||
/* more than total count */
|
||||
hres = ITextRange_SetEnd(txtRge, 50);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
|
||||
start = 0;
|
||||
hres = ITextRange_GetStart(txtRge, &start);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
ok(start == 1, "got %d\n", start);
|
||||
|
||||
end = 0;
|
||||
hres = ITextRange_GetEnd(txtRge, &end);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
ok(end == 13, "got %d\n", end);
|
||||
|
||||
/* zero */
|
||||
hres = ITextRange_SetEnd(txtRge, 0);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
|
||||
start = 0;
|
||||
hres = ITextRange_GetStart(txtRge, &start);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
ok(start == 0, "got %d\n", start);
|
||||
|
||||
end = 0;
|
||||
hres = ITextRange_GetEnd(txtRge, &end);
|
||||
ok(hres == S_OK, "got 0x%08x\n", hres);
|
||||
ok(end == 0, "got %d\n", end);
|
||||
|
||||
ITextRange_Release(txtRge);
|
||||
|
||||
release_interfaces(&w, &reOle, &txtDoc, NULL);
|
||||
|
|
Loading…
Reference in New Issue