1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for SetCurrentDirectory
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
6 */
7
8 #include "precomp.h"
9
10 static
11 VOID
SetUnrelatedDirectory(VOID)12 SetUnrelatedDirectory(VOID)
13 {
14 WCHAR Buffer[MAX_PATH];
15 BOOL Ret;
16
17 GetWindowsDirectoryW(Buffer, sizeof(Buffer) / sizeof(WCHAR));
18 Ret = SetCurrentDirectoryW(Buffer);
19 ok(Ret == TRUE, "SetCurrentDirectoryW failed\n");
20 }
21
22 static
23 VOID
TestSetCurrentDirectoryA(VOID)24 TestSetCurrentDirectoryA(VOID)
25 {
26 BOOL Ret;
27 CHAR Buffer[MAX_PATH];
28 DWORD Length;
29
30 SetUnrelatedDirectory();
31
32 Ret = SetCurrentDirectoryA("C:\\");
33 ok(Ret == TRUE, "SetCurrentDirectoryA failed\n");
34 Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer);
35 ok(Length == 3, "Length = %lu\n", Length);
36 ok(!strcmp(Buffer, "C:\\"), "Current directory is %s\n", Buffer);
37
38 /* Same directory - succeeds */
39 Ret = SetCurrentDirectoryA("C:\\");
40 ok(Ret == TRUE, "SetCurrentDirectoryA failed\n");
41 Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer);
42 ok(Length == 3, "Length = %lu\n", Length);
43 ok(!strcmp(Buffer, "C:\\"), "Current directory is %s\n", Buffer);
44
45 /* Same directory, lowercase - succeeds and does not change case */
46 Ret = SetCurrentDirectoryA("c:\\");
47 ok(Ret == TRUE, "SetCurrentDirectoryA failed\n");
48 Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer);
49 ok(Length == 3, "Length = %lu\n", Length);
50 ok(!strcmp(Buffer, "C:\\"), "Current directory is %s\n", Buffer);
51
52 SetUnrelatedDirectory();
53
54 /* Now this one does change case */
55 Ret = SetCurrentDirectoryA("c:\\");
56 ok(Ret == TRUE, "SetCurrentDirectoryA failed\n");
57 Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer);
58 ok(Length == 3, "Length = %lu\n", Length);
59 ok(!strcmp(Buffer, "c:\\"), "Current directory is %s\n", Buffer);
60 }
61
62 static
63 VOID
TestSetCurrentDirectoryW(VOID)64 TestSetCurrentDirectoryW(VOID)
65 {
66 BOOL Ret;
67 WCHAR Buffer[MAX_PATH];
68 DWORD Length;
69
70 SetUnrelatedDirectory();
71
72 Ret = SetCurrentDirectoryW(L"C:\\");
73 ok(Ret == TRUE, "SetCurrentDirectoryW failed\n");
74 Length = GetCurrentDirectoryW(sizeof(Buffer) / sizeof(WCHAR), Buffer);
75 ok(Length == 3, "Length = %lu\n", Length);
76 ok(!wcscmp(Buffer, L"C:\\"), "Current directory is %ls\n", Buffer);
77
78 /* Same directory - succeeds */
79 Ret = SetCurrentDirectoryW(L"C:\\");
80 ok(Ret == TRUE, "SetCurrentDirectoryW failed\n");
81 Length = GetCurrentDirectoryW(sizeof(Buffer) / sizeof(WCHAR), Buffer);
82 ok(Length == 3, "Length = %lu\n", Length);
83 ok(!wcscmp(Buffer, L"C:\\"), "Current directory is %ls\n", Buffer);
84
85 /* Same directory, lowercase - succeeds and does not change case */
86 Ret = SetCurrentDirectoryW(L"c:\\");
87 ok(Ret == TRUE, "SetCurrentDirectoryW failed\n");
88 Length = GetCurrentDirectoryW(sizeof(Buffer) / sizeof(WCHAR), Buffer);
89 ok(Length == 3, "Length = %lu\n", Length);
90 ok(!wcscmp(Buffer, L"C:\\"), "Current directory is %ls\n", Buffer);
91
92 SetUnrelatedDirectory();
93
94 /* Now this one does change case */
95 Ret = SetCurrentDirectoryW(L"c:\\");
96 ok(Ret == TRUE, "SetCurrentDirectoryW failed\n");
97 Length = GetCurrentDirectoryW(sizeof(Buffer) / sizeof(WCHAR), Buffer);
98 ok(Length == 3, "Length = %lu\n", Length);
99 ok(!wcscmp(Buffer, L"c:\\"), "Current directory is %ls\n", Buffer);
100 }
101
START_TEST(SetCurrentDirectory)102 START_TEST(SetCurrentDirectory)
103 {
104 TestSetCurrentDirectoryA();
105 TestSetCurrentDirectoryW();
106 }
107