[PATCH 4/4] shell32/tests: Test drive letters parsing for My Computer
Gabriel Ivăncescu
gabrielopcode at gmail.com
Wed Aug 21 06:32:42 CDT 2019
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/shell32/tests/shfldr_special.c | 69 +++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/dlls/shell32/tests/shfldr_special.c b/dlls/shell32/tests/shfldr_special.c
index b73759e..69b7ab7 100644
--- a/dlls/shell32/tests/shfldr_special.c
+++ b/dlls/shell32/tests/shfldr_special.c
@@ -39,6 +39,74 @@ static inline BOOL SHELL_OsIsUnicode(void)
return !(GetVersion() & 0x80000000);
}
+/* Tests for My Computer */
+static void test_parse_for_my_computer(void)
+{
+ WCHAR path[] = { '\\','\\','?','\\','C',':','\\',0 };
+ WCHAR *drive = path + 4;
+ IShellFolder *mycomp, *sf;
+ ITEMIDLIST *pidl;
+ DWORD eaten;
+ HRESULT hr;
+
+ hr = SHGetDesktopFolder(&sf);
+ ok(hr == S_OK, "SHGetDesktopFolder failed with error 0x%08x\n", hr);
+ if (hr != S_OK) return;
+ hr = SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &pidl);
+ ok(hr == S_OK, "SHGetSpecialFolderLocation failed with error 0x%08x\n", hr);
+ if (hr != S_OK)
+ {
+ IShellFolder_Release(sf);
+ return;
+ }
+ hr = IShellFolder_BindToObject(sf, pidl, NULL, &IID_IShellFolder, (void**)&mycomp);
+ ok(hr == S_OK, "IShellFolder::BindToObject failed with error 0x%08x\n", hr);
+ IShellFolder_Release(sf);
+ ILFree(pidl);
+ if (hr != S_OK) return;
+
+ while (drive[0] <= 'Z' && GetDriveTypeW(drive) == DRIVE_NO_ROOT_DIR) drive[0]++;
+ if (drive[0] > 'Z')
+ {
+ skip("No drive found, skipping My Computer tests...\n");
+ goto done;
+ }
+
+ pidl = NULL;
+ eaten = 0xdeadbeef;
+ hr = IShellFolder_ParseDisplayName(mycomp, NULL, NULL, drive, &eaten, &pidl, NULL);
+ ok(hr == S_OK, "IShellFolder::ParseDisplayName failed with error 0x%08x\n", hr);
+todo_wine
+ ok(eaten == 0xdeadbeef, "eaten should not have been set to %u\n", eaten);
+ ok(pidl != NULL, "pidl is NULL\n");
+ ILFree(pidl);
+
+ /* \\?\ prefix is not valid */
+ pidl = NULL;
+ eaten = 0xdeadbeef;
+ hr = IShellFolder_ParseDisplayName(mycomp, NULL, NULL, path, &eaten, &pidl, NULL);
+ ok(hr == E_INVALIDARG, "IShellFolder::ParseDisplayName should have failed with E_INVALIDARG, got 0x%08x\n", hr);
+todo_wine
+ ok(eaten == 0xdeadbeef, "eaten should not have been set to %u\n", eaten);
+ ok(pidl == NULL, "pidl is not NULL\n");
+ ILFree(pidl);
+
+ /* Try without backslash */
+ drive[2] = '\0';
+ pidl = NULL;
+ eaten = 0xdeadbeef;
+ hr = IShellFolder_ParseDisplayName(mycomp, NULL, NULL, drive, &eaten, &pidl, NULL);
+ ok(hr == S_OK || broken(hr == E_INVALIDARG) /* WinXP */,
+ "IShellFolder::ParseDisplayName failed with error 0x%08x\n", hr);
+todo_wine
+ ok(eaten == 0xdeadbeef, "eaten should not have been set to %u\n", eaten);
+ ok(pidl != NULL || broken(!pidl) /* WinXP */, "pidl is NULL\n");
+ ILFree(pidl);
+
+done:
+ IShellFolder_Release(mycomp);
+}
+
/* Tests for My Network Places */
static void test_parse_for_entire_network(void)
{
@@ -294,6 +362,7 @@ static void test_desktop_displaynameof(void)
START_TEST(shfldr_special)
{
+ test_parse_for_my_computer();
test_parse_for_entire_network();
test_parse_for_control_panel();
test_printers_folder();
--
2.21.0
More information about the wine-devel
mailing list