Rob Shearman : ole32: Add tests for the default handler.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jan 11 05:34:09 CST 2007


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Wed Jan 10 17:02:48 2007 -0600

ole32: Add tests for the default handler.

---

 dlls/ole32/tests/ole2.c |  172 +++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 166 insertions(+), 6 deletions(-)

diff --git a/dlls/ole32/tests/ole2.c b/dlls/ole32/tests/ole2.c
index 7c24103..73378dd 100644
--- a/dlls/ole32/tests/ole2.c
+++ b/dlls/ole32/tests/ole2.c
@@ -19,6 +19,7 @@
  */
 
 #define COBJMACROS
+#define CONST_VTABLE
 
 #include <stdarg.h>
 
@@ -35,6 +36,14 @@ static IPersistStorage OleObjectPersistS
 static IOleCache *cache;
 static IRunnableObject *runnable;
 
+static const CLSID CLSID_WineTest =
+{ /* 9474ba1a-258b-490b-bc13-516e9239ace0 */
+    0x9474ba1a,
+    0x258b,
+    0x490b,
+    {0xbc, 0x13, 0x51, 0x6e, 0x92, 0x39, 0xac, 0xe0}
+};
+
 static char const * const *expected_method_list;
 
 #define CHECK_EXPECTED_METHOD(method_name) \
@@ -311,7 +320,7 @@ static HRESULT WINAPI OleObject_SetColor
     return E_NOTIMPL;
 }
 
-static IOleObjectVtbl OleObjectVtbl =
+static const IOleObjectVtbl OleObjectVtbl =
 {
     OleObject_QueryInterface,
     OleObject_AddRef,
@@ -424,7 +433,7 @@ static HRESULT WINAPI OleObjectPersistSt
     return S_OK;
 }
 
-static IPersistStorageVtbl OleObjectPersistStgVtbl = 
+static const IPersistStorageVtbl OleObjectPersistStgVtbl =
 {
     OleObjectPersistStg_QueryInterface,
     OleObjectPersistStg_AddRef,
@@ -514,7 +523,7 @@ static HRESULT WINAPI OleObjectCache_Set
 }
 
 
-static IOleCacheVtbl OleObjectCacheVtbl =
+static const IOleCacheVtbl OleObjectCacheVtbl =
 {
     OleObjectCache_QueryInterface,
     OleObjectCache_AddRef,
@@ -560,7 +569,7 @@ static HRESULT WINAPI OleObjectCF_LockSe
     return S_OK;
 }
 
-static IClassFactoryVtbl OleObjectCFVtbl =
+static const IClassFactoryVtbl OleObjectCFVtbl =
 {
     OleObjectCF_QueryInterface,
     OleObjectCF_AddRef,
@@ -627,7 +636,7 @@ static HRESULT WINAPI OleObjectRunnable_
     return S_OK;
 }
 
