Commit 2d76bf2e authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

shlwapi/tests: Some tests for PathGetDriveNumber.

parent f8a89aa0
...@@ -28,12 +28,12 @@ ...@@ -28,12 +28,12 @@
#include "shlwapi.h" #include "shlwapi.h"
#include "wininet.h" #include "wininet.h"
static HMODULE hShlwapi;
static HRESULT (WINAPI *pPathIsValidCharA)(char,DWORD); static HRESULT (WINAPI *pPathIsValidCharA)(char,DWORD);
static HRESULT (WINAPI *pPathIsValidCharW)(WCHAR,DWORD); static HRESULT (WINAPI *pPathIsValidCharW)(WCHAR,DWORD);
static LPWSTR (WINAPI *pPathCombineW)(LPWSTR, LPCWSTR, LPCWSTR); static LPWSTR (WINAPI *pPathCombineW)(LPWSTR, LPCWSTR, LPCWSTR);
static HRESULT (WINAPI *pPathCreateFromUrlA)(LPCSTR, LPSTR, LPDWORD, DWORD); static HRESULT (WINAPI *pPathCreateFromUrlA)(LPCSTR, LPSTR, LPDWORD, DWORD);
static HRESULT (WINAPI *pPathCreateFromUrlW)(LPCWSTR, LPWSTR, LPDWORD, DWORD); static HRESULT (WINAPI *pPathCreateFromUrlW)(LPCWSTR, LPWSTR, LPDWORD, DWORD);
static BOOL (WINAPI *pPathAppendA)(LPSTR, LPCSTR);
/* ################ */ /* ################ */
...@@ -300,6 +300,15 @@ static void test_PathIsValidCharA(void) ...@@ -300,6 +300,15 @@ static void test_PathIsValidCharA(void)
BOOL ret; BOOL ret;
unsigned int c; unsigned int c;
/* For whatever reason, PathIsValidCharA and PathAppendA share the same
* ordinal number in some native versions. Check this to prevent a crash.
*/
if (!pPathIsValidCharA || pPathIsValidCharA == (void*)pPathAppendA)
{
win_skip("PathIsValidCharA isn't available\n");
return;
}
for (c = 0; c < 0x7f; c++) for (c = 0; c < 0x7f; c++)
{ {
ret = pPathIsValidCharA( c, ~0U ); ret = pPathIsValidCharA( c, ~0U );
...@@ -318,6 +327,12 @@ static void test_PathIsValidCharW(void) ...@@ -318,6 +327,12 @@ static void test_PathIsValidCharW(void)
BOOL ret; BOOL ret;
unsigned int c; unsigned int c;
if (!pPathIsValidCharW)
{
win_skip("PathIsValidCharW isn't available\n");
return;
}
for (c = 0; c < 0x7f; c++) for (c = 0; c < 0x7f; c++)
{ {
ret = pPathIsValidCharW( c, ~0U ); ret = pPathIsValidCharW( c, ~0U );
...@@ -392,7 +407,13 @@ static void test_PathCombineW(void) ...@@ -392,7 +407,13 @@ static void test_PathCombineW(void)
WCHAR wbuf[MAX_PATH+1], wstr1[MAX_PATH] = {'C',':','\\',0}, wstr2[MAX_PATH]; WCHAR wbuf[MAX_PATH+1], wstr1[MAX_PATH] = {'C',':','\\',0}, wstr2[MAX_PATH];
static const WCHAR expout[] = {'C',':','\\','A','A',0}; static const WCHAR expout[] = {'C',':','\\','A','A',0};
int i; int i;
if (!pPathCombineW)
{
win_skip("PathCombineW isn't available\n");
return;
}
wszString2 = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); wszString2 = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
/* NULL test */ /* NULL test */
...@@ -1312,43 +1333,60 @@ static void test_PathUnquoteSpaces(void) ...@@ -1312,43 +1333,60 @@ static void test_PathUnquoteSpaces(void)
} }
} }
static void test_PathGetDriveNumber(void)
{
static const CHAR test1A[] = "a:\\test.file";
static const CHAR test2A[] = "file:////b:\\test.file";
static const CHAR test3A[] = "file:///c:\\test.file";
static const CHAR test4A[] = "file:\\\\c:\\test.file";
int ret;
SetLastError(0xdeadbeef);
ret = PathGetDriveNumberA(NULL);
ok(ret == -1, "got %d\n", ret);
ok(GetLastError() == 0xdeadbeef, "got %d\n", GetLastError());
ret = PathGetDriveNumberA(test1A);
ok(ret == 0, "got %d\n", ret);
ret = PathGetDriveNumberA(test2A);
ok(ret == -1, "got %d\n", ret);
ret = PathGetDriveNumberA(test3A);
ok(ret == -1, "got %d\n", ret);
ret = PathGetDriveNumberA(test4A);
ok(ret == -1, "got %d\n", ret);
}
/* ################ */ /* ################ */
START_TEST(path) START_TEST(path)
{ {
hShlwapi = GetModuleHandleA("shlwapi.dll"); HMODULE hShlwapi = GetModuleHandleA("shlwapi.dll");
pPathCreateFromUrlA = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlA");
pPathCreateFromUrlW = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlW");
test_PathSearchAndQualify();
test_PathCreateFromUrl();
test_PathIsUrl();
test_PathAddBackslash();
test_PathMakePretty();
test_PathMatchSpec();
/* For whatever reason, PathIsValidCharA and PathAppendA share the same
* ordinal number in some native versions. Check this to prevent a crash.
*/
pPathIsValidCharA = (void*)GetProcAddress(hShlwapi, (LPSTR)455);
if (pPathIsValidCharA && pPathIsValidCharA != (void*)GetProcAddress(hShlwapi, "PathAppendA"))
{
test_PathIsValidCharA();
pPathIsValidCharW = (void*)GetProcAddress(hShlwapi, (LPSTR)456); pPathCreateFromUrlA = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlA");
if (pPathIsValidCharW) test_PathIsValidCharW(); pPathCreateFromUrlW = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlW");
} pPathCombineW = (void*)GetProcAddress(hShlwapi, "PathCombineW");
pPathIsValidCharA = (void*)GetProcAddress(hShlwapi, (LPSTR)455);
pPathIsValidCharW = (void*)GetProcAddress(hShlwapi, (LPSTR)456);
pPathAppendA = (void*)GetProcAddress(hShlwapi, "PathAppendA");
pPathCombineW = (void*)GetProcAddress(hShlwapi, "PathCombineW"); test_PathSearchAndQualify();
if (pPathCombineW) test_PathCreateFromUrl();
test_PathCombineW(); test_PathIsUrl();
test_PathAddBackslash();
test_PathMakePretty();
test_PathMatchSpec();
test_PathCombineA(); test_PathIsValidCharA();
test_PathAppendA(); test_PathIsValidCharW();
test_PathCanonicalizeA();
test_PathFindExtensionA(); test_PathCombineW();
test_PathBuildRootA(); test_PathCombineA();
test_PathCommonPrefixA(); test_PathAppendA();
test_PathUnquoteSpaces(); test_PathCanonicalizeA();
test_PathFindExtensionA();
test_PathBuildRootA();
test_PathCommonPrefixA();
test_PathUnquoteSpaces();
test_PathGetDriveNumber();
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment