Author: akhaldi
Date: Wed Oct 8 18:04:21 2014
New Revision: 64602
URL:
http://svn.reactos.org/svn/reactos?rev=64602&view=rev
Log:
[SCRRUN_WINETEST]
* Sync with Wine 1.7.27.
CORE-8540
Modified:
trunk/rostests/winetests/scrrun/filesystem.c
Modified: trunk/rostests/winetests/scrrun/filesystem.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/scrrun/filesyst…
==============================================================================
--- trunk/rostests/winetests/scrrun/filesystem.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/scrrun/filesystem.c [iso-8859-1] Wed Oct 8 18:04:21 2014
@@ -41,9 +41,19 @@
}
static const WCHAR crlfW[] = {'\r','\n',0};
+static const char utf16bom[] = {0xff,0xfe,0};
#define GET_REFCOUNT(iface) \
get_refcount((IUnknown*)iface)
+
+static inline void get_temp_path(const WCHAR *prefix, WCHAR *path)
+{
+ WCHAR buffW[MAX_PATH];
+
+ GetTempPathW(MAX_PATH, buffW);
+ GetTempFileNameW(buffW, prefix, 0, path);
+ DeleteFileW(path);
+}
static void test_interfaces(void)
{
@@ -129,15 +139,13 @@
static void test_createfolder(void)
{
- WCHAR pathW[MAX_PATH], buffW[MAX_PATH];
+ WCHAR buffW[MAX_PATH];
HRESULT hr;
BSTR path;
IFolder *folder;
BOOL ret;
- GetTempPathW(MAX_PATH, pathW);
- GetTempFileNameW(pathW, NULL, 0, buffW);
- DeleteFileW(buffW);
+ get_temp_path(NULL, buffW);
ret = CreateDirectoryW(buffW, NULL);
ok(ret, "got %d, %d\n", ret, GetLastError());
@@ -528,33 +536,31 @@
static void test_GetFile(void)
{
- static const WCHAR get_file[] =
{'g','e','t','_','f','i','l','e','.','t','s','t',0};
-
- BSTR path = SysAllocString(get_file);
+ static const WCHAR slW[] = {'\\',0};
+ BSTR path;
+ WCHAR pathW[MAX_PATH];
FileAttribute fa;
VARIANT size;
DWORD gfa;
IFile *file;
HRESULT hr;
HANDLE hf;
-
+ BOOL ret;
+
+ get_temp_path(NULL, pathW);
+
+ path = SysAllocString(pathW);
hr = IFileSystem3_GetFile(fs3, path, NULL);
ok(hr == E_POINTER, "GetFile returned %x, expected E_POINTER\n", hr);
hr = IFileSystem3_GetFile(fs3, NULL, &file);
ok(hr == E_INVALIDARG, "GetFile returned %x, expected E_INVALIDARG\n",
hr);
- if(GetFileAttributesW(path) != INVALID_FILE_ATTRIBUTES) {
- skip("File already exists, skipping GetFile tests\n");
- SysFreeString(path);
- return;
- }
-
file = (IFile*)0xdeadbeef;
hr = IFileSystem3_GetFile(fs3, path, &file);
ok(!file, "file != NULL\n");
ok(hr == CTL_E_FILENOTFOUND, "GetFile returned %x, expected
CTL_E_FILENOTFOUND\n", hr);
- hf = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_READONLY,
NULL);
+ hf = CreateFileW(pathW, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_READONLY,
NULL);
if(hf == INVALID_HANDLE_VALUE) {
skip("Can't create temporary file\n");
SysFreeString(path);
@@ -566,7 +572,7 @@
ok(hr == S_OK, "GetFile returned %x, expected S_OK\n", hr);
hr = IFile_get_Attributes(file, &fa);
- gfa = GetFileAttributesW(get_file) & (FILE_ATTRIBUTE_READONLY |
FILE_ATTRIBUTE_HIDDEN |
+ gfa = GetFileAttributesW(pathW) & (FILE_ATTRIBUTE_READONLY |
FILE_ATTRIBUTE_HIDDEN |
FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_ARCHIVE |
FILE_ATTRIBUTE_REPARSE_POINT | FILE_ATTRIBUTE_COMPRESSED);
ok(hr == S_OK, "get_Attributes returned %x, expected S_OK\n", hr);
@@ -589,6 +595,18 @@
ok(hr == CTL_E_FILENOTFOUND, "DeleteFile returned %x, expected
CTL_E_FILENOTFOUND\n", hr);
SysFreeString(path);
+
+ /* try with directory */
+ lstrcatW(pathW, slW);
+ ret = CreateDirectoryW(pathW, NULL);
+ ok(ret, "got %d, error %d\n", ret, GetLastError());
+
+ path = SysAllocString(pathW);
+ hr = IFileSystem3_GetFile(fs3, path, &file);
+ ok(hr == CTL_E_FILENOTFOUND, "GetFile returned %x, expected S_OK\n", hr);
+ SysFreeString(path);
+
+ RemoveDirectoryW(pathW);
}
static inline BOOL create_file(const WCHAR *name)
@@ -858,9 +876,7 @@
BSTR str;
int found_a = 0, found_b = 0, found_c = 0;
- GetTempPathW(MAX_PATH, pathW);
- GetTempFileNameW(pathW, fooW, 0, buffW);
- DeleteFileW(buffW);
+ get_temp_path(fooW, buffW);
CreateDirectoryW(buffW, NULL);
str = SysAllocString(buffW);
@@ -1042,9 +1058,7 @@
HANDLE file_a, file_b, file_c;
int found_a = 0, found_b = 0, found_c = 0;
- GetTempPathW(MAX_PATH, pathW);
- GetTempFileNameW(pathW, fooW, 0, buffW);
- DeleteFileW(buffW);
+ get_temp_path(fooW, buffW);
CreateDirectoryW(buffW, NULL);
str = SysAllocString(buffW);
@@ -1070,9 +1084,7 @@
count = 0;
hr = IFileCollection_get_Count(files, &count);
-todo_wine
- ok(hr == S_OK, "got 0x%08x\n", hr);
-todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
ok(count == 2, "got %d\n", count);
lstrcpyW(pathW, buffW);
@@ -1083,9 +1095,7 @@
/* every time property is requested it scans directory */
count = 0;
hr = IFileCollection_get_Count(files, &count);
-todo_wine
- ok(hr == S_OK, "got 0x%08x\n", hr);
-todo_wine
+ ok(hr == S_OK, "got 0x%08x\n", hr);
ok(count == 3, "got %d\n", count);
hr = IFileCollection_get__NewEnum(files, NULL);
@@ -1278,20 +1288,29 @@
V_VT(&size) = VT_EMPTY;
hr = IDrive_get_TotalSize(drive, &size);
ok(hr == S_OK, "got 0x%08x\n", hr);
- ok(V_VT(&size) == VT_R8, "got %d\n", V_VT(&size));
- ok(V_R8(&size) > 0, "got %f\n", V_R8(&size));
+ ok(V_VT(&size) == VT_R8 || V_VT(&size) == VT_I4, "got
%d\n", V_VT(&size));
+ if (V_VT(&size) == VT_R8)
+ ok(V_R8(&size) > 0, "got %f\n", V_R8(&size));
+ else
+ ok(V_I4(&size) > 0, "got %d\n", V_I4(&size));
V_VT(&size) = VT_EMPTY;
hr = IDrive_get_AvailableSpace(drive, &size);
ok(hr == S_OK, "got 0x%08x\n", hr);
- ok(V_VT(&size) == VT_R8, "got %d\n", V_VT(&size));
- ok(V_R8(&size) > 0, "got %f\n", V_R8(&size));
+ ok(V_VT(&size) == VT_R8 || V_VT(&size) == VT_I4, "got
%d\n", V_VT(&size));
+ if (V_VT(&size) == VT_R8)
+ ok(V_R8(&size) > (double)INT_MAX, "got %f\n",
V_R8(&size));
+ else
+ ok(V_I4(&size) > 0, "got %d\n", V_I4(&size));
V_VT(&size) = VT_EMPTY;
hr = IDrive_get_FreeSpace(drive, &size);
ok(hr == S_OK, "got 0x%08x\n", hr);
- ok(V_VT(&size) == VT_R8, "got %d\n", V_VT(&size));
- ok(V_R8(&size) > 0, "got %f\n", V_R8(&size));
+ ok(V_VT(&size) == VT_R8 || V_VT(&size) == VT_I4, "got
%d\n", V_VT(&size));
+ if (V_VT(&size) == VT_R8)
+ ok(V_R8(&size) > 0, "got %f\n", V_R8(&size));
+ else
+ ok(V_I4(&size) > 0, "got %d\n", V_I4(&size));
}
VariantClear(&var);
}
@@ -1304,8 +1323,7 @@
{
static const WCHAR scrrunW[] =
{'s','c','r','r','u','n','\\',0};
static const WCHAR testfileW[] =
{'t','e','s','t','.','t','x','t',0};
- static const WCHAR bomAW[] = {0xff,0xfe,0};
- WCHAR pathW[MAX_PATH], dirW[MAX_PATH];
+ WCHAR pathW[MAX_PATH], dirW[MAX_PATH], buffW[10];
ITextStream *stream;
BSTR nameW, str;
HANDLE file;
@@ -1352,11 +1370,16 @@
ok(hr == S_OK, "got 0x%08x\n", hr);
ITextStream_Release(stream);
+ /* File was created in Unicode mode, it contains 0xfffe BOM. Opening it in
non-Unicode mode
+ treats BOM like a valuable data with appropriate CP_ACP -> WCHAR conversion.
*/
+ buffW[0] = 0;
+ MultiByteToWideChar(CP_ACP, 0, utf16bom, -1, buffW, sizeof(buffW)/sizeof(WCHAR));
+
hr = IFileSystem3_OpenTextFile(fs3, nameW, ForReading, VARIANT_FALSE, TristateFalse,
&stream);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = ITextStream_ReadAll(stream, &str);
ok(hr == S_FALSE || broken(hr == S_OK) /* win2k */, "got 0x%08x\n", hr);
- ok(!lstrcmpW(str, bomAW), "got %s\n", wine_dbgstr_w(str));
+ ok(!lstrcmpW(str, buffW), "got %s, expected %s\n", wine_dbgstr_w(str),
wine_dbgstr_w(buffW));
SysFreeString(str);
ITextStream_Release(stream);
@@ -1493,7 +1516,9 @@
str = NULL;
hr = ITextStream_ReadAll(stream, &str);
ok(hr == S_FALSE || broken(hr == S_OK) /* win2k */, "got 0x%08x\n", hr);
- ok(str[0] == 0x00ff && str[1] == 0x00fe, "got %s, %d\n",
wine_dbgstr_w(str), SysStringLen(str));
+ buffW[0] = 0;
+ MultiByteToWideChar(CP_ACP, 0, utf16bom, -1, buffW, sizeof(buffW)/sizeof(WCHAR));
+ ok(str[0] == buffW[0] && str[1] == buffW[1], "got %s, %d\n",
wine_dbgstr_w(str), SysStringLen(str));
SysFreeString(str);
ITextStream_Release(stream);
@@ -1640,7 +1665,11 @@
str = NULL;
hr = ITextStream_Read(stream, 2, &str);
ok(hr == S_OK, "got 0x%08x\n", hr);
- ok(str[0] == 0x00ff && str[1] == 0x00fe, "got %s, %d\n",
wine_dbgstr_w(str), SysStringLen(str));
+
+ buffW[0] = 0;
+ MultiByteToWideChar(CP_ACP, 0, utf16bom, -1, buffW, sizeof(buffW)/sizeof(WCHAR));
+
+ ok(!lstrcmpW(str, buffW), "got %s, expected %s\n", wine_dbgstr_w(str),
wine_dbgstr_w(buffW));
ok(SysStringLen(str) == 2, "got %d\n", SysStringLen(str));
SysFreeString(str);
ITextStream_Release(stream);
@@ -1716,6 +1745,121 @@
DeleteFileW(nameW);
RemoveDirectoryW(dirW);
SysFreeString(nameW);
+}
+
+struct getdrivename_test {
+ const WCHAR path[10];
+ const WCHAR drive[5];
+};
+
+static const struct getdrivename_test getdrivenametestdata[] = {
+ {
{'C',':','\\','1','.','t','s','t',0},
{'C',':',0} },
+ {
{'O',':','\\','1','.','t','s','t',0},
{'O',':',0} },
+ { {'O',':',0}, {'O',':',0} },
+ { {'o',':',0}, {'o',':',0} },
+ { {'O','O',':',0} },
+ { {':',0} },
+ { {'O',0} },
+ { { 0 } }
+};
+
+static void test_GetDriveName(void)
+{
+ const struct getdrivename_test *ptr = getdrivenametestdata;
+ HRESULT hr;
+ BSTR name;
+
+ hr = IFileSystem3_GetDriveName(fs3, NULL, NULL);
+ ok(hr == E_POINTER, "got 0x%08x\n", hr);
+
+ name = (void*)0xdeadbeef;
+ hr = IFileSystem3_GetDriveName(fs3, NULL, &name);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(name == NULL, "got %p\n", name);
+
+ while (*ptr->path) {
+ BSTR path = SysAllocString(ptr->path);
+ name = (void*)0xdeadbeef;
+ hr = IFileSystem3_GetDriveName(fs3, path, &name);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ if (name)
+ ok(!lstrcmpW(ptr->drive, name), "got %s, expected %s\n",
wine_dbgstr_w(name), wine_dbgstr_w(ptr->drive));
+ else
+ ok(!*ptr->drive, "got %s, expected %s\n", wine_dbgstr_w(name),
wine_dbgstr_w(ptr->drive));
+ SysFreeString(path);
+ SysFreeString(name);
+ ptr++;
+ }
+}
+
+static void test_SerialNumber(void)
+{
+ IDriveCollection *drives;
+ IEnumVARIANT *iter;
+ IDrive *drive;
+ LONG serial;
+ HRESULT hr;
+ BSTR name;
+
+ hr = IFileSystem3_get_Drives(fs3, &drives);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IDriveCollection_get__NewEnum(drives, (IUnknown**)&iter);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ IDriveCollection_Release(drives);
+
+ while (1) {
+ DriveTypeConst type;
+ VARIANT var;
+
+ hr = IEnumVARIANT_Next(iter, 1, &var, NULL);
+ if (hr == S_FALSE) {
+ skip("No fixed drive found, skipping test.\n");
+ IEnumVARIANT_Release(iter);
+ return;
+ }
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IDispatch_QueryInterface(V_DISPATCH(&var), &IID_IDrive,
(void**)&drive);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ VariantClear(&var);
+
+ hr = IDrive_get_DriveType(drive, &type);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ if (type == Fixed)
+ break;
+
+ IDrive_Release(drive);
+ }
+
+ hr = IDrive_get_SerialNumber(drive, NULL);
+ ok(hr == E_POINTER, "got 0x%08x\n", hr);
+
+ serial = 0xdeadbeef;
+ hr = IDrive_get_SerialNumber(drive, &serial);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(serial != 0xdeadbeef, "got %x\n", serial);
+
+ hr = IDrive_get_FileSystem(drive, NULL);
+ ok(hr == E_POINTER, "got 0x%08x\n", hr);
+
+ name = NULL;
+ hr = IDrive_get_FileSystem(drive, &name);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(name != NULL, "got %p\n", name);
+ SysFreeString(name);
+
+ hr = IDrive_get_VolumeName(drive, NULL);
+ ok(hr == E_POINTER, "got 0x%08x\n", hr);
+
+ name = NULL;
+ hr = IDrive_get_VolumeName(drive, &name);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(name != NULL, "got %p\n", name);
+ SysFreeString(name);
+
+ IDrive_Release(drive);
+ IEnumVARIANT_Release(iter);
}
START_TEST(filesystem)
@@ -1750,6 +1894,8 @@
test_WriteLine();
test_ReadAll();
test_Read();
+ test_GetDriveName();
+ test_SerialNumber();
IFileSystem3_Release(fs3);