Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
5c715b46
Commit
5c715b46
authored
Jul 10, 2010
by
Michael Mc Donnell
Committed by
Alexandre Julliard
Jul 20, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
shell32/tests: Test that clicking "Make New Folder" makes a new folder.
parent
14db6a80
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
190 additions
and
0 deletions
+190
-0
Makefile.in
dlls/shell32/tests/Makefile.in
+1
-0
brsfolder.c
dlls/shell32/tests/brsfolder.c
+189
-0
No files found.
dlls/shell32/tests/Makefile.in
View file @
5c715b46
...
...
@@ -8,6 +8,7 @@ IMPORTS = shell32 ole32 oleaut32 user32 advapi32 kernel32
C_SRCS
=
\
appbar.c
\
autocomplete.c
\
brsfolder.c
\
generated.c
\
progman_dde.c
\
shelllink.c
\
...
...
dlls/shell32/tests/brsfolder.c
0 → 100644
View file @
5c715b46
/*
* Unit test of the SHBrowseForFolder function.
*
* Copyright 2009 Michael Mc Donnell
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <windows.h>
#include <shlobj.h>
#include <shobjidl.h>
#include <string.h>
#include "wine/test.h"
#define IDD_MAKENEWFOLDER 0x3746
/* From "../shresdef.h" */
/*
* Returns the number of folders in a folder.
*/
static
int
get_number_of_folders
(
LPCSTR
path
)
{
int
number_of_folders
=
0
;
char
path_search_string
[
MAX_PATH
];
WIN32_FIND_DATA
find_data
;
HANDLE
find_handle
;
strncpy
(
path_search_string
,
path
,
MAX_PATH
);
strncat
(
path_search_string
,
"*"
,
1
);
find_handle
=
FindFirstFile
(
path_search_string
,
&
find_data
);
if
(
find_handle
==
INVALID_HANDLE_VALUE
)
return
-
1
;
do
{
if
((
find_data
.
dwFileAttributes
&
FILE_ATTRIBUTE_DIRECTORY
)
&&
strcmp
(
find_data
.
cFileName
,
"."
)
!=
0
&&
strcmp
(
find_data
.
cFileName
,
".."
)
!=
0
)
{
number_of_folders
++
;
}
}
while
(
FindNextFile
(
find_handle
,
&
find_data
)
!=
0
);
return
number_of_folders
;
}
static
BOOL
does_folder_or_file_exist
(
LPCSTR
folder_path
)
{
DWORD
file_attributes
=
GetFileAttributesA
(
folder_path
);
return
!
(
file_attributes
==
INVALID_FILE_ATTRIBUTES
);
}
/*
* Callback used by test_click_make_new_folder_button for SHBrowseForFolder
* dialog box. It clicks the "Make New Folder" button and then closes the dialog
* box.
*/
static
int
CALLBACK
create_new_folder_callback
(
HWND
hwnd
,
UINT
uMsg
,
LPARAM
lParam
,
LPARAM
lpData
)
{
switch
(
uMsg
)
{
case
BFFM_INITIALIZED
:
/* Click "Make New Folder" button */
SendMessage
(
hwnd
,
WM_COMMAND
,
IDD_MAKENEWFOLDER
,
0
);
/* Close dialog box */
SendMessage
(
hwnd
,
WM_COMMAND
,
IDCANCEL
,
0
);
return
TRUE
;
default:
return
FALSE
;
}
}
/*
* Tests if clicking the "Make New Folder" button in a SHBrowseForFolder
* dialog box creates a new folder. (Bug 17986).
*
* The algorithm is:
* 1. Check that there is no "test_click_make_new_folder_button" folder.
* 2. Create a test folder called "test_click_make_new_folder_button".
* 3. Use the test folder as root for SHBrowseForFolder dialog box.
* 3. Hook up SHBrowseForFolder dialog box with callback.
* 4. Display SHBrowseForFolder dialog box.
* 5. Callback clicks "Make New Folder" button (by sending a message).
* 6. Callback closes SHBrowseForFolder dialog box.
* 7. Check that there is a new folder inside the test folder.
* 8. Remove the test folder and any subfolders.
*/
static
void
test_click_make_new_folder_button
(
void
)
{
HRESULT
resCoInit
;
BROWSEINFO
bi
;
LPITEMIDLIST
pidl
=
NULL
;
LPITEMIDLIST
test_folder_pidl
;
IShellFolder
*
test_folder_object
;
char
test_folder_path
[
MAX_PATH
];
WCHAR
test_folder_pathW
[
MAX_PATH
];
char
selected_folder
[
MAX_PATH
];
const
CHAR
title
[]
=
"test_click_make_new_folder_button"
;
int
number_of_folders
=
-
1
;
SHFILEOPSTRUCT
shfileop
;
if
(
does_folder_or_file_exist
(
title
))
{
skip
(
"The test folder already exists.
\n
"
);
return
;
}
/* Must initialize COM if using the NEWDIAlOGSTYLE according to MSDN. */
resCoInit
=
CoInitialize
(
NULL
);
if
(
!
(
resCoInit
==
S_OK
||
resCoInit
==
S_FALSE
))
{
skip
(
"COM could not be initialized %u
\n
"
,
GetLastError
());
return
;
}
/* Leave room for concatenating title, two backslashes, and an extra NULL. */
if
(
!
GetCurrentDirectoryA
(
MAX_PATH
-
strlen
(
title
)
-
3
,
test_folder_path
))
{
skip
(
"GetCurrentDirectoryA failed %u
\n
"
,
GetLastError
());
}
strncat
(
test_folder_path
,
"
\\
"
,
1
);
strncat
(
test_folder_path
,
title
,
MAX_PATH
-
1
);
strncat
(
test_folder_path
,
"
\\
"
,
1
);
/* Avoid conflicts by creating a test folder. */
if
(
!
CreateDirectoryA
(
title
,
NULL
))
{
skip
(
"CreateDirectoryA failed %u
\n
"
,
GetLastError
());
return
;
}
/* Initialize browse info struct for SHBrowseForFolder */
bi
.
hwndOwner
=
NULL
;
bi
.
pszDisplayName
=
(
LPTSTR
)
&
selected_folder
;
bi
.
lpszTitle
=
(
LPTSTR
)
title
;
bi
.
ulFlags
=
BIF_NEWDIALOGSTYLE
;
bi
.
lpfn
=
create_new_folder_callback
;
/* Use test folder as the root folder for dialog box */
MultiByteToWideChar
(
CP_UTF8
,
0
,
test_folder_path
,
MAX_PATH
,
test_folder_pathW
,
MAX_PATH
*
sizeof
(
WCHAR
));
SHGetDesktopFolder
(
&
test_folder_object
);
test_folder_object
->
lpVtbl
->
ParseDisplayName
(
test_folder_object
,
NULL
,
NULL
,
test_folder_pathW
,
0UL
,
&
test_folder_pidl
,
0UL
);
bi
.
pidlRoot
=
test_folder_pidl
;
/* Display dialog box and let callback click the buttons */
pidl
=
SHBrowseForFolder
(
&
bi
);
number_of_folders
=
get_number_of_folders
(
test_folder_path
);
todo_wine
ok
(
number_of_folders
==
1
||
broken
(
number_of_folders
==
0
)
/* W98, W2K */
,
"Clicking
\"
Make New Folder
\"
button did not result in a new folder.
\n
"
);
/* Remove test folder and any subfolders created in this test */
shfileop
.
hwnd
=
NULL
;
shfileop
.
wFunc
=
FO_DELETE
;
/* Path must be double NULL terminated */
test_folder_path
[
strlen
(
test_folder_path
)
+
1
]
=
'\0'
;
shfileop
.
pFrom
=
test_folder_path
;
shfileop
.
pTo
=
NULL
;
shfileop
.
fFlags
=
FOF_NOCONFIRMATION
|
FOF_NOERRORUI
|
FOF_SILENT
;
SHFileOperation
(
&
shfileop
);
if
(
pidl
)
CoTaskMemFree
(
pidl
);
if
(
test_folder_pidl
)
CoTaskMemFree
(
test_folder_pidl
);
if
(
test_folder_object
)
test_folder_object
->
lpVtbl
->
Release
(
test_folder_object
);
CoUninitialize
();
}
START_TEST
(
brsfolder
)
{
test_click_make_new_folder_button
();
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment