1 /* 2 * PROJECT: ReactOS api tests 3 * LICENSE: GPLv2+ - See COPYING in the top level directory 4 * PURPOSE: Test for GetCurrentDirectory 5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org> 6 */ 7 8 #include "precomp.h" 9 10 static 11 BOOLEAN 12 CheckBuffer( 13 const VOID *Buffer, 14 SIZE_T Size, 15 UCHAR Value) 16 { 17 const UCHAR *Array = Buffer; 18 SIZE_T i; 19 20 for (i = 0; i < Size; i++) 21 if (Array[i] != Value) 22 { 23 trace("Expected %x, found %x at offset %lu\n", Value, Array[i], (ULONG)i); 24 return FALSE; 25 } 26 return TRUE; 27 } 28 29 static 30 BOOLEAN 31 CheckStringBufferA( 32 const VOID *Buffer, 33 SIZE_T Size, 34 PCSTR Expected, 35 UCHAR Fill) 36 { 37 const CHAR *Chars = Buffer; 38 const UCHAR *UChars = Buffer; 39 SIZE_T Length = strlen(Expected); 40 SIZE_T i; 41 42 if (Size < Length) 43 { 44 ok(0, "Size = %lu, Length = %lu\n", (ULONG)Size, (ULONG)Length); 45 return FALSE; 46 } 47 48 for (i = 0; i < Length; i++) 49 if (Chars[i] != Expected[i]) 50 { 51 trace("Expected %x, found %x at offset %lu\n", Expected[i], Chars[i], (ULONG)i); 52 return FALSE; 53 } 54 55 ok(Chars[i] == 0, "Expected null terminator, found %x at offset %lu\n", Chars[i], (ULONG)i); 56 i++; 57 58 for (; i < Size; i++) 59 if (UChars[i] != Fill) 60 { 61 trace("Expected %x, found %x at offset %lu\n", Fill, UChars[i], (ULONG)i); 62 return FALSE; 63 } 64 return TRUE; 65 } 66 67 static 68 BOOLEAN 69 CheckStringBufferW( 70 const VOID *Buffer, 71 SIZE_T Size, 72 PCWSTR Expected, 73 UCHAR Fill) 74 { 75 const WCHAR *Chars = Buffer; 76 const UCHAR *UChars = Buffer; 77 SIZE_T Length = wcslen(Expected); 78 SIZE_T i; 79 80 if (Size < Length) 81 { 82 ok(0, "Size = %lu, Length = %lu\n", (ULONG)Size, (ULONG)Length); 83 return FALSE; 84 } 85 86 for (i = 0; i < Length; i++) 87 if (Chars[i] != Expected[i]) 88 { 89 trace("Expected %x, found %x at offset %lu\n", Expected[i], Chars[i], (ULONG)i); 90 return FALSE; 91 } 92 93 ok(Chars[i] == 0, "Expected null terminator, found %x at offset %lu\n", Chars[i], (ULONG)i); 94 i++; 95 96 i *= sizeof(WCHAR); 97 98 for (; i < Size; i++) 99 if (UChars[i] != Fill) 100 { 101 trace("Expected %x, found %x at offset %lu\n", Fill, UChars[i], (ULONG)i); 102 return FALSE; 103 } 104 return TRUE; 105 } 106 107 static 108 VOID 109 TestGetCurrentDirectoryA(VOID) 110 { 111 CHAR Buffer[MAX_PATH]; 112 DWORD Length; 113 BOOL Ret; 114 BOOLEAN Okay; 115 116 Ret = SetCurrentDirectoryA("C:\\"); 117 ok(Ret == TRUE, "SetCurrentDirectory failed with %lu\n", GetLastError()); 118 119 Length = GetCurrentDirectoryA(0, NULL); 120 ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); 121 122 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 123 Length = GetCurrentDirectoryA(sizeof(Buffer), Buffer); 124 ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length); 125 Okay = CheckStringBufferA(Buffer, sizeof(Buffer), "C:\\", 0x55); 126 ok(Okay, "CheckStringBufferA failed\n"); 127 128 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 129 Length = GetCurrentDirectoryA(0, Buffer); 130 ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); 131 Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); 132 ok(Okay, "CheckBuffer failed\n"); 133 134 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 135 Length = GetCurrentDirectoryA(1, Buffer); 136 ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); 137 Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); 138 ok(Okay, "CheckBuffer failed\n"); 139 140 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 141 Length = GetCurrentDirectoryA(2, Buffer); 142 ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); 143 Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); 144 ok(Okay, "CheckBuffer failed\n"); 145 146 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 147 Length = GetCurrentDirectoryA(3, Buffer); 148 ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); 149 Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); 150 ok(Okay, "CheckBuffer failed\n"); 151 152 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 153 Length = GetCurrentDirectoryA(4, Buffer); 154 ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length); 155 Okay = CheckStringBufferA(Buffer, sizeof(Buffer), "C:\\", 0x55); 156 ok(Okay, "CheckStringBufferA failed\n"); 157 } 158 159 static 160 VOID 161 TestGetCurrentDirectoryW(VOID) 162 { 163 WCHAR Buffer[MAX_PATH]; 164 DWORD Length; 165 BOOL Ret; 166 BOOLEAN Okay; 167 168 Ret = SetCurrentDirectoryW(L"C:\\"); 169 ok(Ret == TRUE, "SetCurrentDirectory failed with %lu\n", GetLastError()); 170 171 Length = GetCurrentDirectoryW(0, NULL); 172 ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); 173 174 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 175 Length = GetCurrentDirectoryW(sizeof(Buffer) / sizeof(WCHAR), Buffer); 176 ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length); 177 Okay = CheckStringBufferW(Buffer, sizeof(Buffer), L"C:\\", 0x55); 178 ok(Okay, "CheckStringBufferW failed\n"); 179 180 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 181 Length = GetCurrentDirectoryW(0, Buffer); 182 ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); 183 Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); 184 ok(Okay, "CheckBuffer failed\n"); 185 186 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 187 Length = GetCurrentDirectoryW(1, Buffer); 188 ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); 189 Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); 190 ok(Okay, "CheckBuffer failed\n"); 191 192 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 193 Length = GetCurrentDirectoryW(2, Buffer); 194 ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); 195 Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); 196 ok(Okay, "CheckBuffer failed\n"); 197 198 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 199 Length = GetCurrentDirectoryW(3, Buffer); 200 ok(Length == sizeof("C:\\"), "Length = %lu\n", Length); 201 Okay = CheckBuffer(Buffer, sizeof(Buffer), 0x55); 202 ok(Okay, "CheckBuffer failed\n"); 203 204 RtlFillMemory(Buffer, sizeof(Buffer), 0x55); 205 Length = GetCurrentDirectoryW(4, Buffer); 206 ok(Length == sizeof("C:\\") - 1, "Length = %lu\n", Length); 207 Okay = CheckStringBufferW(Buffer, sizeof(Buffer), L"C:\\", 0x55); 208 ok(Okay, "CheckStringBufferW failed\n"); 209 } 210 211 START_TEST(GetCurrentDirectory) 212 { 213 TestGetCurrentDirectoryA(); 214 TestGetCurrentDirectoryW(); 215 } 216