Robert Shearman : oleaut: Add tests for IFontEventsDisp.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Feb 10 08:54:52 CST 2006


Module: wine
Branch: refs/heads/master
Commit: bcac0cd5d52dcec653f0e15996e6ff9e351d9551
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=bcac0cd5d52dcec653f0e15996e6ff9e351d9551

Author: Robert Shearman <rob at codeweavers.com>
Date:   Fri Feb 10 14:50:40 2006 +0100

oleaut: Add tests for IFontEventsDisp.

---

 dlls/oleaut32/tests/olefont.c |  112 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 112 insertions(+), 0 deletions(-)

diff --git a/dlls/oleaut32/tests/olefont.c b/dlls/oleaut32/tests/olefont.c
index fb24207..5906749 100644
--- a/dlls/oleaut32/tests/olefont.c
+++ b/dlls/oleaut32/tests/olefont.c
@@ -37,11 +37,14 @@
 #include <winnt.h>
 #include <wtypes.h>
 #include <olectl.h>
+#include <ocidl.h>
 
 static HMODULE hOleaut32;
 
 static HRESULT (WINAPI *pOleCreateFontIndirect)(LPFONTDESC,REFIID,LPVOID*);
 
+#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08lx\n", hr)
+
 /* Create a font with cySize given by lo_size, hi_size,  */
 /* SetRatio to ratio_logical, ratio_himetric,            */
 /* check that resulting hfont has height hfont_height.   */
@@ -173,6 +176,114 @@ void test_type_info(void)
 	IFontDisp_Release(fontdisp);
 }
 
+static HRESULT WINAPI FontEventsDisp_QueryInterface(
+        IFontEventsDisp *iface,
+    /* [in] */ REFIID riid,
+    /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
+{
+    if (IsEqualIID(riid, &IID_IFontEventsDisp) || IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDispatch))
+    {
+        IUnknown_AddRef(iface);
+        *ppvObject = iface;
+        return S_OK;
+    }
+    else
+    {
+        *ppvObject = NULL;
+        return E_NOINTERFACE;
+    }
+}
+
+static ULONG WINAPI FontEventsDisp_AddRef(
+    IFontEventsDisp *iface)
+{
+    return 2;
+}
+
+static ULONG WINAPI FontEventsDisp_Release(
+        IFontEventsDisp *iface)
+{
+    return 1;
+}
+
+static BOOL fonteventsdisp_invoke_called = FALSE;
+
+static HRESULT WINAPI FontEventsDisp_Invoke(
+        IFontEventsDisp __RPC_FAR * iface,
+    /* [in] */ DISPID dispIdMember,
+    /* [in] */ REFIID riid,
+    /* [in] */ LCID lcid,
+    /* [in] */ WORD wFlags,
+    /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+    /* [out] */ VARIANT __RPC_FAR *pVarResult,
+    /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+    /* [out] */ UINT __RPC_FAR *puArgErr)
+{
+    static const WCHAR wszBold[] = {'B','o','l','d',0};
+    ok(wFlags == INVOKE_FUNC, "invoke flags should have been INVOKE_FUNC instead of 0x%x\n", wFlags);
+    ok(dispIdMember == DISPID_FONT_CHANGED, "dispIdMember should have been DISPID_FONT_CHANGED instead of 0x%lx\n", dispIdMember);
+    ok(pDispParams->cArgs == 1, "pDispParams->cArgs should have been 1 instead of %d\n", pDispParams->cArgs);
+    ok(V_VT(&pDispParams->rgvarg[0]) == VT_BSTR, "VT of first param should have been VT_BSTR instead of %d\n", V_VT(&pDispParams->rgvarg[0]));
+    ok(!lstrcmpW(V_BSTR(&pDispParams->rgvarg[0]), wszBold), "String in first param should have been \"Bold\"\n");
+
+    fonteventsdisp_invoke_called = TRUE;
+    return S_OK;
+}
+
+static IFontEventsDispVtbl FontEventsDisp_Vtbl =
+{
+    FontEventsDisp_QueryInterface,
+    FontEventsDisp_AddRef,
+    FontEventsDisp_Release,
+    NULL,
+    NULL,
+    NULL,
+    FontEventsDisp_Invoke
+};
+
+static IFontEventsDisp FontEventsDisp = { &FontEventsDisp_Vtbl };
+
+static void test_font_events_disp(void)
+{
+    IFont *pFont;
+    IConnectionPointContainer *pCPC;
+    IConnectionPoint *pCP;
+    FONTDESC fontdesc;
+    HRESULT hr;
+    DWORD dwCookie;
+    static const WCHAR wszMSSansSerif[] = {'M','S',' ','S','a','n','s',' ','S','e','r','i','f',0};
+
+    fontdesc.cbSizeofstruct = sizeof(fontdesc);
+    fontdesc.lpstrName = (LPOLESTR)wszMSSansSerif;
+    fontdesc.cySize.int64 = 12 * 10000; /* 12 pt */
+    fontdesc.sWeight = FW_NORMAL;
+    fontdesc.sCharset = 0;
+    fontdesc.fItalic = FALSE;
+    fontdesc.fUnderline = FALSE;
+    fontdesc.fStrikethrough = FALSE;
+
+    hr = pOleCreateFontIndirect(&fontdesc, &IID_IFont, (void **)&pFont);
+    ok_ole_success(hr, "OleCreateFontIndirect");
+
+    hr = IFont_QueryInterface(pFont, &IID_IConnectionPointContainer, (void **)&pCPC);
+    ok_ole_success(hr, "IFont_QueryInterface");
+
+    hr = IConnectionPointContainer_FindConnectionPoint(pCPC, &IID_IFontEventsDisp, &pCP);
+    ok_ole_success(hr, "IConnectionPointContainer_FindConnectionPoint");
+    IConnectionPointContainer_Release(pCPC);
+
+    hr = IConnectionPoint_Advise(pCP, (IUnknown *)&FontEventsDisp, &dwCookie);
+    ok_ole_success(hr, "IConnectionPoint_Advise");
+    IConnectionPoint_Release(pCP);
+
+    hr = IFont_put_Bold(pFont, TRUE);
+    ok_ole_success(hr, "IFont_put_Bold");
+
+    ok(fonteventsdisp_invoke_called, "IFontEventDisp::Invoke wasn't called\n");
+
+    IFont_Release(pFont);
+}
+
 START_TEST(olefont)
 {
 	hOleaut32 = LoadLibraryA("oleaut32.dll");    
@@ -193,4 +304,5 @@ START_TEST(olefont)
 	/* test_ifont_sizes(0, 0, 72, 2540, 0, "zero size");    */      /* zero size */
 	/* test_ifont_sizes(186000, 0, 72, 2540, -19, "rounding"); */   /* test rounding */
 
+	test_font_events_disp();
 }




More information about the wine-cvs mailing list