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