/* * Unit test suite for virtual substituted drive functions. * * Copyright 2011 Sam Arun Raj * * 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 #include "wine/test.h" #include "windef.h" #include "winbase.h" #include "winerror.h" static void test_DefineDosDeviceA1(void) { /* Test using lowercase drive letters */ CHAR Target[MAX_PATH]; CHAR Drive[] = "m:"; BOOL Result; Result = DefineDosDeviceA(0, Drive, "C:\\temp"); ok(Result, "Failed to subst drive using lowercase drive letter"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp"); ok(Result, "Failed to remove subst drive using lowercase drive letter"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(!Result, "Subst drive is present even after remove attempt"); } static void test_DefineDosDeviceA2(void) { /* Test using trailing \ against drive letter */ CHAR Target[MAX_PATH]; CHAR Drive[] = "Q:\\"; BOOL Result; Result = DefineDosDeviceA(0, Drive, "C:\\temp"); ok(!Result, "Subst drive using trailing path seperator"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp"); ok(!Result, "Subst drive using trailing path seperator"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(!Result, "Subst drive is present when it should not be created in the first place"); } static void test_DefineDosDeviceA3(void) { /* Test using arbitary string, not necessarily a DOS drive letter */ CHAR Target[MAX_PATH]; CHAR Drive[] = "!QHello:"; BOOL Result; Result = DefineDosDeviceA(0, Drive, "C:\\temp"); ok(Result, "Failed to subst drive using non-DOS drive name"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp"); ok(Result, "Failed to subst drive using non-DOS drive name"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(!Result, "Subst drive is present even after remove attempt"); } static void test_DefineDosDeviceA4(void) { /* Test remove without using DDD_EXACT_MATCH_ON_REMOVE */ CHAR Target[MAX_PATH]; CHAR Drive[] = "M:"; BOOL Result; Result = DefineDosDeviceA(0, Drive, "C:\\temp"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION, Drive, NULL); ok(Result, "Failed to remove subst drive using NULL Target name"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(!Result, "Subst drive is present even after remove attempt"); } static void test_DefineDosDeviceA5(void) { /* Test multiple adds and multiple removes in add order */ CHAR Target[MAX_PATH]; CHAR Drive[] = "M:"; BOOL Result; Result = DefineDosDeviceA(0, Drive, "C:\\temp1"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(0, Drive, "C:\\temp2"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(0, Drive, "C:\\temp3"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp1"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(Result, "Failed to query subst drive"); if (Result) ok((_stricmp(Target, "\\??\\C:\\temp3") == 0), "Subst drive is not pointing to correct target"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp2"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(Result, "Failed to query subst drive"); if (Result) ok((_stricmp(Target, "\\??\\C:\\temp3") == 0), "Subst drive is not pointing to correct target"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp3"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(!Result, "Subst drive is present even after remove attempt"); } static void test_DefineDosDeviceA6(void) { /* Test multiple adds and multiple removes in reverse order */ CHAR Target[MAX_PATH]; CHAR Drive[] = "M:"; BOOL Result; Result = DefineDosDeviceA(0, Drive, "C:\\temp1"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(0, Drive, "C:\\temp2"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(0, Drive, "C:\\temp3"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp3"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(Result, "Failed to query subst drive"); if (Result) ok((_stricmp(Target, "\\??\\C:\\temp2") == 0), "Subst drive is not pointing to correct target"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp2"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(Result, "Failed to query subst drive"); if (Result) ok((_stricmp(Target, "\\??\\C:\\temp1") == 0), "Subst drive is not pointing to correct target"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp1"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(!Result, "Subst drive is present even after remove attempt"); } static void test_DefineDosDeviceA7(void) { /* Test multiple adds and multiple removes out of order */ CHAR Target[MAX_PATH]; CHAR Drive[] = "M:"; BOOL Result; Result = DefineDosDeviceA(0, Drive, "C:\\temp1"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(0, Drive, "C:\\temp2"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(0, Drive, "C:\\temp3"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(0, Drive, "C:\\temp4"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(0, Drive, "C:\\temp5"); ok(Result, "Failed to subst drive"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp2"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(Result, "Failed to query subst drive"); if (Result) ok((_stricmp(Target, "\\??\\C:\\temp5") == 0), "Subst drive is not pointing to correct target"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp5"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(Result, "Failed to query subst drive"); if (Result) ok((_stricmp(Target, "\\??\\C:\\temp4") == 0), "Subst drive is not pointing to correct target"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp1"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(Result, "Failed to query subst drive"); if (Result) ok((_stricmp(Target, "\\??\\C:\\temp4") == 0), "Subst drive is not pointing to correct target"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp3"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(Result, "Failed to query subst drive"); if (Result) ok((_stricmp(Target, "\\??\\C:\\temp4") == 0), "Subst drive is not pointing to correct target"); Result = DefineDosDeviceA(DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, Drive, "C:\\temp4"); ok(Result, "Failed to remove subst drive"); Result = QueryDosDeviceA(Drive, Target, MAX_PATH); ok(!Result, "Subst drive is present even after remove attempt"); } START_TEST(dosdev) { test_DefineDosDeviceA1(); test_DefineDosDeviceA2(); test_DefineDosDeviceA3(); test_DefineDosDeviceA4(); test_DefineDosDeviceA5(); test_DefineDosDeviceA6(); test_DefineDosDeviceA7(); }