From: Joachim Priesner Subject: kernel32/tests: Add tests for GetDriveType with invalid drive spec Message-Id: <201511262349.40495.joachim.priesner@web.de> Date: Thu, 26 Nov 2015 23:49:39 +0100 Signed-off-by: Joachim Priesner --- dlls/kernel32/tests/drive.c | 59 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/dlls/kernel32/tests/drive.c b/dlls/kernel32/tests/drive.c index 4acd3e8..98dc454 100644 --- a/dlls/kernel32/tests/drive.c +++ b/dlls/kernel32/tests/drive.c @@ -30,6 +30,7 @@ static DWORD (WINAPI *pGetDiskFreeSpaceExA)(LPCSTR, PULARGE_INTEGER, PULARGE_INT static void test_GetDriveTypeA(void) { char drive[] = "?:\\"; + char existing_drive_letter = 0; DWORD logical_drives; UINT type; @@ -46,14 +47,43 @@ static void test_GetDriveTypeA(void) ok(type == DRIVE_NO_ROOT_DIR, "GetDriveTypeA should return DRIVE_NO_ROOT_DIR for inexistent drive %c: but not %u\n", drive[0], type); + else if (type != DRIVE_NO_ROOT_DIR) + existing_drive_letter = drive[0]; logical_drives >>= 1; } + + if (!existing_drive_letter) { + skip("No drives found, skipping drive spec format tests.\n"); + return; + } + + drive[0] = existing_drive_letter; + drive[2] = 0; /* C: */ + type = GetDriveTypeA(drive); + ok(type > DRIVE_NO_ROOT_DIR && type <= DRIVE_RAMDISK, "got %u for drive spec '%s'\n", type, drive); + + drive[1] = '?'; /* C? */ + type = GetDriveTypeA(drive); + ok(type == DRIVE_NO_ROOT_DIR, "got %u for drive spec '%s'\n", type, drive); + + drive[1] = 0; /* C */ + type = GetDriveTypeA(drive); + ok(type == DRIVE_NO_ROOT_DIR, "got %u for drive spec '%s'\n", type, drive); + + drive[0] = '?'; /* the string "?" */ + type = GetDriveTypeA(drive); + ok(type == DRIVE_NO_ROOT_DIR, "got %u for drive spec '%s'\n", type, drive); + + drive[0] = 0; /* the empty string */ + type = GetDriveTypeA(drive); + ok(type == DRIVE_NO_ROOT_DIR, "got %u for drive spec '%s'\n", type, drive); } static void test_GetDriveTypeW(void) { WCHAR drive[] = {'?',':','\\',0}; + WCHAR existing_drive_letter = 0; DWORD logical_drives; UINT type; @@ -70,9 +100,38 @@ static void test_GetDriveTypeW(void) ok(type == DRIVE_NO_ROOT_DIR, "GetDriveTypeW should return DRIVE_NO_ROOT_DIR for inexistent drive %c: but not %u\n", drive[0], type); + else if (type != DRIVE_NO_ROOT_DIR) + existing_drive_letter = drive[0]; logical_drives >>= 1; } + + if (!existing_drive_letter) { + skip("No drives found, skipping drive spec format tests.\n"); + return; + } + + drive[0] = existing_drive_letter; + drive[2] = 0; /* C: */ + type = GetDriveTypeW(drive); + ok(type > DRIVE_NO_ROOT_DIR && type <= DRIVE_RAMDISK, "got %u for drive spec '%s'\n", + type, wine_dbgstr_w(drive)); + + drive[1] = '?'; /* C? */ + type = GetDriveTypeW(drive); + ok(type == DRIVE_NO_ROOT_DIR, "got %u for drive spec '%s'\n", type, wine_dbgstr_w(drive)); + + drive[1] = 0; /* C */ + type = GetDriveTypeW(drive); + ok(type == DRIVE_NO_ROOT_DIR, "got %u for drive spec '%s'\n", type, wine_dbgstr_w(drive)); + + drive[0] = '?'; /* the string "?" */ + type = GetDriveTypeW(drive); + ok(type == DRIVE_NO_ROOT_DIR, "got %u for drive spec '%s'\n", type, wine_dbgstr_w(drive)); + + drive[0] = 0; /* the empty string */ + type = GetDriveTypeW(drive); + ok(type == DRIVE_NO_ROOT_DIR, "got %u for drive spec '%s'\n", type, wine_dbgstr_w(drive)); } static void test_GetDiskFreeSpaceA(void) -- 2.1.4