SetEnvironmentVariableA(NULL, NULL) crashes on Win98 -> removed.
[wine] / dlls / kernel / tests / drive.c
1 /*
2  * Unit test suite for drive functions.
3  *
4  * Copyright 2002 Dmitry Timoshkov
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #include "wine/test.h"
22 #include "winbase.h"
23 #include "winerror.h"
24
25 void test_GetDriveTypeA(void)
26 {
27     char drive[] = "?:\\";
28     DWORD logical_drives;
29     UINT type;
30
31     logical_drives = GetLogicalDrives();
32     ok(logical_drives != 0, "GetLogicalDrives error %ld", GetLastError());
33
34     for (drive[0] = 'A'; drive[0] <= 'Z'; drive[0]++)
35     {
36         type = GetDriveTypeA(drive);
37         ok(type > 0 && type <= 6, "not a valid drive %c: type %u", drive[0], type);
38
39         if (!(logical_drives & 1))
40             ok(type == DRIVE_NO_ROOT_DIR,
41                "GetDriveTypeA should return DRIVE_NO_ROOT_DIR for a not existing drive %c: but not %u",
42                drive[0], type);
43
44         logical_drives >>= 1;
45     }
46 }
47
48 void test_GetDriveTypeW(void)
49 {
50     WCHAR drive[] = {'?',':','\\',0};
51     DWORD logical_drives;
52     UINT type;
53
54     logical_drives = GetLogicalDrives();
55     ok(logical_drives != 0, "GetLogicalDrives error %ld", GetLastError());
56
57     for (drive[0] = 'A'; drive[0] <= 'Z'; drive[0]++)
58     {
59         type = GetDriveTypeW(drive);
60         ok(type > 0 && type <= 6, "not a valid drive %c: type %u", drive[0], type);
61
62         if (!(logical_drives & 1))
63             ok(type == DRIVE_NO_ROOT_DIR,
64                "GetDriveTypeW should return DRIVE_NO_ROOT_DIR for a not existing drive %c: but not %u",
65                drive[0], type);
66
67         logical_drives >>= 1;
68     }
69 }
70
71 void test_GetDiskFreeSpaceA(void)
72 {
73     BOOL ret;
74     DWORD sectors_per_cluster, bytes_per_sector, free_clusters, total_clusters;
75     char drive[] = "?:\\";
76     DWORD logical_drives;
77
78     ret = GetDiskFreeSpaceA(NULL, NULL, NULL, NULL, NULL);
79     ok(ret, "GetDiskFreeSpaceA error %ld", GetLastError());
80
81     ret = GetDiskFreeSpaceA(NULL, &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
82     ok(ret, "GetDiskFreeSpaceA error %ld", GetLastError());
83
84     ret = GetDiskFreeSpaceA("", &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
85     ok(!ret && GetLastError() == ERROR_PATH_NOT_FOUND, "GetDiskFreeSpaceA should return ERROR_PATH_NOT_FOUND for \"\"");
86
87     ret = GetDiskFreeSpaceA("\\", &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
88     ok(ret, "GetDiskFreeSpaceA error %ld", GetLastError());
89
90     ret = GetDiskFreeSpaceA("/", &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
91     ok(ret, "GetDiskFreeSpaceA error %ld", GetLastError());
92
93     ret = GetDiskFreeSpaceA(".", &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
94     ok(!ret && GetLastError() == ERROR_INVALID_NAME, "GetDiskFreeSpaceA should return ERROR_INVALID_NAME for \".\"");
95
96     ret = GetDiskFreeSpaceA("..", &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
97     ok(!ret && GetLastError() == ERROR_INVALID_NAME, "GetDiskFreeSpaceA should return ERROR_INVALID_NAME for \"..\"");
98
99     logical_drives = GetLogicalDrives();
100     ok(logical_drives != 0, "GetLogicalDrives error %ld", GetLastError());
101
102     for (drive[0] = 'A'; drive[0] <= 'Z'; drive[0]++)
103     {
104         ret = GetDiskFreeSpaceA(drive, &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
105         if (!(logical_drives & 1))
106             ok(!ret && GetLastError() == ERROR_PATH_NOT_FOUND,
107                "GetDiskFreeSpaceA should return ERROR_PATH_NOT_FOUND for a not existing drive %c",
108                drive[0]);
109         else
110             ok(ret, "GetDiskFreeSpaceA error %ld", GetLastError());
111
112         logical_drives >>= 1;
113     }
114 }
115
116 void test_GetDiskFreeSpaceW(void)
117 {
118     BOOL ret;
119     DWORD sectors_per_cluster, bytes_per_sector, free_clusters, total_clusters;
120     WCHAR drive[] = {'?',':','\\',0};
121     DWORD logical_drives;
122     static const WCHAR empty_pathW[] = { 0 };
123     static const WCHAR root_pathW[] = { '\\', 0 };
124     static const WCHAR unix_style_root_pathW[] = { '/', 0 };
125     static const WCHAR cur_dirW[] = { '.', 0 };
126     static const WCHAR upper_dirW[] = { '.','.', 0 };
127
128     ret = GetDiskFreeSpaceW(NULL, NULL, NULL, NULL, NULL);
129     ok(ret, "GetDiskFreeSpaceW error %ld", GetLastError());
130
131     ret = GetDiskFreeSpaceW(NULL, &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
132     ok(ret, "GetDiskFreeSpaceW error %ld", GetLastError());
133
134     ret = GetDiskFreeSpaceW(empty_pathW, &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
135     ok(!ret && GetLastError() == ERROR_PATH_NOT_FOUND, "GetDiskFreeSpaceW should return ERROR_PATH_NOT_FOUND for \"\"");
136
137     ret = GetDiskFreeSpaceW(root_pathW, &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
138     ok(ret, "GetDiskFreeSpaceW error %ld", GetLastError());
139
140     ret = GetDiskFreeSpaceW(unix_style_root_pathW, &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
141     ok(ret, "GetDiskFreeSpaceW error %ld", GetLastError());
142
143     ret = GetDiskFreeSpaceW(cur_dirW, &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
144     ok(!ret && GetLastError() == ERROR_INVALID_NAME, "GetDiskFreeSpaceW should return ERROR_INVALID_NAME for \".\"");
145
146     ret = GetDiskFreeSpaceW(upper_dirW, &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
147     ok(!ret && GetLastError() == ERROR_INVALID_NAME, "GetDiskFreeSpaceW should return ERROR_INVALID_NAME for \"..\"");
148
149     logical_drives = GetLogicalDrives();
150     ok(logical_drives != 0, "GetLogicalDrives error %ld", GetLastError());
151
152     for (drive[0] = 'A'; drive[0] <= 'Z'; drive[0]++)
153     {
154         ret = GetDiskFreeSpaceW(drive, &sectors_per_cluster, &bytes_per_sector, &free_clusters, &total_clusters);
155         if (!(logical_drives & 1))
156             ok(!ret && GetLastError() == ERROR_PATH_NOT_FOUND,
157                "GetDiskFreeSpaceW should return ERROR_PATH_NOT_FOUND for a not existing drive %c",
158                drive[0]);
159         else
160             ok(ret, "GetDiskFreeSpaceW error %ld", GetLastError());
161
162         logical_drives >>= 1;
163     }
164 }
165
166 START_TEST(drive)
167 {
168     test_GetDriveTypeA();
169     test_GetDriveTypeW();
170
171     test_GetDiskFreeSpaceA();
172     test_GetDiskFreeSpaceW();
173 }