diff --git a/modules/rostests/apitests/shlwapi/CMakeLists.txt b/modules/rostests/apitests/shlwapi/CMakeLists.txt index da4c6a808f..a7d4e05d4f 100644 --- a/modules/rostests/apitests/shlwapi/CMakeLists.txt +++ b/modules/rostests/apitests/shlwapi/CMakeLists.txt @@ -5,6 +5,7 @@ list(APPEND SOURCE PathIsUNCServer.c PathIsUNCServerShare.c PathUnExpandEnvStrings.c + PathUnExpandEnvStringsForUser.c SHAreIconsEqual.c StrFormatByteSizeW.c testdata.rc diff --git a/modules/rostests/apitests/shlwapi/PathUnExpandEnvStringsForUser.c b/modules/rostests/apitests/shlwapi/PathUnExpandEnvStringsForUser.c new file mode 100644 index 0000000000..ebfd4a4c2d --- /dev/null +++ b/modules/rostests/apitests/shlwapi/PathUnExpandEnvStringsForUser.c @@ -0,0 +1,122 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory + * PURPOSE: Tests for PathUnExpandEnvStringsForUser + * PROGRAMMERS: Katayama Hirofumi MZ + */ + +#include +#include +#include + +#define DO_TEST(Res, hToken, TestStr, ExpStr, Len) \ +do { \ + BOOL ret = PathUnExpandEnvStringsForUserW((hToken), (TestStr), OutStr, Len); \ + ok(ret == (Res), "Tested %s, expected returned value %d, got %d\n", \ + wine_dbgstr_w((TestStr)), (Res), ret); \ + if (ret) \ + ok(_wcsicmp(OutStr, (ExpStr)) == 0, "Tested %s, expected %s, got %s\n", \ + wine_dbgstr_w((TestStr)), wine_dbgstr_w((ExpStr)), wine_dbgstr_w(OutStr)); \ +} while (0) + +// PathUnExpandEnvStringsForUserW +typedef BOOL (WINAPI *PATHUNEXPANDENVSTRINGSFORUSERW)(HANDLE hToken, LPCWSTR pszPath, LPWSTR pszUnExpanded, INT cchUnExpanded); +PATHUNEXPANDENVSTRINGSFORUSERW pPathUnExpandEnvStringsForUserW = NULL; + +START_TEST(PathUnExpandEnvStringsForUser) +{ + DWORD ret; + WCHAR OutStr[MAX_PATH], TestStr[MAX_PATH]; + HINSTANCE hShlwapi; + + hShlwapi = LoadLibraryA("shlwapi"); + if (hShlwapi == NULL) + { + skip("shlwapi.dll was not loaded\n"); + return; + } + + pPathUnExpandEnvStringsForUserW = + (PATHUNEXPANDENVSTRINGSFORUSERW)GetProcAddress(hShlwapi, "PathUnExpandEnvStringsForUserW"); + + if (pPathUnExpandEnvStringsForUserW == NULL) + { + printf("PathUnExpandEnvStringsForUserW is not public\n"); + pPathUnExpandEnvStringsForUserW = + (PATHUNEXPANDENVSTRINGSFORUSERW)GetProcAddress(hShlwapi, (LPCSTR)(LONG_PTR)466); + } + if (pPathUnExpandEnvStringsForUserW == NULL) + { + skip("PathUnExpandEnvStringsForUserW was not found\n"); + FreeLibrary(hShlwapi); + return; + } + +#define PathUnExpandEnvStringsForUserW (*pPathUnExpandEnvStringsForUserW) + + /* empty string */ + DO_TEST(FALSE, NULL, L"", L"", 0); + DO_TEST(FALSE, NULL, L"", L"", -1); + DO_TEST(FALSE, NULL, L"", L"", 2); + DO_TEST(FALSE, NULL, L"", L"", MAX_PATH); + + /* No unexpansion possible */ + DO_TEST(FALSE, NULL, L"ZZ:\\foobar\\directory", L"", 0); + DO_TEST(FALSE, NULL, L"ZZ:\\foobar\\directory", L"", -1); + DO_TEST(FALSE, NULL, L"ZZ:\\foobar\\directory", L"", 2); + DO_TEST(FALSE, NULL, L"ZZ:\\foobar\\directory", L"", MAX_PATH); + + /* %APPDATA% */ + ret = GetEnvironmentVariableW(L"APPDATA", TestStr, _countof(TestStr)); + ok(ret, "got %lu\n", ret); + DO_TEST(FALSE, NULL, TestStr, L"%APPDATA%", 0); + DO_TEST(FALSE, NULL, TestStr, L"%APPDATA%", -1); + DO_TEST(FALSE, NULL, TestStr, L"%APPDATA%", 2); + DO_TEST(TRUE, NULL, TestStr, L"%APPDATA%", MAX_PATH); + lstrcatW(TestStr, L"\\TEST"); + DO_TEST(FALSE, NULL, TestStr, L"%APPDATA%\\TEST", 0); + DO_TEST(FALSE, NULL, TestStr, L"%APPDATA%\\TEST", -1); + DO_TEST(FALSE, NULL, TestStr, L"%APPDATA%\\TEST", 2); + DO_TEST(TRUE, NULL, TestStr, L"%APPDATA%\\TEST", MAX_PATH); + + /* %USERPROFILE% */ + ret = GetEnvironmentVariableW(L"USERPROFILE", TestStr, _countof(TestStr)); + ok(ret, "got %lu\n", ret); + DO_TEST(FALSE, NULL, TestStr, L"%USERPROFILE%", 0); + DO_TEST(FALSE, NULL, TestStr, L"%USERPROFILE%", -1); + DO_TEST(FALSE, NULL, TestStr, L"%USERPROFILE%", 2); + DO_TEST(TRUE, NULL, TestStr, L"%USERPROFILE%", MAX_PATH); + lstrcatW(TestStr, L"\\TEST"); + DO_TEST(FALSE, NULL, TestStr, L"%USERPROFILE%\\TEST", 0); + DO_TEST(FALSE, NULL, TestStr, L"%USERPROFILE%\\TEST", -1); + DO_TEST(FALSE, NULL, TestStr, L"%USERPROFILE%\\TEST", 2); + DO_TEST(TRUE, NULL, TestStr, L"%USERPROFILE%\\TEST", MAX_PATH); + + /* %ALLUSERSPROFILE% */ + ret = GetEnvironmentVariableW(L"ALLUSERSPROFILE", TestStr, _countof(TestStr)); + ok(ret, "got %lu\n", ret); + DO_TEST(FALSE, NULL, TestStr, L"%ALLUSERSPROFILE%", 0); + DO_TEST(FALSE, NULL, TestStr, L"%ALLUSERSPROFILE%", -1); + DO_TEST(FALSE, NULL, TestStr, L"%ALLUSERSPROFILE%", 2); + DO_TEST(TRUE, NULL, TestStr, L"%ALLUSERSPROFILE%", MAX_PATH); + lstrcatW(TestStr, L"\\TEST"); + DO_TEST(FALSE, NULL, TestStr, L"%ALLUSERSPROFILE%\\TEST", 0); + DO_TEST(FALSE, NULL, TestStr, L"%ALLUSERSPROFILE%\\TEST", -1); + DO_TEST(FALSE, NULL, TestStr, L"%ALLUSERSPROFILE%\\TEST", 2); + DO_TEST(TRUE, NULL, TestStr, L"%ALLUSERSPROFILE%\\TEST", MAX_PATH); + + /* %ProgramFiles% */ + ret = GetEnvironmentVariableW(L"ProgramFiles", TestStr, _countof(TestStr)); + ok(ret, "got %lu\n", ret); + DO_TEST(FALSE, NULL, TestStr, L"%ProgramFiles%", 0); + DO_TEST(FALSE, NULL, TestStr, L"%ProgramFiles%", -1); + DO_TEST(FALSE, NULL, TestStr, L"%ProgramFiles%", 2); + DO_TEST(TRUE, NULL, TestStr, L"%ProgramFiles%", MAX_PATH); + lstrcatW(TestStr, L"\\TEST"); + DO_TEST(FALSE, NULL, TestStr, L"%ProgramFiles%\\TEST", 0); + DO_TEST(FALSE, NULL, TestStr, L"%ProgramFiles%\\TEST", -1); + DO_TEST(FALSE, NULL, TestStr, L"%ProgramFiles%\\TEST", 2); + DO_TEST(TRUE, NULL, TestStr, L"%ProgramFiles%\\TEST", MAX_PATH); + + FreeLibrary(hShlwapi); +} diff --git a/modules/rostests/apitests/shlwapi/testlist.c b/modules/rostests/apitests/shlwapi/testlist.c index 793385e1a2..1ad20a3bf8 100644 --- a/modules/rostests/apitests/shlwapi/testlist.c +++ b/modules/rostests/apitests/shlwapi/testlist.c @@ -6,6 +6,7 @@ extern void func_isuncpath(void); extern void func_isuncpathserver(void); extern void func_isuncpathservershare(void); extern void func_PathUnExpandEnvStrings(void); +extern void func_PathUnExpandEnvStringsForUser(void); extern void func_SHAreIconsEqual(void); extern void func_StrFormatByteSizeW(void); @@ -16,6 +17,7 @@ const struct test winetest_testlist[] = { "PathIsUNCServer", func_isuncpathserver }, { "PathIsUNCServerShare", func_isuncpathservershare }, { "PathUnExpandEnvStrings", func_PathUnExpandEnvStrings }, + { "PathUnExpandEnvStringsForUser", func_PathUnExpandEnvStringsForUser }, { "SHAreIconsEqual", func_SHAreIconsEqual }, { "StrFormatByteSizeW", func_StrFormatByteSizeW }, { 0, 0 }