-static IRunnableObjectVtbl OleObjectRunnableVtbl =
+static const IRunnableObjectVtbl OleObjectRunnableVtbl =
 {
     OleObjectRunnable_QueryInterface,
     OleObjectRunnable_AddRef,
@@ -893,7 +902,7 @@ static void WINAPI AdviseSink_OnClose(IA
     CHECK_EXPECTED_METHOD("AdviseSink_OnClose");
 }
 
-static IAdviseSinkVtbl AdviseSinkVtbl =
+static const IAdviseSinkVtbl AdviseSinkVtbl =
 {
     AdviseSink_QueryInterface,
     AdviseSink_AddRef,
@@ -1294,6 +1303,156 @@ static void test_data_cache(void)
     ReleaseStgMedium(&stgmedium);
 }
 
+static void test_default_handler(void)
+{
+    HRESULT hr;
+    IOleObject *pObject;
+    IRunnableObject *pRunnableObject;
+    IOleClientSite *pClientSite;
+    IDataObject *pDataObject;
+    SIZEL sizel;
+    DWORD dwStatus;
+    CLSID clsid;
+    LPOLESTR pszUserType;
+    LOGPALETTE palette;
+    DWORD dwAdvConn;
+    IMoniker *pMoniker;
+    FORMATETC fmtetc;
+    IOleInPlaceObject *pInPlaceObj;
+    IEnumOLEVERB *pEnumVerbs;
+    static const WCHAR wszUnknown[] = {'U','n','k','n','o','w','n',0};
+    static const WCHAR wszHostName[] = {'W','i','n','e',' ','T','e','s','t',' ','P','r','o','g','r','a','m',0};
+    static const WCHAR wszDelim[] = {'!',0};
+
+    hr = CoCreateInstance(&CLSID_WineTest, NULL, CLSCTX_INPROC_HANDLER, &IID_IOleObject, (void **)&pObject);
+    ok(hr == REGDB_E_CLASSNOTREG, "CoCreateInstance should have failed with REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr);
+
+    hr = OleCreateDefaultHandler(&CLSID_WineTest, NULL, &IID_IOleObject, (void **)&pObject);
+    ok_ole_success(hr, "OleCreateDefaultHandler");
+
+    hr = IOleObject_QueryInterface(pObject, &IID_IOleInPlaceObject, (void **)&pInPlaceObj);
+    ok(hr == E_NOINTERFACE, "IOleObject_QueryInterface(&IID_IOleInPlaceObject) should return E_NOINTERFACE instead of 0x%08x\n", hr);
+
+    hr = IOleObject_Advise(pObject, &AdviseSink, &dwAdvConn);
+    ok_ole_success(hr, "IOleObject_Advise");
+
+    hr = IOleObject_Close(pObject, OLECLOSE_NOSAVE);
+    ok_ole_success(hr, "IOleObject_Close");
+
+    /* FIXME: test IOleObject_EnumAdvise */
+
+    hr = IOleObject_EnumVerbs(pObject, &pEnumVerbs);
+    ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_EnumVerbs should have returned REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr);
+
+    hr = IOleObject_GetClientSite(pObject, &pClientSite);
+    ok_ole_success(hr, "IOleObject_GetClientSite");
+
+    hr = IOleObject_GetClipboardData(pObject, 0, &pDataObject);
+    ok(hr == OLE_E_NOTRUNNING,
+       "IOleObject_GetClipboardData should have returned OLE_E_NOTRUNNING instead of 0x%08x\n",
+       hr);
+
+    hr = IOleObject_GetExtent(pObject, DVASPECT_CONTENT, &sizel);
+    ok(hr == OLE_E_BLANK, "IOleObject_GetExtent should have returned OLE_E_BLANK instead of 0x%08x\n",
+       hr);
+
+    hr = IOleObject_GetMiscStatus(pObject, DVASPECT_CONTENT, &dwStatus);
+    todo_wine
+    ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_GetMiscStatus should have returned REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr);
+
+    hr = IOleObject_GetUserClassID(pObject, &clsid);
+    ok_ole_success(hr, "IOleObject_GetUserClassID");
+    ok(IsEqualCLSID(&clsid, &CLSID_WineTest), "clsid != CLSID_WineTest\n");
+
+    hr = IOleObject_GetUserType(pObject, USERCLASSTYPE_FULL, &pszUserType);
+    todo_wine {
+    ok_ole_success(hr, "IOleObject_GetUserType");
+    ok(!lstrcmpW(pszUserType, wszUnknown), "Retrieved user type was wrong\n");
+    }
+
+    hr = IOleObject_InitFromData(pObject, NULL, TRUE, 0);
+    ok(hr == OLE_E_NOTRUNNING, "IOleObject_InitFromData should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr);
+
+    hr = IOleObject_IsUpToDate(pObject);
+    ok(hr == OLE_E_NOTRUNNING, "IOleObject_IsUpToDate should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr);
+
+    palette.palNumEntries = 1;
+    palette.palVersion = 2;
+    memset(&palette.palPalEntry[0], 0, sizeof(palette.palPalEntry[0]));
+    hr = IOleObject_SetColorScheme(pObject, &palette);
+    ok(hr == OLE_E_NOTRUNNING, "IOleObject_SetColorScheme should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr);
+
+    sizel.cx = sizel.cy = 0;
+    hr = IOleObject_SetExtent(pObject, DVASPECT_CONTENT, &sizel);
+
+    hr = IOleObject_SetHostNames(pObject, wszHostName, NULL);
+    ok_ole_success(hr, "IOleObject_SetHostNames");
+
+    hr = CreateItemMoniker(wszDelim, wszHostName, &pMoniker);
+    ok_ole_success(hr, "CreateItemMoniker");
+    hr = IOleObject_SetMoniker(pObject, OLEWHICHMK_CONTAINER, pMoniker);
+    ok_ole_success(hr, "IOleObject_SetMoniker");
+
+    hr = IOleObject_GetMoniker(pObject, OLEGETMONIKER_ONLYIFTHERE, OLEWHICHMK_CONTAINER, &pMoniker);
+    ok(hr == E_FAIL, "IOleObject_GetMoniker should have returned E_FAIL instead of 0x%08x\n", hr);
+
+    hr = IOleObject_Update(pObject);
+    todo_wine
+    ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_Update should have returned REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr);
+
+    hr = IOleObject_QueryInterface(pObject, &IID_IDataObject, (void **)&pDataObject);
+    ok_ole_success(hr, "IOleObject_QueryInterface");
+
+    fmtetc.cfFormat = CF_TEXT;
+    fmtetc.ptd = NULL;
+    fmtetc.dwAspect = DVASPECT_CONTENT;
+    fmtetc.lindex = -1;
+    fmtetc.tymed = TYMED_NULL;
+    hr = IDataObject_DAdvise(pDataObject, &fmtetc, 0, &AdviseSink, &dwAdvConn);
+    ok_ole_success(hr, "IDataObject_DAdvise");
+
+    fmtetc.cfFormat = CF_ENHMETAFILE;
+    fmtetc.ptd = NULL;
+    fmtetc.dwAspect = DVASPECT_CONTENT;
+    fmtetc.lindex = -1;
+    fmtetc.tymed = TYMED_ENHMF;
+    hr = IDataObject_DAdvise(pDataObject, &fmtetc, 0, &AdviseSink, &dwAdvConn);
+    ok_ole_success(hr, "IDataObject_DAdvise");
+
+    fmtetc.cfFormat = CF_ENHMETAFILE;
+    fmtetc.ptd = NULL;
+    fmtetc.dwAspect = DVASPECT_CONTENT;
+    fmtetc.lindex = -1;
+    fmtetc.tymed = TYMED_ENHMF;
+    hr = IDataObject_QueryGetData(pDataObject, &fmtetc);
+    todo_wine
+    ok(hr == OLE_E_NOTRUNNING, "IDataObject_QueryGetData should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr);
+
+    fmtetc.cfFormat = CF_TEXT;
+    fmtetc.ptd = NULL;
+    fmtetc.dwAspect = DVASPECT_CONTENT;
+    fmtetc.lindex = -1;
+    fmtetc.tymed = TYMED_NULL;
+    hr = IDataObject_QueryGetData(pDataObject, &fmtetc);
+    todo_wine
+    ok(hr == OLE_E_NOTRUNNING, "IDataObject_QueryGetData should have returned OLE_E_NOTRUNNING instead of 0x%08x\n", hr);
+
+    hr = IOleObject_QueryInterface(pObject, &IID_IRunnableObject, (void **)&pRunnableObject);
+    ok_ole_success(hr, "IOleObject_QueryInterface");
+
+    hr = IRunnableObject_SetContainedObject(pRunnableObject, TRUE);
+    ok_ole_success(hr, "IRunnableObject_SetContainedObject");
+
+    hr = IRunnableObject_Run(pRunnableObject, NULL);
+    ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_Run should have returned REGDB_E_CLASSNOTREG instead of 0x%08x\n", hr);
+
+    hr = IOleObject_Close(pObject, OLECLOSE_NOSAVE);
+    ok_ole_success(hr, "IOleObject_Close");
+
+    IRunnableObject_Release(pRunnableObject);
+    IOleObject_Release(pObject);
+}
+
 START_TEST(ole2)
 {
     DWORD dwRegister;
@@ -1323,6 +1482,7 @@ START_TEST(ole2)
     ok_ole_success(hr, "CoRevokeClassObject");
 
     test_data_cache();
+    test_default_handler();
 
     CoUninitialize();
 }




More information about the wine-cvs mailing list