* PROJECT: ReactOS api tests
* LICENSE: GPLv2+ - See COPYING in the top level directory
* PURPOSE: COM interface test
- * PROGRAMMER: Thomas Faber <thfabba@gmx.de>
+ * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
*/
#include "com_apitest.h"
{
ID_NAME(IID_IACList),
ID_NAME(IID_IACList2),
+ ID_NAME(IID_IADesktopP2),
ID_NAME(IID_IAccessible),
+ ID_NAME(IID_IAccessControl),
+ ID_NAME(IID_IAccessor),
+ ID_NAME(IID_IActiveDesktop),
+ ID_NAME(IID_IActiveDesktopP),
+ ID_NAME(IID_IAddressBarParser),
ID_NAME(IID_IAddressBand),
ID_NAME(IID_IAddressEditBox),
+ ID_NAME(IID_IAutoComplete),
+ ID_NAME(IID_IAutoComplete2),
ID_NAME(IID_IBandNavigate),
ID_NAME(IID_IBandProxy),
ID_NAME(IID_IBandSite),
ID_NAME(IID_IBandSiteHelper),
ID_NAME(IID_IBanneredBar),
ID_NAME(IID_IBindCtx),
+ ID_NAME(IID_IBrowserFrameOptions),
ID_NAME(IID_IBrowserService),
ID_NAME(IID_IBrowserService2),
+ ID_NAME(IID_IBrowserService3),
ID_NAME(IID_IClassFactory),
ID_NAME(IID_IClassFactory2),
ID_NAME(IID_IClassFactory3),
ID_NAME(IID_IClientSecurity),
ID_NAME(IID_IComThreadingInfo),
+ ID_NAME(IID_IContext),
ID_NAME(IID_IContextMenu),
ID_NAME(IID_IContextMenu2),
ID_NAME(IID_IContextMenu3),
ID_NAME(IID_IContextMenuCB),
ID_NAME(IID_IContextMenuSite),
ID_NAME(IID_IContinue),
+ ID_NAME(IID_IDVGetEnum),
ID_NAME(IID_IDataObject),
+ ID_NAME(IID_IDefViewID),
ID_NAME(IID_IDefViewFrame),
+ ID_NAME(IID_IDefViewFrame3),
+ ID_NAME(IID_IDefViewFrameGroup),
+ ID_NAME(IID_IDefViewSafety),
+ ID_NAME(IID_IDefViewScript),
ID_NAME(IID_IDeskBand),
+ ID_NAME(IID_IDeskBandEx),
ID_NAME(IID_IDeskBar),
ID_NAME(IID_IDeskBarClient),
+ ID_NAME(IID_IDeskMovr),
ID_NAME(IID_IDispatch),
ID_NAME(IID_IDockingWindow),
ID_NAME(IID_IDockingWindowFrame),
ID_NAME(IID_IEnumShellItems),
ID_NAME(IID_IEnumString),
ID_NAME(IID_IEnumUnknown),
+ ID_NAME(IID_IEnumVARIANT),
ID_NAME(IID_IErrorLog),
ID_NAME(IID_IExplorerToolbar),
ID_NAME(IID_IExtractIconA),
ID_NAME(IID_IFileDialog2),
ID_NAME(IID_IFileSearchBand),
ID_NAME(IID_IFolderBandPriv),
+ ID_NAME(IID_IFolderFilter),
+ ID_NAME(IID_IFolderFilterSite),
ID_NAME(IID_IFolderView),
ID_NAME(IID_IFolderView2),
ID_NAME(IID_IFolderViewOC),
ID_NAME(IID_IMenuBand),
ID_NAME(IID_IMenuPopup),
ID_NAME(IID_IMoniker),
+ ID_NAME(IID_IMultiMonitorDockingSite),
ID_NAME(IID_IMultiQI),
ID_NAME(IID_INamespaceProxy),
ID_NAME(IID_INameSpaceTreeControl),
ID_NAME(IID_IRunnableObject),
ID_NAME(IID_IServerSecurity),
ID_NAME(IID_IServiceProvider),
+ ID_NAME(IID_ISFHelper),
ID_NAME(IID_IShellBrowser),
ID_NAME(IID_IShellBrowserService),
ID_NAME(IID_IShellChangeNotify),
ID_NAME(IID_IShellDispatch3),
ID_NAME(IID_IShellDispatch4),
ID_NAME(IID_IShellDispatch5),
+ ID_NAME(IID_IShellExtInit),
+ ID_NAME(IID_IShellPropSheetExt),
ID_NAME(IID_IShellIconOverlayIdentifier),
ID_NAME(IID_IShellFolder),
ID_NAME(IID_IShellFolder2),
ID_NAME(IID_IShellMenu2),
ID_NAME(IID_IShellMenuAcc),
ID_NAME(IID_IShellMenuCallback),
+ ID_NAME(IID_IShellNameSpace),
ID_NAME(IID_IShellService),
ID_NAME(IID_IShellView),
ID_NAME(IID_IShellView2),
ID_NAME(IID_IShellView3),
ID_NAME(IID_IShellWindows),
+ ID_NAME(IID_IStorage),
ID_NAME(IID_IStream),
ID_NAME(IID_ISurrogate),
ID_NAME(IID_ISynchronize),
ID_NAME(IID_IUnknown),
ID_NAME(IID_IViewObject),
ID_NAME(IID_IViewObject2),
+ ID_NAME(IID_IViewObjectEx),
ID_NAME(IID_IWinEventHandler),
ID_NAME(IID_DFConstraint),
ID_NAME(DIID_DShellFolderViewEvents),
+ ID_NAME(IID_CDefView),
ID_NAME(IID_Folder),
ID_NAME(IID_Folder2),
ID_NAME(IID_Folder3),
ID_NAME(IID_FolderItems3),
ID_NAME(IID_FolderItemVerb),
ID_NAME(IID_FolderItemVerbs),
+
+ ID_NAME(CLSID_ShellDesktop)
};
static const INT KnownInterfaceCount = RTL_NUMBER_OF(KnownInterfaces);
NTSTATUS status;
UNICODE_STRING clsid;
DWORD type;
- WCHAR dllName[100];
- DWORD dllNameSize;
+ WCHAR data[100];
+ DWORD dataSize;
+ PCWSTR expectedThreadingModel;
class = &ExpectedInterfaces[iClass];
status = RtlStringFromGUID(class->clsid, &clsid);
if (myskip(result == NO_ERROR, "No key\n"))
continue;
- dllNameSize = sizeof(dllName);
- result = RegQueryValueEx(hKeyServer, NULL, NULL, &type, (PBYTE)dllName, &dllNameSize);
+ dataSize = sizeof(data);
+ result = RegQueryValueEx(hKeyServer, NULL, NULL, &type, (PBYTE)data, &dataSize);
ok(result == NO_ERROR, "Failed to query value for %s, error %lu\n", class->name, result);
if (!myskip(result == NO_ERROR, "No module name\n"))
{
ok(type == REG_SZ || type == REG_EXPAND_SZ, "type %lu for %s\n", type, class->name);
- ok(dllNameSize % sizeof(WCHAR) == 0, "size %lu for %s\n", dllNameSize, class->name);
- ok(dllNameSize <= sizeof(dllName), "size %lu for %s\n", dllNameSize, class->name);
- ok(dllName[dllNameSize / sizeof(WCHAR) - 1] == UNICODE_NULL, "Not null terminated for %s\n", class->name);
+ ok(dataSize % sizeof(WCHAR) == 0, "size %lu for %s\n", dataSize, class->name);
+ ok(dataSize <= sizeof(data), "size %lu for %s\n", dataSize, class->name);
+ ok(data[dataSize / sizeof(WCHAR) - 1] == UNICODE_NULL, "Not null terminated for %s\n", class->name);
// TODO: Use SearchPath (or assume everything's in system32) and do a proper full path compare
- PathStripPathW(dllName);
- PathRemoveExtensionW(dllName);
- ok(!wcsicmp(dllName, ModuleName), "Server is %ls, expected %ls for %s\n", dllName, ModuleName, class->name);
+ PathStripPathW(data);
+ PathRemoveExtensionW(data);
+ ok(!wcsicmp(data, ModuleName), "Server is %ls, expected %ls for %s\n", data, ModuleName, class->name);
}
- dllNameSize = sizeof(dllName);
- result = RegQueryValueEx(hKeyServer, L"ThreadingModel", NULL, &type, (PBYTE)dllName, &dllNameSize);
+ dataSize = sizeof(data);
+ result = RegQueryValueEx(hKeyServer, L"ThreadingModel", NULL, &type, (PBYTE)data, &dataSize);
ok(result == NO_ERROR, "Failed to query value for %s, error %lu\n", class->name, result);
if (!myskip(result == NO_ERROR, "No ThreadingModel\n"))
{
ok(type == REG_SZ || type == REG_EXPAND_SZ, "type %lu for %s\n", type, class->name);
- ok(dllNameSize % sizeof(WCHAR) == 0, "size %lu for %s\n", dllNameSize, class->name);
- ok(dllNameSize <= sizeof(dllName), "size %lu for %s\n", dllNameSize, class->name);
- ok(dllName[dllNameSize / sizeof(WCHAR) - 1] == UNICODE_NULL, "Not null terminated for %s\n", class->name);
- ok(!wcsicmp(dllName, L"Apartment"), "Server is %ls, expected %ls for %s\n", dllName, L"Apartment", class->name);
+ ok(dataSize % sizeof(WCHAR) == 0, "size %lu for %s\n", dataSize, class->name);
+ ok(dataSize <= sizeof(data), "size %lu for %s\n", dataSize, class->name);
+ ok(data[dataSize / sizeof(WCHAR) - 1] == UNICODE_NULL, "Not null terminated for %s\n", class->name);
+ expectedThreadingModel = class->ThreadingModel;
+ if (!expectedThreadingModel)
+ expectedThreadingModel = L"Apartment";
+ ok(!wcsicmp(data, expectedThreadingModel), "Server is %ls, expected %ls for %s\n", data, expectedThreadingModel, class->name);
}
RegCloseKey(hKeyServer);
IClassFactory *pCF = pv;
hr = IClassFactory_CreateInstance(pCF, NULL, &IID_IUnknown, &pv);
ok(hr == S_OK, "IClassFactory::CreateInstance failed for %s, hr = 0x%lx\n", class->name, hr);
- if (SUCCEEDED(hr))
+ if (!myskip(SUCCEEDED(hr), "No instance\n"))
{
IUnknown *pUnk = pv;
IUnknown_Release(pUnk);