https://git.reactos.org/?p=reactos.git;a=commitdiff;h=465ab8e0c3020566d9d805...
commit 465ab8e0c3020566d9d8059d085238a6e4b1a454 Author: Amine Khaldi amine.khaldi@reactos.org AuthorDate: Sat Nov 30 14:47:55 2019 +0100 Commit: Amine Khaldi amine.khaldi@reactos.org CommitDate: Sat Nov 30 14:47:55 2019 +0100
[SCRRUN_WINETEST] Sync with Wine Staging 4.18. CORE-16441 --- modules/rostests/winetests/scrrun/filesystem.c | 202 ++++++++++++++++++++++--- 1 file changed, 181 insertions(+), 21 deletions(-)
diff --git a/modules/rostests/winetests/scrrun/filesystem.c b/modules/rostests/winetests/scrrun/filesystem.c index 29ee73f2433..3b4af3c4986 100644 --- a/modules/rostests/winetests/scrrun/filesystem.c +++ b/modules/rostests/winetests/scrrun/filesystem.c @@ -973,6 +973,61 @@ static void test_GetFolder(void) IFolder_Release(folder); }
+static void _test_clone(IEnumVARIANT *enumvar, BOOL position_inherited, LONG count, int line) +{ + HRESULT hr; + IEnumVARIANT *clone; + ULONG fetched; + VARIANT var, var2; + + hr = IEnumVARIANT_Reset(enumvar); + ok(hr == S_OK, "%d: got 0x%08x\n", line, hr); + + VariantInit(&var); + fetched = -1; + hr = IEnumVARIANT_Next(enumvar, 1, &var, &fetched); + ok(hr == S_OK, "%d: got 0x%08x\n", line, hr); + ok(fetched == 1, "%d: got %d\n", line, fetched); + + /* clone enumerator */ + hr = IEnumVARIANT_Clone(enumvar, &clone); + ok(hr == S_OK, "%d: got 0x%08x\n", line, hr); + ok(clone != enumvar, "%d: got %p, %p\n", line, enumvar, clone); + + /* check if clone inherits position */ + VariantInit(&var2); + fetched = -1; + hr = IEnumVARIANT_Next(clone, 1, &var2, &fetched); + if (position_inherited && count == 1) + { + ok(hr == S_FALSE, "%d: got 0x%08x\n", line, hr); + ok(fetched == 0, "%d: got %d\n", line, fetched); + } + else + { + ok(hr == S_OK, "%d: got 0x%08x\n", line, hr); + ok(fetched == 1, "%d: got %d\n", line, fetched); + if (!position_inherited) + todo_wine ok(V_DISPATCH(&var) == V_DISPATCH(&var2), "%d: values don't match\n", line); + else + { + fetched = -1; + hr = IEnumVARIANT_Next(enumvar, 1, &var, &fetched); + ok(hr == S_OK, "%d: got 0x%08x\n", line, hr); + ok(fetched == 1, "%d: got %d\n", line, fetched); + todo_wine ok(V_DISPATCH(&var) == V_DISPATCH(&var2), "%d: values don't match\n", line); + } + } + + VariantClear(&var2); + VariantClear(&var); + IEnumVARIANT_Release(clone); + + hr = IEnumVARIANT_Reset(enumvar); + ok(hr == S_OK, "%d: got 0x%08x\n", line, hr); +} +#define test_clone(a, b, c) _test_clone(a, b, c, __LINE__) + /* Please keep the tests for IFolderCollection and IFileCollection in sync */ static void test_FolderCollection(void) { @@ -982,7 +1037,7 @@ static void test_FolderCollection(void) static const WCHAR cW[] = {'\','c',0}; IFolderCollection *folders; WCHAR buffW[MAX_PATH], pathW[MAX_PATH]; - IEnumVARIANT *enumvar, *clone; + IEnumVARIANT *enumvar; LONG count, ref, ref2, i; IUnknown *unk, *unk2; IFolder *folder; @@ -1068,14 +1123,7 @@ static void test_FolderCollection(void) ref2 = GET_REFCOUNT(folders); ok(ref2 == ref, "got %d, %d\n", ref2, ref);
- /* clone enumerator */ - hr = IEnumVARIANT_Clone(enumvar, &clone); - ok(hr == S_OK, "got 0x%08x\n", hr); - ok(clone != enumvar, "got %p, %p\n", enumvar, clone); - IEnumVARIANT_Release(clone); - - hr = IEnumVARIANT_Reset(enumvar); - ok(hr == S_OK, "got 0x%08x\n", hr); + test_clone(enumvar, FALSE, count);
for (i = 0; i < 3; i++) { @@ -1165,7 +1213,7 @@ static void test_FileCollection(void) IFolder *folder; IFileCollection *files; IFile *file; - IEnumVARIANT *enumvar, *clone; + IEnumVARIANT *enumvar; LONG count, ref, ref2, i; IUnknown *unk, *unk2; ULONG fetched; @@ -1245,14 +1293,7 @@ static void test_FileCollection(void) ref2 = GET_REFCOUNT(files); ok(ref2 == ref, "got %d, %d\n", ref2, ref);
- /* clone enumerator */ - hr = IEnumVARIANT_Clone(enumvar, &clone); - ok(hr == S_OK, "got 0x%08x\n", hr); - ok(clone != enumvar, "got %p, %p\n", enumvar, clone); - IEnumVARIANT_Release(clone); - - hr = IEnumVARIANT_Reset(enumvar); - ok(hr == S_OK, "got 0x%08x\n", hr); + test_clone(enumvar, FALSE, count);
for (i = 0; i < 3; i++) { @@ -1366,9 +1407,7 @@ static void test_DriveCollection(void) hr = IEnumVARIANT_Skip(enumvar, 1); ok(hr == S_FALSE, "got 0x%08x\n", hr);
- /* reset and iterate again */ - hr = IEnumVARIANT_Reset(enumvar); - ok(hr == S_OK, "got 0x%08x\n", hr); + test_clone(enumvar, TRUE, count);
while (IEnumVARIANT_Next(enumvar, 1, &var, &fetched) == S_OK) { IDrive *drive = (IDrive*)V_DISPATCH(&var); @@ -1857,6 +1896,127 @@ todo_wine SysFreeString(str); ITextStream_Release(stream);
+ /* default read will use Unicode */ + hr = IFileSystem3_OpenTextFile(fs3, nameW, ForReading, VARIANT_FALSE, TristateUseDefault, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + + lstrcpyW(buffW, nameW); + lstrcatW(buffW, crlfW); + lstrcatW(buffW, secondlineW); + lstrcatW(buffW, crlfW); + str = NULL; + hr = ITextStream_Read(stream, 500, &str); + ok(hr == S_FALSE || broken(hr == S_OK) /* win2003 */, "got 0x%08x\n", hr); + ok(!lstrcmpW(buffW, str), "got %s\n", wine_dbgstr_w(str)); + SysFreeString(str); + + ITextStream_Release(stream); + + /* default append will use Unicode */ + hr = IFileSystem3_OpenTextFile(fs3, nameW, ForAppending, VARIANT_FALSE, TristateUseDefault, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + + str = SysAllocString(L"123"); + hr = ITextStream_Write(stream, str); + ok(hr == S_OK, "got %08x\n", hr); + SysFreeString(str); + + ITextStream_Release(stream); + + hr = IFileSystem3_OpenTextFile(fs3, nameW, ForReading, VARIANT_FALSE, TristateTrue, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + + lstrcatW(buffW, L"123"); + str = NULL; + hr = ITextStream_Read(stream, 500, &str); + ok(hr == S_FALSE || broken(hr == S_OK) /* win2003 */, "got 0x%08x\n", hr); + ok(!lstrcmpW(buffW, str), "got %s\n", wine_dbgstr_w(str)); + SysFreeString(str); + + ITextStream_Release(stream); + + /* default write will use ASCII */ + hr = IFileSystem3_OpenTextFile(fs3, nameW, ForWriting, VARIANT_FALSE, TristateUseDefault, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + + str = SysAllocString(L"123"); + hr = ITextStream_Write(stream, str); + ok(hr == S_OK, "got %08x\n", hr); + SysFreeString(str); + + ITextStream_Release(stream); + + hr = IFileSystem3_OpenTextFile(fs3, nameW, ForReading, VARIANT_FALSE, TristateFalse, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + + str = (void*)0xdeadbeef; + hr = ITextStream_Read(stream, 500, &str); + ok(hr == S_FALSE || broken(hr == S_OK) /* win2003 */, "got 0x%08x\n", hr); + ok(!wcscmp(str, L"123"), "got %s\n", wine_dbgstr_w(str)); + + ITextStream_Release(stream); + /* ASCII file, read with default stream */ + hr = IFileSystem3_CreateTextFile(fs3, nameW, VARIANT_TRUE, VARIANT_FALSE, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + str = SysAllocString(L"test"); + hr = ITextStream_Write(stream, str); + ok(hr == S_OK, "got 0x%08x\n", hr); + SysFreeString(str); + ITextStream_Release(stream); + + hr = IFileSystem3_OpenTextFile(fs3, nameW, ForReading, VARIANT_FALSE, TristateUseDefault, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + + str = (void*)0xdeadbeef; + hr = ITextStream_Read(stream, 500, &str); + ok(hr == S_FALSE || broken(hr == S_OK) /* win2003 */, "got 0x%08x\n", hr); + ok(!wcscmp(str, L"test"), "got %s\n", wine_dbgstr_w(str)); + + ITextStream_Release(stream); + + /* default append will use Unicode */ + hr = IFileSystem3_OpenTextFile(fs3, nameW, ForAppending, VARIANT_FALSE, TristateUseDefault, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + + str = SysAllocString(L"123"); + hr = ITextStream_Write(stream, str); + ok(hr == S_OK, "got %08x\n", hr); + SysFreeString(str); + + ITextStream_Release(stream); + + hr = IFileSystem3_OpenTextFile(fs3, nameW, ForReading, VARIANT_FALSE, TristateFalse, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + + str = NULL; + hr = ITextStream_Read(stream, 500, &str); + ok(hr == S_FALSE || broken(hr == S_OK) /* win2003 */, "got 0x%08x\n", hr); + ok(!lstrcmpW(L"test123", str), "got %s\n", wine_dbgstr_w(str)); + SysFreeString(str); + + ITextStream_Release(stream); + + /* default write will use ASCII as well */ + hr = IFileSystem3_OpenTextFile(fs3, nameW, ForWriting, VARIANT_FALSE, TristateUseDefault, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + + str = SysAllocString(L"test string"); + hr = ITextStream_Write(stream, str); + ok(hr == S_OK, "got %08x\n", hr); + SysFreeString(str); + + ITextStream_Release(stream); + + hr = IFileSystem3_OpenTextFile(fs3, nameW, ForReading, VARIANT_FALSE, TristateFalse, &stream); + ok(hr == S_OK, "got 0x%08x\n", hr); + + str = (void*)0xdeadbeef; + hr = ITextStream_Read(stream, 500, &str); + ok(hr == S_FALSE || broken(hr == S_OK) /* win2003 */, "got 0x%08x\n", hr); + ok(!wcscmp(str, L"test string"), "got %s\n", wine_dbgstr_w(str)); + + ITextStream_Release(stream); + /* ASCII file, read with Unicode stream */ /* 1. one byte content, not enough for Unicode read */ hr = IFileSystem3_CreateTextFile(fs3, nameW, VARIANT_TRUE, VARIANT_FALSE, &stream);