Release 0.9.39.
[wine/gsoc-2012-control.git] / dlls / shlwapi / tests / clsid.c
blob8f0830cbf20114d41fe7b93c93212fdf3e93e327
1 /* Unit test suite for SHLWAPI Class ID functions
3 * Copyright 2003 Jon Griffiths
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 #include <stdio.h>
22 #include "wine/test.h"
23 #include "winbase.h"
24 #include "winerror.h"
25 #include "winnls.h"
26 #include "winuser.h"
27 #include "shlguid.h"
28 #include "shobjidl.h"
29 #include "olectl.h"
31 #define INITGUID
32 #include "initguid.h"
34 /* This GUID has been removed from the PSDK */
35 DEFINE_OLEGUID(WINE_IID_IDelayedRelease, 0x000214EDL, 0, 0);
37 /* Function ptrs for ordinal calls */
38 static HMODULE hShlwapi = 0;
39 static BOOL (WINAPI *pSHLWAPI_269)(LPCSTR, CLSID *) = 0;
40 static DWORD (WINAPI *pSHLWAPI_23)(REFGUID, LPSTR, INT) = 0;
42 /* GUIDs to test */
43 const GUID * TEST_guids[] = {
44 &CLSID_ShellDesktop,
45 &CLSID_ShellLink,
46 &CATID_BrowsableShellExt,
47 &CATID_BrowseInPlace,
48 &CATID_DeskBand,
49 &CATID_InfoBand,
50 &CATID_CommBand,
51 &FMTID_Intshcut,
52 &FMTID_InternetSite,
53 &CGID_Explorer,
54 &CGID_ShellDocView,
55 &CGID_ShellServiceObject,
56 &CGID_ExplorerBarDoc,
57 &IID_INewShortcutHookA,
58 &IID_IShellIcon,
59 &IID_IShellFolder,
60 &IID_IShellExtInit,
61 &IID_IShellPropSheetExt,
62 &IID_IPersistFolder,
63 &IID_IExtractIconA,
64 &IID_IShellDetails,
65 &WINE_IID_IDelayedRelease,
66 &IID_IShellLinkA,
67 &IID_IShellCopyHookA,
68 &IID_IFileViewerA,
69 &IID_ICommDlgBrowser,
70 &IID_IEnumIDList,
71 &IID_IFileViewerSite,
72 &IID_IContextMenu2,
73 &IID_IShellExecuteHookA,
74 &IID_IPropSheetPage,
75 &IID_INewShortcutHookW,
76 &IID_IFileViewerW,
77 &IID_IShellLinkW,
78 &IID_IExtractIconW,
79 &IID_IShellExecuteHookW,
80 &IID_IShellCopyHookW,
81 &IID_IRemoteComputer,
82 &IID_IQueryInfo,
83 &IID_IDockingWindow,
84 &IID_IDockingWindowSite,
85 &CLSID_NetworkPlaces,
86 &CLSID_NetworkDomain,
87 &CLSID_NetworkServer,
88 &CLSID_NetworkShare,
89 &CLSID_MyComputer,
90 &CLSID_Internet,
91 &CLSID_ShellFSFolder,
92 &CLSID_RecycleBin,
93 &CLSID_ControlPanel,
94 &CLSID_Printers,
95 &CLSID_MyDocuments,
96 NULL
99 DEFINE_GUID(IID_Endianess, 0x01020304, 0x0506, 0x0708, 0x09, 0x0A, 0x0B,
100 0x0C, 0x0D, 0x0E, 0x0F, 0x0A);
102 static void test_ClassIDs(void)
104 const GUID **guids = TEST_guids;
105 char szBuff[256];
106 GUID guid;
107 DWORD dwLen;
108 BOOL bRet;
109 int i = 0;
111 if (!pSHLWAPI_269 || !pSHLWAPI_23)
112 return;
114 while (*guids)
116 dwLen = pSHLWAPI_23(*guids, szBuff, 256);
117 ok(dwLen == 39, "wrong size for id %d\n", i);
119 bRet = pSHLWAPI_269(szBuff, &guid);
120 ok(bRet != FALSE, "created invalid string '%s'\n", szBuff);
122 if (bRet)
123 ok(IsEqualGUID(*guids, &guid), "GUID created wrong %d\n", i);
125 guids++;
126 i++;
129 /* Test endianess */
130 dwLen = pSHLWAPI_23(&IID_Endianess, szBuff, 256);
131 ok(dwLen == 39, "wrong size for IID_Endianess\n");
133 ok(!strcmp(szBuff, "{01020304-0506-0708-090A-0B0C0D0E0F0A}"),
134 "Endianess Broken, got '%s'\n", szBuff);
136 /* test lengths */
137 szBuff[0] = ':';
138 dwLen = pSHLWAPI_23(&IID_Endianess, szBuff, 0);
139 ok(dwLen == 0, "accepted bad length\n");
140 ok(szBuff[0] == ':', "wrote to buffer with no length\n");
142 szBuff[0] = ':';
143 dwLen = pSHLWAPI_23(&IID_Endianess, szBuff, 38);
144 ok(dwLen == 0, "accepted bad length\n");
145 ok(szBuff[0] == ':', "wrote to buffer with no length\n");
147 szBuff[0] = ':';
148 dwLen = pSHLWAPI_23(&IID_Endianess, szBuff, 39);
149 ok(dwLen == 39, "rejected ok length\n");
150 ok(szBuff[0] == '{', "Didn't write to buffer with ok length\n");
152 /* Test string */
153 strcpy(szBuff, "{xxx-");
154 bRet = pSHLWAPI_269(szBuff, &guid);
155 ok(bRet == FALSE, "accepted invalid string\n");
157 dwLen = pSHLWAPI_23(&IID_Endianess, szBuff, 39);
158 ok(dwLen == 39, "rejected ok length\n");
159 ok(szBuff[0] == '{', "Didn't write to buffer with ok length\n");
162 static void test_CLSIDFromProgIDWrap(void)
164 HRESULT (WINAPI *pCLSIDFromProgIDWrap)(LPCOLESTR,LPCLSID);
165 CLSID clsid = IID_NULL;
166 HRESULT hres;
168 static const WCHAR wszStdPicture[] = {'S','t','d','P','i','c','t','u','r','e',0};
170 pCLSIDFromProgIDWrap = (void*)GetProcAddress(hShlwapi,(char*)435);
172 hres = pCLSIDFromProgIDWrap(wszStdPicture, &clsid);
173 ok(hres == S_OK, "CLSIDFromProgIDWrap failed: %08x\n", hres);
174 ok(IsEqualGUID(&CLSID_StdPicture, &clsid), "wrong clsid\n");
176 hres = pCLSIDFromProgIDWrap(NULL, &clsid);
177 ok(hres == E_INVALIDARG, "CLSIDFromProgIDWrap failed: %08x, expected E_INVALIDARG\n", hres);
179 hres = pCLSIDFromProgIDWrap(wszStdPicture, NULL);
180 ok(hres == E_INVALIDARG, "CLSIDFromProgIDWrap failed: %08x, expected E_INVALIDARG\n", hres);
183 START_TEST(clsid)
185 hShlwapi = LoadLibraryA("shlwapi.dll");
186 ok(hShlwapi != 0, "LoadLibraryA failed\n");
187 if (hShlwapi)
189 pSHLWAPI_269 = (void*)GetProcAddress(hShlwapi, (LPSTR)269);
190 pSHLWAPI_23 = (void*)GetProcAddress(hShlwapi, (LPSTR)23);
193 test_ClassIDs();
194 test_CLSIDFromProgIDWrap();
196 if (hShlwapi)
197 FreeLibrary(hShlwapi);