msctf/test: Add sink_fire_ok helper and use it to check sink firing.

This commit is contained in:
Aric Stewart 2009-09-08 13:29:49 -05:00 committed by Alexandre Julliard
parent 3afda68cc6
commit b0e452f1cf
1 changed files with 61 additions and 31 deletions

View File

@ -44,6 +44,13 @@ static ITextStoreACPSink *ACPSink;
#define SINK_EXPECTED 1
#define SINK_FIRED 2
#define SINK_IGNORE 3
#define SINK_OPTIONAL 4
#define SINK_ACTION_MASK 0xff
#define SINK_OPTION_MASK 0xff00
#define SINK_EXPECTED_COUNT_MASK 0xff0000
#define SINK_OPTION_TODO 0x0100
static BOOL test_ShouldActivate = FALSE;
static BOOL test_ShouldDeactivate = FALSE;
@ -69,6 +76,46 @@ static INT test_ACP_SetSelection = SINK_UNEXPECTED;
static INT test_OnEndEdit = SINK_UNEXPECTED;
static inline int expected_count(int *sink)
{
return (*sink & SINK_EXPECTED_COUNT_MASK)>>16;
}
static inline void _sink_fire_ok(INT *sink, const CHAR* name)
{
int count;
int todo = *sink & SINK_OPTION_TODO;
int action = *sink & SINK_ACTION_MASK;
if (winetest_interactive)
winetest_trace("firing %s\n",name);
switch (action)
{
case SINK_OPTIONAL:
case SINK_EXPECTED:
count = expected_count(sink);
if (count > 1)
{
count --;
*sink = (*sink & ~SINK_EXPECTED_COUNT_MASK) + (count << 16);
return;
}
break;
case SINK_IGNORE:
winetest_trace("Ignoring %s\n",name);
return;
default:
if (todo) todo_wine
{
winetest_ok(0, "Unexpected %s sink\n",name);
}
}
*sink = SINK_FIRED;
}
#define sink_fire_ok(a,b) (winetest_set_location(__FILE__,__LINE__), 0) ? 0 : _sink_fire_ok(a,b)
/**********************************************************************
* ITextStoreACP
**********************************************************************/
@ -125,8 +172,7 @@ static HRESULT WINAPI TextStoreACP_AdviseSink(ITextStoreACP *iface,
{
HRESULT hr;
ok(test_ACP_AdviseSink == SINK_EXPECTED, "Unexpected TextStoreACP_AdviseSink sink\n");
test_ACP_AdviseSink = SINK_FIRED;
sink_fire_ok(&test_ACP_AdviseSink,"TextStoreACP_AdviseSink");
hr = IUnknown_QueryInterface(punk, &IID_ITextStoreACPSink,(LPVOID*)(&ACPSink));
ok(SUCCEEDED(hr),"Unable to QueryInterface on sink\n");
@ -143,19 +189,14 @@ static HRESULT WINAPI TextStoreACP_UnadviseSink(ITextStoreACP *iface,
static HRESULT WINAPI TextStoreACP_RequestLock(ITextStoreACP *iface,
DWORD dwLockFlags, HRESULT *phrSession)
{
ok(test_ACP_RequestLock == SINK_EXPECTED,"Unexpected TextStoreACP_RequestLock\n");
test_ACP_RequestLock = SINK_FIRED;
sink_fire_ok(&test_ACP_RequestLock,"TextStoreACP_RequestLock");
*phrSession = ITextStoreACPSink_OnLockGranted(ACPSink, dwLockFlags);
return S_OK;
}
static HRESULT WINAPI TextStoreACP_GetStatus(ITextStoreACP *iface,
TS_STATUS *pdcs)
{
ok(test_ACP_GetStatus == SINK_EXPECTED || test_ACP_GetStatus == SINK_IGNORE, "Unexpected TextStoreACP_GetStatus\n");
if (test_ACP_GetStatus == SINK_EXPECTED)
test_ACP_GetStatus = SINK_FIRED;
else if (test_ACP_GetStatus == SINK_IGNORE)
trace("Ignoring fired TextStoreACP_GetStatus\n");
sink_fire_ok(&test_ACP_GetStatus,"TextStoreACP_GetStatus");
pdcs->dwDynamicFlags = documentStatus;
return S_OK;
}
@ -169,8 +210,7 @@ static HRESULT WINAPI TextStoreACP_QueryInsert(ITextStoreACP *iface,
static HRESULT WINAPI TextStoreACP_GetSelection(ITextStoreACP *iface,
ULONG ulIndex, ULONG ulCount, TS_SELECTION_ACP *pSelection, ULONG *pcFetched)
{
ok(test_ACP_GetSelection == SINK_EXPECTED, "Unexpected TextStoreACP_GetSelection\n");
test_ACP_GetSelection = SINK_FIRED;
sink_fire_ok(&test_ACP_GetSelection,"TextStoreACP_GetSelection");
pSelection->acpStart = 10;
pSelection->acpEnd = 20;
@ -183,8 +223,7 @@ static HRESULT WINAPI TextStoreACP_GetSelection(ITextStoreACP *iface,
static HRESULT WINAPI TextStoreACP_SetSelection(ITextStoreACP *iface,
ULONG ulCount, const TS_SELECTION_ACP *pSelection)
{
ok(test_ACP_SetSelection == SINK_EXPECTED,"Unexpected TextStoreACP_SetSelection\n");
test_ACP_SetSelection = SINK_FIRED;
sink_fire_ok(&test_ACP_SetSelection,"TextStoreACP_SetSelection");
return S_OK;
}
static HRESULT WINAPI TextStoreACP_GetText(ITextStoreACP *iface,
@ -231,8 +270,7 @@ static HRESULT WINAPI TextStoreACP_InsertTextAtSelection(ITextStoreACP *iface,
DWORD dwFlags, const WCHAR *pchText, ULONG cch, LONG *pacpStart,
LONG *pacpEnd, TS_TEXTCHANGE *pChange)
{
ok(test_ACP_InsertTextAtSelection == SINK_EXPECTED,"Unexpected TextStoreACP_InsertTextAtSelection\n");
test_ACP_InsertTextAtSelection = SINK_FIRED;
sink_fire_ok(&test_ACP_InsertTextAtSelection,"TextStoreACP_InsertTextAtSelection");
return S_OK;
}
static HRESULT WINAPI TextStoreACP_InsertEmbeddedAtSelection(ITextStoreACP *iface,
@ -278,8 +316,7 @@ static HRESULT WINAPI TextStoreACP_RetrieveRequestedAttrs(ITextStoreACP *iface,
static HRESULT WINAPI TextStoreACP_GetEndACP(ITextStoreACP *iface,
LONG *pacp)
{
ok(test_ACP_GetEndACP == SINK_EXPECTED,"Unexpected TextStoreACP_GetEndACP\n");
test_ACP_GetEndACP = SINK_FIRED;
sink_fire_ok(&test_ACP_GetEndACP,"TextStoreACP_GetEndACP");
return S_OK;
}
static HRESULT WINAPI TextStoreACP_GetActiveView(ITextStoreACP *iface,
@ -419,8 +456,7 @@ static ULONG WINAPI ThreadMgrEventSink_Release(ITfThreadMgrEventSink *iface)
static HRESULT WINAPI ThreadMgrEventSink_OnInitDocumentMgr(ITfThreadMgrEventSink *iface,
ITfDocumentMgr *pdim)
{
ok(test_OnInitDocumentMgr == SINK_EXPECTED, "Unexpected OnInitDocumentMgr sink\n");
test_OnInitDocumentMgr = SINK_FIRED;
sink_fire_ok(&test_OnInitDocumentMgr,"ThreadMgrEventSink_OnInitDocumentMgr");
return S_OK;
}
@ -434,10 +470,9 @@ ITfDocumentMgr *pdim)
static HRESULT WINAPI ThreadMgrEventSink_OnSetFocus(ITfThreadMgrEventSink *iface,
ITfDocumentMgr *pdimFocus, ITfDocumentMgr *pdimPrevFocus)
{
ok(test_OnSetFocus == SINK_EXPECTED, "Unexpected OnSetFocus sink\n");
sink_fire_ok(&test_OnSetFocus,"ThreadMgrEventSink_OnSetFocus");
ok(pdimFocus == test_CurrentFocus,"Sink reports wrong focus\n");
ok(pdimPrevFocus == test_PrevFocus,"Sink reports wrong previous focus\n");
test_OnSetFocus = SINK_FIRED;
return S_OK;
}
@ -458,8 +493,7 @@ ITfContext *pic)
if (test)
ITfContext_Release(test);
ok(test_OnPushContext == SINK_EXPECTED, "Unexpected OnPushContext sink\n");
test_OnPushContext = SINK_FIRED;
sink_fire_ok(&test_OnPushContext,"ThreadMgrEventSink_OnPushContext");
return S_OK;
}
@ -480,8 +514,7 @@ ITfContext *pic)
if (test)
ITfContext_Release(test);
ok(test_OnPopContext == SINK_EXPECTED, "Unexpected OnPopContext sink\n");
test_OnPopContext = SINK_FIRED;
sink_fire_ok(&test_OnPopContext,"ThreadMgrEventSink_OnPopContext");
return S_OK;
}
@ -984,8 +1017,7 @@ static ULONG WINAPI KeyEventSink_Release(ITfKeyEventSink *iface)
static HRESULT WINAPI KeyEventSink_OnSetFocus(ITfKeyEventSink *iface,
BOOL fForeground)
{
ok(test_KEV_OnSetFocus == SINK_EXPECTED,"Unexpected KeyEventSink_OnSetFocus\n");
test_KEV_OnSetFocus = SINK_FIRED;
sink_fire_ok(&test_KEV_OnSetFocus,"KeyEventSink_OnSetFocus");
return S_OK;
}
@ -1240,8 +1272,7 @@ static ULONG WINAPI TextEditSink_Release(ITfTextEditSink *iface)
static HRESULT WINAPI TextEditSink_OnEndEdit(ITfTextEditSink *iface,
ITfContext *pic, TfEditCookie ecReadOnly, ITfEditRecord *pEditRecord)
{
ok(test_OnEndEdit == SINK_EXPECTED, "Unexpected OnEndEdit\n");
test_OnEndEdit = SINK_FIRED;
sink_fire_ok(&test_OnEndEdit,"TextEditSink_OnEndEdit");
return S_OK;
}
@ -1617,9 +1648,8 @@ TfEditCookie ec)
ULONG fetched;
HRESULT hr;
ok(test_DoEditSession == SINK_EXPECTED, "Unexpected DoEditSession\n");
sink_fire_ok(&test_DoEditSession,"EditSession_DoEditSession");
ok(test_ACP_RequestLock == SINK_FIRED,"Expected RequestLock not fired\n");
test_DoEditSession = SINK_FIRED;
ITfThreadMgr_GetFocus(g_tm, &dm);
ITfDocumentMgr_GetTop(dm,&cxt);