[PATCH] Add printers CLSID to test, clean up a bit
Nikolay Sivov
nsivov at codeweavers.com
Sun Apr 18 09:31:52 CDT 2010
---
dlls/shell32/tests/shellpath.c | 297 +++++++++++++++++-----------------------
1 files changed, 126 insertions(+), 171 deletions(-)
diff --git a/dlls/shell32/tests/shellpath.c b/dlls/shell32/tests/shellpath.c
index e085632..33e0789 100644
--- a/dlls/shell32/tests/shellpath.c
+++ b/dlls/shell32/tests/shellpath.c
@@ -303,92 +303,66 @@ static const char *printGUID(const GUID *guid, char * guidSTR)
return guidSTR;
}
-static void testSHGetFolderLocationInvalidArgs(void)
-{
- LPITEMIDLIST pidl;
- HRESULT hr;
-
- if (!pSHGetFolderLocation) return;
-
- /* check a bogus CSIDL: */
- pidl = NULL;
- hr = pSHGetFolderLocation(NULL, 0xeeee, NULL, 0, &pidl);
- ok(hr == E_INVALIDARG,
- "SHGetFolderLocation(NULL, 0xeeee, NULL, 0, &pidl) returned 0x%08x, expected E_INVALIDARG\n", hr);
- if (hr == S_OK)
- IMalloc_Free(pMalloc, pidl);
- /* check a bogus user token: */
- pidl = NULL;
- hr = pSHGetFolderLocation(NULL, CSIDL_FAVORITES, (HANDLE)2, 0, &pidl);
- ok(hr == E_FAIL || hr == E_HANDLE,
- "SHGetFolderLocation(NULL, CSIDL_FAVORITES, 2, 0, &pidl) returned 0x%08x, expected E_FAIL or E_HANDLE\n", hr);
- if (hr == S_OK)
- IMalloc_Free(pMalloc, pidl);
- /* a NULL pidl pointer crashes, so don't test it */
-}
-
-static void testSHGetSpecialFolderLocationInvalidArgs(void)
+static void test_parameters(void)
{
LPITEMIDLIST pidl = NULL;
+ char path[MAX_PATH];
HRESULT hr;
- if (!pSHGetSpecialFolderLocation) return;
+ if (pSHGetFolderLocation)
+ {
+ /* check a bogus CSIDL: */
+ pidl = NULL;
+ hr = pSHGetFolderLocation(NULL, 0xeeee, NULL, 0, &pidl);
+ ok(hr == E_INVALIDARG, "got 0x%08x, expected E_INVALIDARG\n", hr);
+ if (hr == S_OK) IMalloc_Free(pMalloc, pidl);
+
+ /* check a bogus user token: */
+ pidl = NULL;
+ hr = pSHGetFolderLocation(NULL, CSIDL_FAVORITES, (HANDLE)2, 0, &pidl);
+ ok(hr == E_FAIL || hr == E_HANDLE, "got 0x%08x, expected E_FAIL or E_HANDLE\n", hr);
+ if (hr == S_OK) IMalloc_Free(pMalloc, pidl);
+
+ /* a NULL pidl pointer crashes, so don't test it */
+ }
- /* SHGetSpecialFolderLocation(NULL, 0, NULL) crashes */
- hr = pSHGetSpecialFolderLocation(NULL, 0xeeee, &pidl);
- ok(hr == E_INVALIDARG,
- "SHGetSpecialFolderLocation(NULL, 0xeeee, &pidl) returned 0x%08x, "
- "expected E_INVALIDARG\n", hr);
-}
+ if (pSHGetSpecialFolderLocation)
+ {
+ if (0)
+ /* crashes */
+ SHGetSpecialFolderLocation(NULL, 0, NULL);
-static void testSHGetFolderPathInvalidArgs(void)
-{
- char path[MAX_PATH];
- HRESULT hr;
+ hr = pSHGetSpecialFolderLocation(NULL, 0xeeee, &pidl);
+ ok(hr == E_INVALIDARG, "got returned 0x%08x\n", hr);
+ }
- if (!pSHGetFolderPathA) return;
+ if (pSHGetFolderPathA)
+ {
+ /* expect 2's a bogus handle, especially since we didn't open it */
+ hr = pSHGetFolderPathA(NULL, CSIDL_DESKTOP, (HANDLE)2, SHGFP_TYPE_DEFAULT, path);
+ ok(hr == E_FAIL || hr == E_HANDLE || /* Vista and 2k8 */
+ broken(hr == S_OK), /* W2k and Me */ "got 0x%08x, expected E_FAIL\n", hr);
- /* expect 2's a bogus handle, especially since we didn't open it */
- hr = pSHGetFolderPathA(NULL, CSIDL_DESKTOP, (HANDLE)2,
- SHGFP_TYPE_DEFAULT, path);
- ok(hr == E_FAIL ||
- hr == E_HANDLE || /* Windows Vista and 2008 */
- broken(hr == S_OK), /* Windows 2000 and Me */
- "SHGetFolderPathA(NULL, CSIDL_DESKTOP, 2, SHGFP_TYPE_DEFAULT, path) returned 0x%08x, expected E_FAIL\n", hr);
- hr = pSHGetFolderPathA(NULL, 0xeeee, NULL, SHGFP_TYPE_DEFAULT, path);
- ok(hr == E_INVALIDARG,
- "SHGetFolderPathA(NULL, 0xeeee, NULL, SHGFP_TYPE_DEFAULT, path) returned 0x%08x, expected E_INVALIDARG\n", hr);
-}
+ hr = pSHGetFolderPathA(NULL, 0xeeee, NULL, SHGFP_TYPE_DEFAULT, path);
+ ok(hr == E_INVALIDARG, "got 0x%08x, expected E_INVALIDARG\n", hr);
+ }
-static void testSHGetSpecialFolderPathInvalidArgs(void)
-{
- char path[MAX_PATH];
- BOOL ret;
+ if (pSHGetSpecialFolderPathA)
+ {
+ BOOL ret;
- if (!pSHGetSpecialFolderPathA) return;
+ if (0)
+ ret = pSHGetSpecialFolderPathA(NULL, NULL, CSIDL_BITBUCKET, FALSE);
-#if 0
- ret = pSHGetSpecialFolderPathA(NULL, NULL, CSIDL_BITBUCKET, FALSE);
- ok(!ret,
- "SHGetSpecialFolderPathA(NULL, NULL, CSIDL_BITBUCKET, FALSE) returned TRUE, expected FALSE\n");
-#endif
- /* odd but true: calling with a NULL path still succeeds if it's a real
- * dir (on some windows platform). on winME it generates exception.
- */
- ret = pSHGetSpecialFolderPathA(NULL, path, CSIDL_PROGRAMS, FALSE);
- ok(ret,
- "SHGetSpecialFolderPathA(NULL, path, CSIDL_PROGRAMS, FALSE) returned FALSE, expected TRUE\n");
- ret = pSHGetSpecialFolderPathA(NULL, path, 0xeeee, FALSE);
- ok(!ret,
- "SHGetSpecialFolderPathA(NULL, path, 0xeeee, FALSE) returned TRUE, expected FALSE\n");
-}
+ /* odd but true: calling with a NULL path still succeeds if it's a real
+ * dir (on some windows platform). on winME it generates exception.
+ */
+ ret = pSHGetSpecialFolderPathA(NULL, path, CSIDL_PROGRAMS, FALSE);
+ ok(ret, "got %d\n", ret);
-static void testApiParameters(void)
-{
- testSHGetFolderLocationInvalidArgs();
- testSHGetSpecialFolderLocationInvalidArgs();
- testSHGetFolderPathInvalidArgs();
- testSHGetSpecialFolderPathInvalidArgs();
+ ret = pSHGetSpecialFolderPathA(NULL, path, 0xeeee, FALSE);
+ ok(!ret, "got %d\n", ret);
+ }
}
/* Returns the folder's PIDL type, or 0xff if one can't be found. */
@@ -447,7 +421,7 @@ static BYTE testSHGetSpecialFolderLocation(int folder)
return ret;
}
-static void testSHGetFolderPath(BOOL optional, int folder)
+static void test_SHGetFolderPath(BOOL optional, int folder)
{
char path[MAX_PATH];
HRESULT hr;
@@ -459,7 +433,7 @@ static void testSHGetFolderPath(BOOL optional, int folder)
"SHGetFolderPathA(NULL, %s, NULL, SHGFP_TYPE_CURRENT, path) failed: 0x%08x\n", getFolderName(folder), hr);
}
-static void testSHGetSpecialFolderPath(BOOL optional, int folder)
+static void test_SHGetSpecialFolderPath(BOOL optional, int folder)
{
char path[MAX_PATH];
BOOL ret;
@@ -474,7 +448,7 @@ static void testSHGetSpecialFolderPath(BOOL optional, int folder)
getFolderName(folder));
}
-static void testShellValues(const struct shellExpectedValues testEntries[],
+static void test_ShellValues(const struct shellExpectedValues testEntries[],
int numEntries, BOOL optional)
{
int i;
@@ -509,8 +483,8 @@ static void testShellValues(const struct shellExpectedValues testEntries[],
case PT_DRIVE:
case PT_DRIVE2:
case PT_IESPECIAL2:
- testSHGetFolderPath(optional, testEntries[i].folder);
- testSHGetSpecialFolderPath(optional, testEntries[i].folder);
+ test_SHGetFolderPath(optional, testEntries[i].folder);
+ test_SHGetSpecialFolderPath(optional, testEntries[i].folder);
break;
}
}
@@ -580,27 +554,22 @@ static void matchGUID(int folder, const GUID *guid, const GUID *guid_alt)
}
}
-static void testDesktop(void)
-{
- testSHGetFolderPath(FALSE, CSIDL_DESKTOP);
- testSHGetSpecialFolderPath(FALSE, CSIDL_DESKTOP);
-}
-
/* Checks the PIDL type of all the known values. */
-static void testPidlTypes(void)
+static void test_PidlTypes(void)
{
- testDesktop();
- testShellValues(requiredShellValues, ARRAY_SIZE(requiredShellValues),
- FALSE);
- testShellValues(optionalShellValues, ARRAY_SIZE(optionalShellValues),
- TRUE);
+ /* Desktop */
+ test_SHGetFolderPath(FALSE, CSIDL_DESKTOP);
+ test_SHGetSpecialFolderPath(FALSE, CSIDL_DESKTOP);
+
+ test_ShellValues(requiredShellValues, ARRAY_SIZE(requiredShellValues), FALSE);
+ test_ShellValues(optionalShellValues, ARRAY_SIZE(optionalShellValues), TRUE);
}
/* FIXME: Should be in shobjidl.idl */
DEFINE_GUID(CLSID_NetworkExplorerFolder, 0xF02C1A0D, 0xBE21, 0x4350, 0x88, 0xB0, 0x73, 0x67, 0xFC, 0x96, 0xEF, 0x3C);
/* Verifies various shell virtual folders have the correct well-known GUIDs. */
-static void testGUIDs(void)
+static void test_GUIDs(void)
{
matchGUID(CSIDL_BITBUCKET, &CLSID_RecycleBin, NULL);
matchGUID(CSIDL_CONTROLS, &CLSID_ControlPanel, NULL);
@@ -609,20 +578,20 @@ static void testGUIDs(void)
matchGUID(CSIDL_NETWORK, &CLSID_NetworkPlaces, &CLSID_NetworkExplorerFolder); /* Vista and higher */
matchGUID(CSIDL_PERSONAL, &CLSID_MyDocuments, NULL);
matchGUID(CSIDL_COMMON_DOCUMENTS, &CLSID_CommonDocuments, NULL);
+ matchGUID(CSIDL_PRINTERS, &CLSID_Printers, NULL);
}
/* Verifies various shell paths match the environment variables to which they
* correspond.
*/
-static void testEnvVars(void)
+static void test_EnvVars(void)
{
matchSpecialFolderPathToEnv(CSIDL_PROGRAM_FILES, "ProgramFiles");
matchSpecialFolderPathToEnv(CSIDL_APPDATA, "APPDATA");
matchSpecialFolderPathToEnv(CSIDL_PROFILE, "USERPROFILE");
matchSpecialFolderPathToEnv(CSIDL_WINDOWS, "SystemRoot");
matchSpecialFolderPathToEnv(CSIDL_WINDOWS, "windir");
- matchSpecialFolderPathToEnv(CSIDL_PROGRAM_FILES_COMMON,
- "CommonProgramFiles");
+ matchSpecialFolderPathToEnv(CSIDL_PROGRAM_FILES_COMMON, "CommonProgramFiles");
/* this is only set on Wine, but can't hurt to verify it: */
matchSpecialFolderPathToEnv(CSIDL_SYSTEM, "winsysdir");
}
@@ -715,84 +684,71 @@ static int init(void)
return 1;
}
-/* Subprocess helper 1: test what happens when CSIDL_FAVORITES is set to a
- * nonexistent directory.
- */
-static void testNonExistentPath1(void)
+static void doChild(const char *arg)
{
+ char path[MAX_PATH];
HRESULT hr;
- LPITEMIDLIST pidl;
- char *p, path[MAX_PATH];
- /* test some failure cases first: */
- hr = pSHGetFolderPathA(NULL, CSIDL_FAVORITES, NULL,
- SHGFP_TYPE_CURRENT, path);
- ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
- "SHGetFolderPath returned 0x%08x, expected 0x80070002\n", hr);
- pidl = NULL;
- hr = pSHGetFolderLocation(NULL, CSIDL_FAVORITES, NULL, 0,
- &pidl);
- ok(hr == E_FAIL || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
- "SHGetFolderLocation returned 0x%08x\n", hr);
- if (hr == S_OK && pidl)
- IMalloc_Free(pMalloc, pidl);
- ok(!pSHGetSpecialFolderPathA(NULL, path, CSIDL_FAVORITES, FALSE),
- "SHGetSpecialFolderPath succeeded, expected failure\n");
- pidl = NULL;
- hr = pSHGetSpecialFolderLocation(NULL, CSIDL_FAVORITES, &pidl);
- ok(hr == E_FAIL || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
- "SHGetFolderLocation returned 0x%08x\n", hr);
- if (hr == S_OK && pidl)
- IMalloc_Free(pMalloc, pidl);
- /* now test success: */
- hr = pSHGetFolderPathA(NULL, CSIDL_FAVORITES | CSIDL_FLAG_CREATE, NULL,
- SHGFP_TYPE_CURRENT, path);
- if (hr == S_OK)
+ if (arg[0] == '1')
{
- BOOL ret;
+ LPITEMIDLIST pidl;
+ char *p;
- trace("CSIDL_FAVORITES was changed to %s\n", path);
- ret = CreateDirectoryA(path, NULL);
- ok(!ret,
- "CreateDirectoryA succeeded but should have failed "
- "with ERROR_ALREADY_EXISTS\n");
- if (!ret)
- ok(GetLastError() == ERROR_ALREADY_EXISTS,
- "CreateDirectoryA failed with %d, "
- "expected ERROR_ALREADY_EXISTS\n",
- GetLastError());
- p = path + strlen(path);
- strcpy(p, "\\desktop.ini");
- DeleteFileA(path);
- *p = 0;
- SetFileAttributesA( path, FILE_ATTRIBUTE_NORMAL );
- ret = RemoveDirectoryA(path);
- ok( ret, "failed to remove %s error %u\n", path, GetLastError() );
- }
- ok(hr == S_OK,
- "SHGetFolderPath(NULL, CSIDL_FAVORITES | CSIDL_FLAG_CREATE, "
- "NULL, SHGFP_TYPE_CURRENT, path) failed: 0x%08x\n", hr);
-}
+ /* test what happens when CSIDL_FAVORITES is set to a nonexistent directory */
-/* Subprocess helper 2: make sure SHGetFolderPath still succeeds when the
- * original value of CSIDL_FAVORITES is restored.
- */
-static void testNonExistentPath2(void)
-{
- HRESULT hr;
- char path[MAX_PATH];
+ /* test some failure cases first: */
+ hr = pSHGetFolderPathA(NULL, CSIDL_FAVORITES, NULL, SHGFP_TYPE_CURRENT, path);
+ ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
+ "SHGetFolderPath returned 0x%08x, expected 0x80070002\n", hr);
- hr = pSHGetFolderPathA(NULL, CSIDL_FAVORITES | CSIDL_FLAG_CREATE, NULL,
- SHGFP_TYPE_CURRENT, path);
- ok(hr == S_OK, "SHGetFolderPath failed: 0x%08x\n", hr);
-}
+ pidl = NULL;
+ hr = pSHGetFolderLocation(NULL, CSIDL_FAVORITES, NULL, 0, &pidl);
+ ok(hr == E_FAIL || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
+ "SHGetFolderLocation returned 0x%08x\n", hr);
+ if (hr == S_OK && pidl) IMalloc_Free(pMalloc, pidl);
-static void doChild(const char *arg)
-{
- if (arg[0] == '1')
- testNonExistentPath1();
+ ok(!pSHGetSpecialFolderPathA(NULL, path, CSIDL_FAVORITES, FALSE),
+ "SHGetSpecialFolderPath succeeded, expected failure\n");
+
+ pidl = NULL;
+ hr = pSHGetSpecialFolderLocation(NULL, CSIDL_FAVORITES, &pidl);
+ ok(hr == E_FAIL || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
+ "SHGetFolderLocation returned 0x%08x\n", hr);
+
+ if (hr == S_OK && pidl) IMalloc_Free(pMalloc, pidl);
+
+ /* now test success: */
+ hr = pSHGetFolderPathA(NULL, CSIDL_FAVORITES | CSIDL_FLAG_CREATE, NULL,
+ SHGFP_TYPE_CURRENT, path);
+ ok (hr == S_OK, "got 0x%08x\n", hr);
+ if (hr == S_OK)
+ {
+ BOOL ret;
+
+ trace("CSIDL_FAVORITES was changed to %s\n", path);
+ ret = CreateDirectoryA(path, NULL);
+ ok(!ret, "expected failure with with ERROR_ALREADY_EXISTS\n");
+ if (!ret)
+ ok(GetLastError() == ERROR_ALREADY_EXISTS,
+ "got %d, expected ERROR_ALREADY_EXISTS\n", GetLastError());
+
+ p = path + strlen(path);
+ strcpy(p, "\\desktop.ini");
+ DeleteFileA(path);
+ *p = 0;
+ SetFileAttributesA( path, FILE_ATTRIBUTE_NORMAL );
+ ret = RemoveDirectoryA(path);
+ ok( ret, "failed to remove %s error %u\n", path, GetLastError() );
+ }
+ }
else if (arg[0] == '2')
- testNonExistentPath2();
+ {
+ /* make sure SHGetFolderPath still succeeds when the
+ original value of CSIDL_FAVORITES is restored. */
+ hr = pSHGetFolderPathA(NULL, CSIDL_FAVORITES | CSIDL_FLAG_CREATE, NULL,
+ SHGFP_TYPE_CURRENT, path);
+ ok(hr == S_OK, "SHGetFolderPath failed: 0x%08x\n", hr);
+ }
}
/* Tests the return values from the various shell functions both with and
@@ -808,7 +764,7 @@ static void doChild(const char *arg)
* covered by other unit tests; I just print out something about failure to
* help trace what's going on.
*/
-static void testNonExistentPath(void)
+static void test_NonExistentPath(void)
{
static const char userShellFolders[] =
"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders";
@@ -884,7 +840,6 @@ START_TEST(shellpath)
loadShell32();
pGetSystemWow64DirectoryA = (void *)GetProcAddress( GetModuleHandleA("kernel32.dll"),
"GetSystemWow64DirectoryA" );
-
if (myARGC >= 3)
doChild(myARGV[2]);
else
@@ -894,14 +849,14 @@ START_TEST(shellpath)
win_skip("SHGetFolderLocation is not available\n");
/* first test various combinations of parameters: */
- testApiParameters();
+ test_parameters();
/* check known values: */
- testPidlTypes();
- testGUIDs();
- testEnvVars();
+ test_PidlTypes();
+ test_GUIDs();
+ test_EnvVars();
testWinDir();
testSystemDir();
- testNonExistentPath();
+ test_NonExistentPath();
}
}
--
1.5.6.5
--=-W6uGcNtJeY9PNTQ0JZ/Z--
More information about the wine-patches
mailing list