[PATCH 3/5] kernel32/tests: Add some tests for SetEndOfFile().

Zebediah Figura z.figura12 at gmail.com
Fri Jun 25 00:28:50 CDT 2021


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/kernel32/tests/file.c | 186 +++++++++++++++++++++++++++++++++++++
 1 file changed, 186 insertions(+)

diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
index 138f1e6c2d3..c09438e09bd 100644
--- a/dlls/kernel32/tests/file.c
+++ b/dlls/kernel32/tests/file.c
@@ -5924,6 +5924,191 @@ static void test_move_file(void)
     SetCurrentDirectoryA( cwd );
 }
 
+static void test_eof(void)
+{
+    char temp_path[MAX_PATH], filename[MAX_PATH], buffer[20];
+    LARGE_INTEGER file_size;
+    HANDLE file, mapping;
+    unsigned int i;
+    void *view;
+    DWORD size;
+    BOOL ret;
+
+    static const struct
+    {
+        DWORD protection;
+        DWORD view_access;
+    }
+    map_tests[] =
+    {
+        {PAGE_READONLY, FILE_MAP_READ},
+        {PAGE_READWRITE, FILE_MAP_WRITE},
+    };
+
+    GetTempPathA(sizeof(temp_path), temp_path);
+    GetTempFileNameA(temp_path, "eof", 0, filename);
+
+    file = CreateFileA(filename, GENERIC_READ | GENERIC_WRITE | DELETE, 0, NULL, CREATE_ALWAYS, 0, 0);
+    ok(file != INVALID_HANDLE_VALUE, "failed to create file, error %u\n", GetLastError());
+
+    ret = GetFileSizeEx(file, &file_size);
+    ok(ret, "failed to get size, error %u\n", GetLastError());
+    ok(!file_size.QuadPart, "got size %I64d\n", file_size.QuadPart);
+
+    SetFilePointer(file, 2, NULL, SEEK_SET);
+
+    ret = GetFileSizeEx(file, &file_size);
+    ok(ret, "failed to get size, error %u\n", GetLastError());
+    ok(!file_size.QuadPart, "got size %I64d\n", file_size.QuadPart);
+
+    ret = ReadFile(file, buffer, sizeof(buffer), &size, NULL);
+    ok(ret, "failed to read, error %u\n", GetLastError());
+    ok(!size, "got size %u\n", size);
+
+    ret = SetEndOfFile(file);
+    ok(ret, "failed to set EOF, error %u\n", GetLastError());
+
+    ret = GetFileSizeEx(file, &file_size);
+    ok(ret, "failed to get size, error %u\n", GetLastError());
+    ok(file_size.QuadPart == 2, "got size %I64d\n", file_size.QuadPart);
+
+    ret = WriteFile(file, "data", 4, &size, NULL);
+    ok(ret, "failed to write, error %u\n", GetLastError());
+    ok(size == 4, "got size %u\n", size);
+
+    ret = GetFileSizeEx(file, &file_size);
+    ok(ret, "failed to get size, error %u\n", GetLastError());
+    ok(file_size.QuadPart == 6, "got size %I64d\n", file_size.QuadPart);
+
+    SetFilePointer(file, 4, NULL, SEEK_SET);
+    ret = SetEndOfFile(file);
+    ok(ret, "failed to set EOF, error %u\n", GetLastError());
+
+    ret = GetFileSizeEx(file, &file_size);
+    ok(ret, "failed to get size, error %u\n", GetLastError());
+    ok(file_size.QuadPart == 4, "got size %I64d\n", file_size.QuadPart);
+
+    SetFilePointer(file, 0, NULL, SEEK_SET);
+    ret = ReadFile(file, buffer, sizeof(buffer), &size, NULL);
+    ok(ret, "failed to read, error %u\n", GetLastError());
+    ok(size == 4, "got size %u\n", size);
+    ok(!memcmp(buffer, "\0\0da", 4), "wrong data\n");
+
+    SetFilePointer(file, 6, NULL, SEEK_SET);
+    ret = SetEndOfFile(file);
+    ok(ret, "failed to set EOF, error %u\n", GetLastError());
+
+    ret = GetFileSizeEx(file, &file_size);
+    ok(ret, "failed to get size, error %u\n", GetLastError());
+    ok(file_size.QuadPart == 6, "got size %I64d\n", file_size.QuadPart);
+
+    SetFilePointer(file, 0, NULL, SEEK_SET);
+    ret = ReadFile(file, buffer, sizeof(buffer), &size, NULL);
+    ok(ret, "failed to read, error %u\n", GetLastError());
+    ok(size == 6, "got size %u\n", size);
+    ok(!memcmp(buffer, "\0\0da\0\0", 6), "wrong data\n");
+
+    ret = SetEndOfFile(file);
+    ok(ret, "failed to set EOF, error %u\n", GetLastError());
+
+    SetFilePointer(file, 2, NULL, SEEK_SET);
+    ret = WriteFile(file, "data", 4, &size, NULL);
+    ok(ret, "failed to write, error %u\n", GetLastError());
+    ok(size == 4, "got size %u\n", size);
+
+    ret = GetFileSizeEx(file, &file_size);
+    ok(ret, "failed to get size, error %u\n", GetLastError());
+    ok(file_size.QuadPart == 6, "got size %I64d\n", file_size.QuadPart);
+
+    SetFilePointer(file, 0, NULL, SEEK_SET);
+    ret = ReadFile(file, buffer, sizeof(buffer), &size, NULL);
+    ok(ret, "failed to read, error %u\n", GetLastError());
+    ok(size == 6, "got size %u\n", size);
+    ok(!memcmp(buffer, "\0\0data", 6), "wrong data\n");
+
+    for (i = 0; i < ARRAY_SIZE(map_tests); ++i)
+    {
+        mapping = CreateFileMappingA(file, NULL, map_tests[i].protection, 0, 4, NULL);
+        ok(!!mapping, "failed to create mapping, error %u\n", GetLastError());
+
+        ret = GetFileSizeEx(file, &file_size);
+        ok(ret, "failed to get size, error %u\n", GetLastError());
+        ok(file_size.QuadPart == 6, "got size %I64d\n", file_size.QuadPart);
+
+        SetFilePointer(file, 6, NULL, SEEK_SET);
+        ret = SetEndOfFile(file);
+        ok(ret, "failed to set EOF, error %u\n", GetLastError());
+        ret = GetFileSizeEx(file, &file_size);
+        ok(ret, "failed to get size, error %u\n", GetLastError());
+        ok(file_size.QuadPart == 6, "got size %I64d\n", file_size.QuadPart);
+
+        SetFilePointer(file, 8, NULL, SEEK_SET);
+        ret = SetEndOfFile(file);
+        ok(ret, "failed to set EOF, error %u\n", GetLastError());
+        ret = GetFileSizeEx(file, &file_size);
+        ok(ret, "failed to get size, error %u\n", GetLastError());
+        ok(file_size.QuadPart == 8, "got size %I64d\n", file_size.QuadPart);
+
+        SetLastError(0xdeadbeef);
+        SetFilePointer(file, 6, NULL, SEEK_SET);
+        ret = SetEndOfFile(file);
+        todo_wine ok(!ret, "expected failure\n");
+        todo_wine ok(GetLastError() == ERROR_USER_MAPPED_FILE, "got error %u\n", GetLastError());
+        ret = GetFileSizeEx(file, &file_size);
+        ok(ret, "failed to get size, error %u\n", GetLastError());
+        todo_wine ok(file_size.QuadPart == 8, "got size %I64d\n", file_size.QuadPart);
+
+        SetFilePointer(file, 8192, NULL, SEEK_SET);
+        ret = SetEndOfFile(file);
+        ok(ret, "failed to set EOF, error %u\n", GetLastError());
+        ret = GetFileSizeEx(file, &file_size);
+        ok(ret, "failed to get size, error %u\n", GetLastError());
+        ok(file_size.QuadPart == 8192, "got size %I64d\n", file_size.QuadPart);
+
+        SetFilePointer(file, 8191, NULL, SEEK_SET);
+        ret = SetEndOfFile(file);
+        todo_wine ok(!ret, "expected failure\n");
+        todo_wine ok(GetLastError() == ERROR_USER_MAPPED_FILE, "got error %u\n", GetLastError());
+        ret = GetFileSizeEx(file, &file_size);
+        ok(ret, "failed to get size, error %u\n", GetLastError());
+        todo_wine ok(file_size.QuadPart == 8192, "got size %I64d\n", file_size.QuadPart);
+
+        view = MapViewOfFile(mapping, map_tests[i].view_access, 0, 0, 4);
+        ok(!!view, "failed to map view, error %u\n", GetLastError());
+
+        CloseHandle(mapping);
+
+        SetFilePointer(file, 16384, NULL, SEEK_SET);
+        ret = SetEndOfFile(file);
+        ok(ret, "failed to set EOF, error %u\n", GetLastError());
+        ret = GetFileSizeEx(file, &file_size);
+        ok(ret, "failed to get size, error %u\n", GetLastError());
+        ok(file_size.QuadPart == 16384, "got size %I64d\n", file_size.QuadPart);
+
+        SetFilePointer(file, 16383, NULL, SEEK_SET);
+        ret = SetEndOfFile(file);
+        todo_wine ok(!ret, "expected failure\n");
+        todo_wine ok(GetLastError() == ERROR_USER_MAPPED_FILE, "got error %u\n", GetLastError());
+        ret = GetFileSizeEx(file, &file_size);
+        ok(ret, "failed to get size, error %u\n", GetLastError());
+        todo_wine ok(file_size.QuadPart == 16384, "got size %I64d\n", file_size.QuadPart);
+
+        ret = UnmapViewOfFile(view);
+        ok(ret, "failed to unmap view, error %u\n", GetLastError());
+
+        SetFilePointer(file, 6, NULL, SEEK_SET);
+        ret = SetEndOfFile(file);
+        ok(ret, "failed to set EOF, error %u\n", GetLastError());
+        ret = GetFileSizeEx(file, &file_size);
+        ok(ret, "failed to get size, error %u\n", GetLastError());
+        ok(file_size.QuadPart == 6, "got size %I64d\n", file_size.QuadPart);
+    }
+
+    CloseHandle(file);
+    ret = DeleteFileA(filename);
+    ok(ret, "failed to delete %s, error %u\n", debugstr_a(filename), GetLastError());
+}
+
 START_TEST(file)
 {
     char temp_path[MAX_PATH];
@@ -6001,4 +6186,5 @@ START_TEST(file)
     test_ReOpenFile();
     test_hard_link();
     test_move_file();
+    test_eof();
 }
-- 
2.30.2




More information about the wine-devel mailing list