Jacek Caban : gdi32/tests: Add metafile file creation tests.

Alexandre Julliard julliard at winehq.org
Tue Jun 29 15:58:27 CDT 2021


Module: wine
Branch: master
Commit: d19ac108f91d19f7dd06bb48a1c00dfaa07fd387
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=d19ac108f91d19f7dd06bb48a1c00dfaa07fd387

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jun 29 13:41:30 2021 +0200

gdi32/tests: Add metafile file creation tests.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdi32/tests/metafile.c | 171 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 171 insertions(+)

diff --git a/dlls/gdi32/tests/metafile.c b/dlls/gdi32/tests/metafile.c
index 062eb4c8a44..dcd6cea0c2b 100644
--- a/dlls/gdi32/tests/metafile.c
+++ b/dlls/gdi32/tests/metafile.c
@@ -3015,6 +3015,175 @@ static void test_mf_Blank(void)
     ok( ret, "DeleteMetaFile(%p) error %d\n", hMetafile, GetLastError());
 }
 
+static void test_metafile_file(void)
+{
+    char temp_path[MAX_PATH];
+    char mf_name[MAX_PATH];
+    char buf[4096];
+    HMETAFILE metafile;
+    POINT oldpoint;
+    DWORD size;
+    HANDLE file;
+    HDC dc;
+    BOOL ret;
+
+    GetTempPathA(MAX_PATH, temp_path);
+    GetTempFileNameA(temp_path, "wmf", 0, mf_name);
+
+    dc = CreateMetaFileA(mf_name);
+    ok(dc != 0, "CreateMetaFileA(NULL) error %d\n", GetLastError());
+
+    file = CreateFileA(mf_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                       OPEN_EXISTING, 0, NULL);
+    ok(file == INVALID_HANDLE_VALUE && GetLastError() == ERROR_SHARING_VIOLATION,
+       "CreateFile returned: %p %u\n", file, GetLastError());
+
+    file = CreateFileA(mf_name, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                       OPEN_EXISTING, 0, NULL);
+    ok(file != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError());
+
+    size = GetFileSize(file, NULL);
+    todo_wine
+    ok(!size, "size = %u\n", size);
+
+    ret = MoveToEx(dc, 1, 1, NULL);
+    ok( ret, "MoveToEx error %d.\n", GetLastError());
+    ret = LineTo(dc, 2, 2);
+    ok( ret, "LineTo error %d.\n", GetLastError());
+    ret = MoveToEx(dc, 1, 1, &oldpoint);
+    ok( ret, "MoveToEx error %d.\n", GetLastError());
+    ret = Ellipse(dc, 0, 0, 2, 2);
+    ok( ret, "Ellipse error %d.\n", GetLastError());
+
+    size = GetFileSize(file, NULL);
+    todo_wine
+    ok(!size, "size = %u\n", size);
+
+    metafile = CloseMetaFile(dc);
+    size = GetFileSize(file, NULL);
+    ok(size == sizeof(MF_GRAPHICS_BITS), "size = %u\n", size);
+
+    CloseHandle(file);
+    file = CreateFileA(mf_name, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                       OPEN_EXISTING, 0, NULL);
+    todo_wine
+    ok(file == INVALID_HANDLE_VALUE && GetLastError() == ERROR_SHARING_VIOLATION,
+       "CreateFile returned: %p %u\n", file, GetLastError());
+    if (file != INVALID_HANDLE_VALUE) CloseHandle(file);
+    file = CreateFileA(mf_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                       OPEN_EXISTING, 0, NULL);
+    ok(file != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError());
+    ret = ReadFile(file, buf, sizeof(buf), &size, NULL);
+    ok(ret, "ReadFile failed: %u\n", GetLastError());
+    ok(size == sizeof(MF_GRAPHICS_BITS), "size = %u\n", size);
+    ok(!memcmp(buf, MF_GRAPHICS_BITS, sizeof(MF_GRAPHICS_BITS)), "unexpected file content\n");
+    CloseHandle(file);
+
+    if (compare_mf_bits(metafile, MF_GRAPHICS_BITS, sizeof(MF_GRAPHICS_BITS), "mf_Graphics") != 0)
+    {
+        dump_mf_bits(metafile, "mf_Graphics");
+        EnumMetaFile(0, metafile, mf_enum_proc, 0);
+    }
+
+    DeleteMetaFile(metafile);
+
+    SetLastError(0xdeadbeef);
+    metafile = CloseMetaFile(dc);
+    todo_wine
+    ok(!metafile && GetLastError() == ERROR_INVALID_HANDLE, "CloseMetaFile returned %p (%u)\n",
+       metafile, GetLastError());
+
+    ret = DeleteFileA(mf_name);
+    ok(ret, "Could not delete file: %u\n", GetLastError());
+}
+
+static void test_enhmetafile_file(void)
+{
+    char temp_path[MAX_PATH];
+    char mf_name[MAX_PATH];
+    char buf[4096];
+    HENHMETAFILE metafile;
+    POINT pts[4];
+    DWORD size;
+    HANDLE file;
+    HDC dc;
+    BOOL ret;
+
+    GetTempPathA(MAX_PATH, temp_path);
+    GetTempFileNameA(temp_path, "wmf", 0, mf_name);
+
+    dc = CreateEnhMetaFileA(NULL, mf_name, NULL, NULL);
+    ok(dc != 0, "CreateMetaFileA(NULL) error %d\n", GetLastError());
+
+    file = CreateFileA(mf_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                       OPEN_EXISTING, 0, NULL);
+    ok(file == INVALID_HANDLE_VALUE && GetLastError() == ERROR_SHARING_VIOLATION,
+       "CreateFile returned: %p %u\n", file, GetLastError());
+
+    file = CreateFileA(mf_name, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                       OPEN_EXISTING, 0, NULL);
+    ok(file != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError());
+
+    size = GetFileSize(file, NULL);
+    todo_wine
+    ok(!size, "size = %u\n", size);
+
+    pts[0].x = pts[0].y = 10;
+    pts[1].x = pts[1].y = 20;
+    pts[2].x = pts[2].y = 15;
+    pts[3].x = pts[3].y = 25;
+    ret = PolyBezierTo(dc, pts, 3);  /* EMR_POLYBEZIERTO16 */
+    ok( ret, "PolyBezierTo failed\n" );
+    ret = PolyBezier(dc, pts, 4);    /* EMR_POLYBEZIER16   */
+    ok( ret, "PolyBezier failed\n" );
+
+    pts[0].x = pts[0].y = 32769;
+    ret = PolyBezier(dc, pts, 4);    /* EMR_POLYBEZIER   */
+    ok( ret, "PolyBezier failed\n" );
+    ret = PolyBezierTo(dc, pts, 3);  /* EMR_POLYBEZIERTO */
+    ok( ret, "PolyBezierTo failed\n" );
+
+    size = GetFileSize(file, NULL);
+    todo_wine
+    ok(!size, "size = %u\n", size);
+
+    metafile = CloseEnhMetaFile(dc);
+    size = GetFileSize(file, NULL);
+    ok(size == sizeof(EMF_BEZIER_BITS), "size = %u\n", size);
+
+    CloseHandle(file);
+    file = CreateFileA(mf_name, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                       OPEN_EXISTING, 0, NULL);
+    todo_wine
+    ok(file == INVALID_HANDLE_VALUE && GetLastError() == ERROR_SHARING_VIOLATION,
+       "CreateFile returned: %p %u\n", file, GetLastError());
+    if (file != INVALID_HANDLE_VALUE) CloseHandle(file);
+    file = CreateFileA(mf_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+                       OPEN_EXISTING, 0, NULL);
+    ok(file != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError());
+    ret = ReadFile(file, buf, sizeof(buf), &size, NULL);
+    ok(ret, "ReadFile failed: %u\n", GetLastError());
+    ok(size == sizeof(EMF_BEZIER_BITS), "size = %u\n", size);
+    CloseHandle(file);
+
+    if (compare_emf_bits(metafile, EMF_BEZIER_BITS, sizeof(EMF_BEZIER_BITS), "emf_Bezier", FALSE) != 0)
+    {
+        dump_emf_bits(metafile, "emf_Bezier");
+        dump_emf_records(metafile, "emf_Bezier");
+    }
+
+    DeleteEnhMetaFile(metafile);
+
+    SetLastError(0xdeadbeef);
+    metafile = CloseEnhMetaFile(dc);
+    todo_wine
+    ok(!metafile && GetLastError() == ERROR_INVALID_HANDLE, "CloseMetaFile returned %p (%u)\n",
+       metafile, GetLastError());
+
+    ret = DeleteFileA(mf_name);
+    ok(ret, "Could not delete file: %u\n", GetLastError());
+}
+
 static void test_CopyMetaFile(void)
 {
     HDC hdcMetafile;
@@ -6107,6 +6276,7 @@ START_TEST(metafile)
     test_emf_GradientFill();
     test_emf_WorldTransform();
     test_emf_text_extents();
+    test_enhmetafile_file();
 
     /* For win-format metafiles (mfdrv) */
     test_mf_SaveDC();
@@ -6120,6 +6290,7 @@ START_TEST(metafile)
     test_mf_clipping();
     test_mf_GetPath();
     test_mf_SetLayout();
+    test_metafile_file();
 
     /* For metafile conversions */
     test_mf_conversions();




More information about the wine-cvs mailing list