[1/2] msctf/tests: Reorder the code to avoid forward declarations.
Francois Gouget
fgouget at free.fr
Wed May 13 03:30:18 CDT 2009
---
All that's needed is to move the interfaces before the code testing
them.
dlls/msctf/tests/inputprocessor.c | 1188 ++++++++++++++++++------------------
1 files changed, 594 insertions(+), 594 deletions(-)
diff --git a/dlls/msctf/tests/inputprocessor.c b/dlls/msctf/tests/inputprocessor.c
index ac993cc..2b53bcc 100644
--- a/dlls/msctf/tests/inputprocessor.c
+++ b/dlls/msctf/tests/inputprocessor.c
@@ -55,10 +55,600 @@ static INT test_OnPushContext = SINK_UNEXPECTED;
static INT test_OnPopContext = SINK_UNEXPECTED;
static INT test_KEV_OnSetFocus = SINK_UNEXPECTED;
-HRESULT RegisterTextService(REFCLSID rclsid);
-HRESULT UnregisterTextService();
-HRESULT ThreadMgrEventSink_Constructor(IUnknown **ppOut);
-HRESULT TextStoreACP_Constructor(IUnknown **ppOut);
+
+/**********************************************************************
+ * ITextStoreACP
+ **********************************************************************/
+typedef struct tagTextStoreACP
+{
+ const ITextStoreACPVtbl *TextStoreACPVtbl;
+ LONG refCount;
+} TextStoreACP;
+
+static void TextStoreACP_Destructor(TextStoreACP *This)
+{
+ HeapFree(GetProcessHeap(),0,This);
+}
+
+static HRESULT WINAPI TextStoreACP_QueryInterface(ITextStoreACP *iface, REFIID iid, LPVOID *ppvOut)
+{
+ TextStoreACP *This = (TextStoreACP *)iface;
+ *ppvOut = NULL;
+
+ if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITextStoreACP))
+ {
+ *ppvOut = This;
+ }
+
+ if (*ppvOut)
+ {
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI TextStoreACP_AddRef(ITextStoreACP *iface)
+{
+ TextStoreACP *This = (TextStoreACP *)iface;
+ return InterlockedIncrement(&This->refCount);
+}
+
+static ULONG WINAPI TextStoreACP_Release(ITextStoreACP *iface)
+{
+ TextStoreACP *This = (TextStoreACP *)iface;
+ ULONG ret;
+
+ ret = InterlockedDecrement(&This->refCount);
+ if (ret == 0)
+ TextStoreACP_Destructor(This);
+ return ret;
+}
+
+static HRESULT WINAPI TextStoreACP_AdviseSink(ITextStoreACP *iface,
+ REFIID riid, IUnknown *punk, DWORD dwMask)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI TextStoreACP_UnadviseSink(ITextStoreACP *iface,
+ IUnknown *punk)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_RequestLock(ITextStoreACP *iface,
+ DWORD dwLockFlags, HRESULT *phrSession)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetStatus(ITextStoreACP *iface,
+ TS_STATUS *pdcs)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_QueryInsert(ITextStoreACP *iface,
+ LONG acpTestStart, LONG acpTestEnd, ULONG cch, LONG *pacpResultStart,
+ LONG *pacpResultEnd)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetSelection(ITextStoreACP *iface,
+ ULONG ulIndex, ULONG ulCount, TS_SELECTION_ACP *pSelection, ULONG *pcFetched)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_SetSelection(ITextStoreACP *iface,
+ ULONG ulCount, const TS_SELECTION_ACP *pSelection)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetText(ITextStoreACP *iface,
+ LONG acpStart, LONG acpEnd, WCHAR *pchPlain, ULONG cchPlainReq,
+ ULONG *pcchPlainRet, TS_RUNINFO *prgRunInfo, ULONG cRunInfoReq,
+ ULONG *pcRunInfoRet, LONG *pacpNext)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_SetText(ITextStoreACP *iface,
+ DWORD dwFlags, LONG acpStart, LONG acpEnd, const WCHAR *pchText,
+ ULONG cch, TS_TEXTCHANGE *pChange)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetFormattedText(ITextStoreACP *iface,
+ LONG acpStart, LONG acpEnd, IDataObject **ppDataObject)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetEmbedded(ITextStoreACP *iface,
+ LONG acpPos, REFGUID rguidService, REFIID riid, IUnknown **ppunk)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_QueryInsertEmbedded(ITextStoreACP *iface,
+ const GUID *pguidService, const FORMATETC *pFormatEtc, BOOL *pfInsertable)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_InsertEmbedded(ITextStoreACP *iface,
+ DWORD dwFlags, LONG acpStart, LONG acpEnd, IDataObject *pDataObject,
+ TS_TEXTCHANGE *pChange)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_InsertTextAtSelection(ITextStoreACP *iface,
+ DWORD dwFlags, const WCHAR *pchText, ULONG cch, LONG *pacpStart,
+ LONG *pacpEnd, TS_TEXTCHANGE *pChange)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_InsertEmbeddedAtSelection(ITextStoreACP *iface,
+ DWORD dwFlags, IDataObject *pDataObject, LONG *pacpStart, LONG *pacpEnd,
+ TS_TEXTCHANGE *pChange)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_RequestSupportedAttrs(ITextStoreACP *iface,
+ DWORD dwFlags, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_RequestAttrsAtPosition(ITextStoreACP *iface,
+ LONG acpPos, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs,
+ DWORD dwFlags)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_RequestAttrsTransitioningAtPosition(ITextStoreACP *iface,
+ LONG acpPos, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs,
+ DWORD dwFlags)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_FindNextAttrTransition(ITextStoreACP *iface,
+ LONG acpStart, LONG acpHalt, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs,
+ DWORD dwFlags, LONG *pacpNext, BOOL *pfFound, LONG *plFoundOffset)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_RetrieveRequestedAttrs(ITextStoreACP *iface,
+ ULONG ulCount, TS_ATTRVAL *paAttrVals, ULONG *pcFetched)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetEndACP(ITextStoreACP *iface,
+ LONG *pacp)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetActiveView(ITextStoreACP *iface,
+ TsViewCookie *pvcView)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetACPFromPoint(ITextStoreACP *iface,
+ TsViewCookie vcView, const POINT *ptScreen, DWORD dwFlags,
+ LONG *pacp)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetTextExt(ITextStoreACP *iface,
+ TsViewCookie vcView, LONG acpStart, LONG acpEnd, RECT *prc,
+ BOOL *pfClipped)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetScreenExt(ITextStoreACP *iface,
+ TsViewCookie vcView, RECT *prc)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetWnd(ITextStoreACP *iface,
+ TsViewCookie vcView, HWND *phwnd)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static const ITextStoreACPVtbl TextStoreACP_TextStoreACPVtbl =
+{
+ TextStoreACP_QueryInterface,
+ TextStoreACP_AddRef,
+ TextStoreACP_Release,
+
+ TextStoreACP_AdviseSink,
+ TextStoreACP_UnadviseSink,
+ TextStoreACP_RequestLock,
+ TextStoreACP_GetStatus,
+ TextStoreACP_QueryInsert,
+ TextStoreACP_GetSelection,
+ TextStoreACP_SetSelection,
+ TextStoreACP_GetText,
+ TextStoreACP_SetText,
+ TextStoreACP_GetFormattedText,
+ TextStoreACP_GetEmbedded,
+ TextStoreACP_QueryInsertEmbedded,
+ TextStoreACP_InsertEmbedded,
+ TextStoreACP_InsertTextAtSelection,
+ TextStoreACP_InsertEmbeddedAtSelection,
+ TextStoreACP_RequestSupportedAttrs,
+ TextStoreACP_RequestAttrsAtPosition,
+ TextStoreACP_RequestAttrsTransitioningAtPosition,
+ TextStoreACP_FindNextAttrTransition,
+ TextStoreACP_RetrieveRequestedAttrs,
+ TextStoreACP_GetEndACP,
+ TextStoreACP_GetActiveView,
+ TextStoreACP_GetACPFromPoint,
+ TextStoreACP_GetTextExt,
+ TextStoreACP_GetScreenExt,
+ TextStoreACP_GetWnd
+};
+
+HRESULT TextStoreACP_Constructor(IUnknown **ppOut)
+{
+ TextStoreACP *This;
+
+ This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TextStoreACP));
+ if (This == NULL)
+ return E_OUTOFMEMORY;
+
+ This->TextStoreACPVtbl = &TextStoreACP_TextStoreACPVtbl;
+ This->refCount = 1;
+
+ *ppOut = (IUnknown *)This;
+ return S_OK;
+}
+
+/**********************************************************************
+ * ITfThreadMgrEventSink
+ **********************************************************************/
+typedef struct tagThreadMgrEventSink
+{
+ const ITfThreadMgrEventSinkVtbl *ThreadMgrEventSinkVtbl;
+ LONG refCount;
+} ThreadMgrEventSink;
+
+static void ThreadMgrEventSink_Destructor(ThreadMgrEventSink *This)
+{
+ HeapFree(GetProcessHeap(),0,This);
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_QueryInterface(ITfThreadMgrEventSink *iface, REFIID iid, LPVOID *ppvOut)
+{
+ ThreadMgrEventSink *This = (ThreadMgrEventSink *)iface;
+ *ppvOut = NULL;
+
+ if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfThreadMgrEventSink))
+ {
+ *ppvOut = This;
+ }
+
+ if (*ppvOut)
+ {
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ThreadMgrEventSink_AddRef(ITfThreadMgrEventSink *iface)
+{
+ ThreadMgrEventSink *This = (ThreadMgrEventSink *)iface;
+ ok (tmSinkRefCount == This->refCount,"ThreadMgrEventSink refcount off %i vs %i\n",This->refCount,tmSinkRefCount);
+ return InterlockedIncrement(&This->refCount);
+}
+
+static ULONG WINAPI ThreadMgrEventSink_Release(ITfThreadMgrEventSink *iface)
+{
+ ThreadMgrEventSink *This = (ThreadMgrEventSink *)iface;
+ ULONG ret;
+
+ ok (tmSinkRefCount == This->refCount,"ThreadMgrEventSink refcount off %i vs %i\n",This->refCount,tmSinkRefCount);
+ ret = InterlockedDecrement(&This->refCount);
+ if (ret == 0)
+ ThreadMgrEventSink_Destructor(This);
+ return ret;
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_OnInitDocumentMgr(ITfThreadMgrEventSink *iface,
+ITfDocumentMgr *pdim)
+{
+ ok(test_OnInitDocumentMgr == SINK_EXPECTED, "Unexpected OnInitDocumentMgr sink\n");
+ test_OnInitDocumentMgr = SINK_FIRED;
+ return S_OK;
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_OnUninitDocumentMgr(ITfThreadMgrEventSink *iface,
+ITfDocumentMgr *pdim)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_OnSetFocus(ITfThreadMgrEventSink *iface,
+ITfDocumentMgr *pdimFocus, ITfDocumentMgr *pdimPrevFocus)
+{
+ ok(test_OnSetFocus == SINK_EXPECTED, "Unexpected OnSetFocus sink\n");
+ 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;
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_OnPushContext(ITfThreadMgrEventSink *iface,
+ITfContext *pic)
+{
+ ok(test_OnPushContext == SINK_EXPECTED, "Unexpected OnPushContext sink\n");
+ test_OnPushContext = SINK_FIRED;
+ return S_OK;
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_OnPopContext(ITfThreadMgrEventSink *iface,
+ITfContext *pic)
+{
+ ok(test_OnPopContext == SINK_EXPECTED, "Unexpected OnPopContext sink\n");
+ test_OnPopContext = SINK_FIRED;
+ return S_OK;
+}
+
+static const ITfThreadMgrEventSinkVtbl ThreadMgrEventSink_ThreadMgrEventSinkVtbl =
+{
+ ThreadMgrEventSink_QueryInterface,
+ ThreadMgrEventSink_AddRef,
+ ThreadMgrEventSink_Release,
+
+ ThreadMgrEventSink_OnInitDocumentMgr,
+ ThreadMgrEventSink_OnUninitDocumentMgr,
+ ThreadMgrEventSink_OnSetFocus,
+ ThreadMgrEventSink_OnPushContext,
+ ThreadMgrEventSink_OnPopContext
+};
+
+HRESULT ThreadMgrEventSink_Constructor(IUnknown **ppOut)
+{
+ ThreadMgrEventSink *This;
+
+ This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(ThreadMgrEventSink));
+ if (This == NULL)
+ return E_OUTOFMEMORY;
+
+ This->ThreadMgrEventSinkVtbl = &ThreadMgrEventSink_ThreadMgrEventSinkVtbl;
+ This->refCount = 1;
+
+ *ppOut = (IUnknown *)This;
+ return S_OK;
+}
+
+
+/********************************************************************************************
+ * Stub text service for testing
+ ********************************************************************************************/
+
+static LONG TS_refCount;
+static IClassFactory *cf;
+static DWORD regid;
+
+typedef HRESULT (*LPFNCONSTRUCTOR)(IUnknown *pUnkOuter, IUnknown **ppvOut);
+
+typedef struct tagClassFactory
+{
+ const IClassFactoryVtbl *vtbl;
+ LONG ref;
+ LPFNCONSTRUCTOR ctor;
+} ClassFactory;
+
+typedef struct tagTextService
+{
+ const ITfTextInputProcessorVtbl *TextInputProcessorVtbl;
+ LONG refCount;
+} TextService;
+
+static void ClassFactory_Destructor(ClassFactory *This)
+{
+ HeapFree(GetProcessHeap(),0,This);
+ TS_refCount--;
+}
+
+static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppvOut)
+{
+ *ppvOut = NULL;
+ if (IsEqualIID(riid, &IID_IClassFactory) || IsEqualIID(riid, &IID_IUnknown))
+ {
+ IClassFactory_AddRef(iface);
+ *ppvOut = iface;
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
+{
+ ClassFactory *This = (ClassFactory *)iface;
+ return InterlockedIncrement(&This->ref);
+}
+
+static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
+{
+ ClassFactory *This = (ClassFactory *)iface;
+ ULONG ret = InterlockedDecrement(&This->ref);
+
+ if (ret == 0)
+ ClassFactory_Destructor(This);
+ return ret;
+}
+
+static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *punkOuter, REFIID iid, LPVOID *ppvOut)
+{
+ ClassFactory *This = (ClassFactory *)iface;
+ HRESULT ret;
+ IUnknown *obj;
+
+ ret = This->ctor(punkOuter, &obj);
+ if (FAILED(ret))
+ return ret;
+ ret = IUnknown_QueryInterface(obj, iid, ppvOut);
+ IUnknown_Release(obj);
+ return ret;
+}
+
+static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
+{
+ if(fLock)
+ InterlockedIncrement(&TS_refCount);
+ else
+ InterlockedDecrement(&TS_refCount);
+
+ return S_OK;
+}
+
+static const IClassFactoryVtbl ClassFactoryVtbl = {
+ /* IUnknown */
+ ClassFactory_QueryInterface,
+ ClassFactory_AddRef,
+ ClassFactory_Release,
+
+ /* IClassFactory*/
+ ClassFactory_CreateInstance,
+ ClassFactory_LockServer
+};
+
+static HRESULT ClassFactory_Constructor(LPFNCONSTRUCTOR ctor, LPVOID *ppvOut)
+{
+ ClassFactory *This = HeapAlloc(GetProcessHeap(),0,sizeof(ClassFactory));
+ This->vtbl = &ClassFactoryVtbl;
+ This->ref = 1;
+ This->ctor = ctor;
+ *ppvOut = (LPVOID)This;
+ TS_refCount++;
+ return S_OK;
+}
+
+static void TextService_Destructor(TextService *This)
+{
+ HeapFree(GetProcessHeap(),0,This);
+}
+
+static HRESULT WINAPI TextService_QueryInterface(ITfTextInputProcessor *iface, REFIID iid, LPVOID *ppvOut)
+{
+ TextService *This = (TextService *)iface;
+ *ppvOut = NULL;
+
+ if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfTextInputProcessor))
+ {
+ *ppvOut = This;
+ }
+
+ if (*ppvOut)
+ {
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI TextService_AddRef(ITfTextInputProcessor *iface)
+{
+ TextService *This = (TextService *)iface;
+ return InterlockedIncrement(&This->refCount);
+}
+
+static ULONG WINAPI TextService_Release(ITfTextInputProcessor *iface)
+{
+ TextService *This = (TextService *)iface;
+ ULONG ret;
+
+ ret = InterlockedDecrement(&This->refCount);
+ if (ret == 0)
+ TextService_Destructor(This);
+ return ret;
+}
+
+static HRESULT WINAPI TextService_Activate(ITfTextInputProcessor *iface,
+ ITfThreadMgr *ptim, TfClientId id)
+{
+ trace("TextService_Activate\n");
+ ok(test_ShouldActivate,"Activation came unexpectedly\n");
+ tid = id;
+ return S_OK;
+}
+
+static HRESULT WINAPI TextService_Deactivate(ITfTextInputProcessor *iface)
+{
+ trace("TextService_Deactivate\n");
+ ok(test_ShouldDeactivate,"Deactivation came unexpectedly\n");
+ return S_OK;
+}
+
+static const ITfTextInputProcessorVtbl TextService_TextInputProcessorVtbl=
+{
+ TextService_QueryInterface,
+ TextService_AddRef,
+ TextService_Release,
+
+ TextService_Activate,
+ TextService_Deactivate
+};
+
+HRESULT TextService_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
+{
+ TextService *This;
+ if (pUnkOuter)
+ return CLASS_E_NOAGGREGATION;
+
+ This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TextService));
+ if (This == NULL)
+ return E_OUTOFMEMORY;
+
+ This->TextInputProcessorVtbl= &TextService_TextInputProcessorVtbl;
+ This->refCount = 1;
+
+ *ppOut = (IUnknown *)This;
+ return S_OK;
+}
+
+HRESULT RegisterTextService(REFCLSID rclsid)
+{
+ ClassFactory_Constructor( TextService_Constructor ,(LPVOID*)&cf);
+ return CoRegisterClassObject(rclsid, (IUnknown*) cf, CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, ®id);
+}
+
+HRESULT UnregisterTextService()
+{
+ return CoRevokeClassObject(regid);
+}
+
+/*
+ * The tests
+ */
DEFINE_GUID(CLSID_FakeService, 0xEDE1A7AD,0x66DE,0x47E0,0xB6,0x20,0x3E,0x92,0xF8,0x24,0x6B,0xF3);
DEFINE_GUID(CLSID_TF_InputProcessorProfiles, 0x33c53a50,0xf456,0x4884,0xb0,0x49,0x85,0xfd,0x64,0x3e,0xcf,0xed);
@@ -723,593 +1313,3 @@ START_TEST(inputprocessor)
skip("Unable to create InputProcessor\n");
cleanup();
}
-
-/**********************************************************************
- * ITextStoreACP
- **********************************************************************/
-typedef struct tagTextStoreACP
-{
- const ITextStoreACPVtbl *TextStoreACPVtbl;
- LONG refCount;
-} TextStoreACP;
-
-static void TextStoreACP_Destructor(TextStoreACP *This)
-{
- HeapFree(GetProcessHeap(),0,This);
-}
-
-static HRESULT WINAPI TextStoreACP_QueryInterface(ITextStoreACP *iface, REFIID iid, LPVOID *ppvOut)
-{
- TextStoreACP *This = (TextStoreACP *)iface;
- *ppvOut = NULL;
-
- if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITextStoreACP))
- {
- *ppvOut = This;
- }
-
- if (*ppvOut)
- {
- IUnknown_AddRef(iface);
- return S_OK;
- }
-
- return E_NOINTERFACE;
-}
-
-static ULONG WINAPI TextStoreACP_AddRef(ITextStoreACP *iface)
-{
- TextStoreACP *This = (TextStoreACP *)iface;
- return InterlockedIncrement(&This->refCount);
-}
-
-static ULONG WINAPI TextStoreACP_Release(ITextStoreACP *iface)
-{
- TextStoreACP *This = (TextStoreACP *)iface;
- ULONG ret;
-
- ret = InterlockedDecrement(&This->refCount);
- if (ret == 0)
- TextStoreACP_Destructor(This);
- return ret;
-}
-
-static HRESULT WINAPI TextStoreACP_AdviseSink(ITextStoreACP *iface,
- REFIID riid, IUnknown *punk, DWORD dwMask)
-{
- trace("\n");
- return S_OK;
-}
-
-static HRESULT WINAPI TextStoreACP_UnadviseSink(ITextStoreACP *iface,
- IUnknown *punk)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_RequestLock(ITextStoreACP *iface,
- DWORD dwLockFlags, HRESULT *phrSession)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetStatus(ITextStoreACP *iface,
- TS_STATUS *pdcs)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_QueryInsert(ITextStoreACP *iface,
- LONG acpTestStart, LONG acpTestEnd, ULONG cch, LONG *pacpResultStart,
- LONG *pacpResultEnd)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetSelection(ITextStoreACP *iface,
- ULONG ulIndex, ULONG ulCount, TS_SELECTION_ACP *pSelection, ULONG *pcFetched)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_SetSelection(ITextStoreACP *iface,
- ULONG ulCount, const TS_SELECTION_ACP *pSelection)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetText(ITextStoreACP *iface,
- LONG acpStart, LONG acpEnd, WCHAR *pchPlain, ULONG cchPlainReq,
- ULONG *pcchPlainRet, TS_RUNINFO *prgRunInfo, ULONG cRunInfoReq,
- ULONG *pcRunInfoRet, LONG *pacpNext)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_SetText(ITextStoreACP *iface,
- DWORD dwFlags, LONG acpStart, LONG acpEnd, const WCHAR *pchText,
- ULONG cch, TS_TEXTCHANGE *pChange)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetFormattedText(ITextStoreACP *iface,
- LONG acpStart, LONG acpEnd, IDataObject **ppDataObject)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetEmbedded(ITextStoreACP *iface,
- LONG acpPos, REFGUID rguidService, REFIID riid, IUnknown **ppunk)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_QueryInsertEmbedded(ITextStoreACP *iface,
- const GUID *pguidService, const FORMATETC *pFormatEtc, BOOL *pfInsertable)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_InsertEmbedded(ITextStoreACP *iface,
- DWORD dwFlags, LONG acpStart, LONG acpEnd, IDataObject *pDataObject,
- TS_TEXTCHANGE *pChange)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_InsertTextAtSelection(ITextStoreACP *iface,
- DWORD dwFlags, const WCHAR *pchText, ULONG cch, LONG *pacpStart,
- LONG *pacpEnd, TS_TEXTCHANGE *pChange)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_InsertEmbeddedAtSelection(ITextStoreACP *iface,
- DWORD dwFlags, IDataObject *pDataObject, LONG *pacpStart, LONG *pacpEnd,
- TS_TEXTCHANGE *pChange)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_RequestSupportedAttrs(ITextStoreACP *iface,
- DWORD dwFlags, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_RequestAttrsAtPosition(ITextStoreACP *iface,
- LONG acpPos, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs,
- DWORD dwFlags)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_RequestAttrsTransitioningAtPosition(ITextStoreACP *iface,
- LONG acpPos, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs,
- DWORD dwFlags)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_FindNextAttrTransition(ITextStoreACP *iface,
- LONG acpStart, LONG acpHalt, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs,
- DWORD dwFlags, LONG *pacpNext, BOOL *pfFound, LONG *plFoundOffset)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_RetrieveRequestedAttrs(ITextStoreACP *iface,
- ULONG ulCount, TS_ATTRVAL *paAttrVals, ULONG *pcFetched)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetEndACP(ITextStoreACP *iface,
- LONG *pacp)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetActiveView(ITextStoreACP *iface,
- TsViewCookie *pvcView)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetACPFromPoint(ITextStoreACP *iface,
- TsViewCookie vcView, const POINT *ptScreen, DWORD dwFlags,
- LONG *pacp)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetTextExt(ITextStoreACP *iface,
- TsViewCookie vcView, LONG acpStart, LONG acpEnd, RECT *prc,
- BOOL *pfClipped)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetScreenExt(ITextStoreACP *iface,
- TsViewCookie vcView, RECT *prc)
-{
- trace("\n");
- return S_OK;
-}
-static HRESULT WINAPI TextStoreACP_GetWnd(ITextStoreACP *iface,
- TsViewCookie vcView, HWND *phwnd)
-{
- trace("\n");
- return S_OK;
-}
-
-static const ITextStoreACPVtbl TextStoreACP_TextStoreACPVtbl =
-{
- TextStoreACP_QueryInterface,
- TextStoreACP_AddRef,
- TextStoreACP_Release,
-
- TextStoreACP_AdviseSink,
- TextStoreACP_UnadviseSink,
- TextStoreACP_RequestLock,
- TextStoreACP_GetStatus,
- TextStoreACP_QueryInsert,
- TextStoreACP_GetSelection,
- TextStoreACP_SetSelection,
- TextStoreACP_GetText,
- TextStoreACP_SetText,
- TextStoreACP_GetFormattedText,
- TextStoreACP_GetEmbedded,
- TextStoreACP_QueryInsertEmbedded,
- TextStoreACP_InsertEmbedded,
- TextStoreACP_InsertTextAtSelection,
- TextStoreACP_InsertEmbeddedAtSelection,
- TextStoreACP_RequestSupportedAttrs,
- TextStoreACP_RequestAttrsAtPosition,
- TextStoreACP_RequestAttrsTransitioningAtPosition,
- TextStoreACP_FindNextAttrTransition,
- TextStoreACP_RetrieveRequestedAttrs,
- TextStoreACP_GetEndACP,
- TextStoreACP_GetActiveView,
- TextStoreACP_GetACPFromPoint,
- TextStoreACP_GetTextExt,
- TextStoreACP_GetScreenExt,
- TextStoreACP_GetWnd
-};
-
-HRESULT TextStoreACP_Constructor(IUnknown **ppOut)
-{
- TextStoreACP *This;
-
- This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TextStoreACP));
- if (This == NULL)
- return E_OUTOFMEMORY;
-
- This->TextStoreACPVtbl = &TextStoreACP_TextStoreACPVtbl;
- This->refCount = 1;
-
- *ppOut = (IUnknown *)This;
- return S_OK;
-}
-
-/**********************************************************************
- * ITfThreadMgrEventSink
- **********************************************************************/
-typedef struct tagThreadMgrEventSink
-{
- const ITfThreadMgrEventSinkVtbl *ThreadMgrEventSinkVtbl;
- LONG refCount;
-} ThreadMgrEventSink;
-
-static void ThreadMgrEventSink_Destructor(ThreadMgrEventSink *This)
-{
- HeapFree(GetProcessHeap(),0,This);
-}
-
-static HRESULT WINAPI ThreadMgrEventSink_QueryInterface(ITfThreadMgrEventSink *iface, REFIID iid, LPVOID *ppvOut)
-{
- ThreadMgrEventSink *This = (ThreadMgrEventSink *)iface;
- *ppvOut = NULL;
-
- if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfThreadMgrEventSink))
- {
- *ppvOut = This;
- }
-
- if (*ppvOut)
- {
- IUnknown_AddRef(iface);
- return S_OK;
- }
-
- return E_NOINTERFACE;
-}
-
-static ULONG WINAPI ThreadMgrEventSink_AddRef(ITfThreadMgrEventSink *iface)
-{
- ThreadMgrEventSink *This = (ThreadMgrEventSink *)iface;
- ok (tmSinkRefCount == This->refCount,"ThreadMgrEventSink refcount off %i vs %i\n",This->refCount,tmSinkRefCount);
- return InterlockedIncrement(&This->refCount);
-}
-
-static ULONG WINAPI ThreadMgrEventSink_Release(ITfThreadMgrEventSink *iface)
-{
- ThreadMgrEventSink *This = (ThreadMgrEventSink *)iface;
- ULONG ret;
-
- ok (tmSinkRefCount == This->refCount,"ThreadMgrEventSink refcount off %i vs %i\n",This->refCount,tmSinkRefCount);
- ret = InterlockedDecrement(&This->refCount);
- if (ret == 0)
- ThreadMgrEventSink_Destructor(This);
- return ret;
-}
-
-static HRESULT WINAPI ThreadMgrEventSink_OnInitDocumentMgr(ITfThreadMgrEventSink *iface,
-ITfDocumentMgr *pdim)
-{
- ok(test_OnInitDocumentMgr == SINK_EXPECTED, "Unexpected OnInitDocumentMgr sink\n");
- test_OnInitDocumentMgr = SINK_FIRED;
- return S_OK;
-}
-
-static HRESULT WINAPI ThreadMgrEventSink_OnUninitDocumentMgr(ITfThreadMgrEventSink *iface,
-ITfDocumentMgr *pdim)
-{
- trace("\n");
- return S_OK;
-}
-
-static HRESULT WINAPI ThreadMgrEventSink_OnSetFocus(ITfThreadMgrEventSink *iface,
-ITfDocumentMgr *pdimFocus, ITfDocumentMgr *pdimPrevFocus)
-{
- ok(test_OnSetFocus == SINK_EXPECTED, "Unexpected OnSetFocus sink\n");
- 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;
-}
-
-static HRESULT WINAPI ThreadMgrEventSink_OnPushContext(ITfThreadMgrEventSink *iface,
-ITfContext *pic)
-{
- ok(test_OnPushContext == SINK_EXPECTED, "Unexpected OnPushContext sink\n");
- test_OnPushContext = SINK_FIRED;
- return S_OK;
-}
-
-static HRESULT WINAPI ThreadMgrEventSink_OnPopContext(ITfThreadMgrEventSink *iface,
-ITfContext *pic)
-{
- ok(test_OnPopContext == SINK_EXPECTED, "Unexpected OnPopContext sink\n");
- test_OnPopContext = SINK_FIRED;
- return S_OK;
-}
-
-static const ITfThreadMgrEventSinkVtbl ThreadMgrEventSink_ThreadMgrEventSinkVtbl =
-{
- ThreadMgrEventSink_QueryInterface,
- ThreadMgrEventSink_AddRef,
- ThreadMgrEventSink_Release,
-
- ThreadMgrEventSink_OnInitDocumentMgr,
- ThreadMgrEventSink_OnUninitDocumentMgr,
- ThreadMgrEventSink_OnSetFocus,
- ThreadMgrEventSink_OnPushContext,
- ThreadMgrEventSink_OnPopContext
-};
-
-HRESULT ThreadMgrEventSink_Constructor(IUnknown **ppOut)
-{
- ThreadMgrEventSink *This;
-
- This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(ThreadMgrEventSink));
- if (This == NULL)
- return E_OUTOFMEMORY;
-
- This->ThreadMgrEventSinkVtbl = &ThreadMgrEventSink_ThreadMgrEventSinkVtbl;
- This->refCount = 1;
-
- *ppOut = (IUnknown *)This;
- return S_OK;
-}
-
-
-/********************************************************************************************
- * Stub text service for testing
- ********************************************************************************************/
-
-static LONG TS_refCount;
-static IClassFactory *cf;
-static DWORD regid;
-
-typedef HRESULT (*LPFNCONSTRUCTOR)(IUnknown *pUnkOuter, IUnknown **ppvOut);
-
-typedef struct tagClassFactory
-{
- const IClassFactoryVtbl *vtbl;
- LONG ref;
- LPFNCONSTRUCTOR ctor;
-} ClassFactory;
-
-typedef struct tagTextService
-{
- const ITfTextInputProcessorVtbl *TextInputProcessorVtbl;
- LONG refCount;
-} TextService;
-
-static void ClassFactory_Destructor(ClassFactory *This)
-{
- HeapFree(GetProcessHeap(),0,This);
- TS_refCount--;
-}
-
-static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppvOut)
-{
- *ppvOut = NULL;
- if (IsEqualIID(riid, &IID_IClassFactory) || IsEqualIID(riid, &IID_IUnknown))
- {
- IClassFactory_AddRef(iface);
- *ppvOut = iface;
- return S_OK;
- }
-
- return E_NOINTERFACE;
-}
-
-static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
-{
- ClassFactory *This = (ClassFactory *)iface;
- return InterlockedIncrement(&This->ref);
-}
-
-static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
-{
- ClassFactory *This = (ClassFactory *)iface;
- ULONG ret = InterlockedDecrement(&This->ref);
-
- if (ret == 0)
- ClassFactory_Destructor(This);
- return ret;
-}
-
-static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *punkOuter, REFIID iid, LPVOID *ppvOut)
-{
- ClassFactory *This = (ClassFactory *)iface;
- HRESULT ret;
- IUnknown *obj;
-
- ret = This->ctor(punkOuter, &obj);
- if (FAILED(ret))
- return ret;
- ret = IUnknown_QueryInterface(obj, iid, ppvOut);
- IUnknown_Release(obj);
- return ret;
-}
-
-static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
-{
- if(fLock)
- InterlockedIncrement(&TS_refCount);
- else
- InterlockedDecrement(&TS_refCount);
-
- return S_OK;
-}
-
-static const IClassFactoryVtbl ClassFactoryVtbl = {
- /* IUnknown */
- ClassFactory_QueryInterface,
- ClassFactory_AddRef,
- ClassFactory_Release,
-
- /* IClassFactory*/
- ClassFactory_CreateInstance,
- ClassFactory_LockServer
-};
-
-static HRESULT ClassFactory_Constructor(LPFNCONSTRUCTOR ctor, LPVOID *ppvOut)
-{
- ClassFactory *This = HeapAlloc(GetProcessHeap(),0,sizeof(ClassFactory));
- This->vtbl = &ClassFactoryVtbl;
- This->ref = 1;
- This->ctor = ctor;
- *ppvOut = (LPVOID)This;
- TS_refCount++;
- return S_OK;
-}
-
-static void TextService_Destructor(TextService *This)
-{
- HeapFree(GetProcessHeap(),0,This);
-}
-
-static HRESULT WINAPI TextService_QueryInterface(ITfTextInputProcessor *iface, REFIID iid, LPVOID *ppvOut)
-{
- TextService *This = (TextService *)iface;
- *ppvOut = NULL;
-
- if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfTextInputProcessor))
- {
- *ppvOut = This;
- }
-
- if (*ppvOut)
- {
- IUnknown_AddRef(iface);
- return S_OK;
- }
-
- return E_NOINTERFACE;
-}
-
-static ULONG WINAPI TextService_AddRef(ITfTextInputProcessor *iface)
-{
- TextService *This = (TextService *)iface;
- return InterlockedIncrement(&This->refCount);
-}
-
-static ULONG WINAPI TextService_Release(ITfTextInputProcessor *iface)
-{
- TextService *This = (TextService *)iface;
- ULONG ret;
-
- ret = InterlockedDecrement(&This->refCount);
- if (ret == 0)
- TextService_Destructor(This);
- return ret;
-}
-
-static HRESULT WINAPI TextService_Activate(ITfTextInputProcessor *iface,
- ITfThreadMgr *ptim, TfClientId id)
-{
- trace("TextService_Activate\n");
- ok(test_ShouldActivate,"Activation came unexpectedly\n");
- tid = id;
- return S_OK;
-}
-
-static HRESULT WINAPI TextService_Deactivate(ITfTextInputProcessor *iface)
-{
- trace("TextService_Deactivate\n");
- ok(test_ShouldDeactivate,"Deactivation came unexpectedly\n");
- return S_OK;
-}
-
-static const ITfTextInputProcessorVtbl TextService_TextInputProcessorVtbl=
-{
- TextService_QueryInterface,
- TextService_AddRef,
- TextService_Release,
-
- TextService_Activate,
- TextService_Deactivate
-};
-
-HRESULT TextService_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
-{
- TextService *This;
- if (pUnkOuter)
- return CLASS_E_NOAGGREGATION;
-
- This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TextService));
- if (This == NULL)
- return E_OUTOFMEMORY;
-
- This->TextInputProcessorVtbl= &TextService_TextInputProcessorVtbl;
- This->refCount = 1;
-
- *ppOut = (IUnknown *)This;
- return S_OK;
-}
-
-HRESULT RegisterTextService(REFCLSID rclsid)
-{
- ClassFactory_Constructor( TextService_Constructor ,(LPVOID*)&cf);
- return CoRegisterClassObject(rclsid, (IUnknown*) cf, CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, ®id);
-}
-
-HRESULT UnregisterTextService()
-{
- return CoRevokeClassObject(regid);
-}
--
1.6.2.1
More information about the wine-patches
mailing list