[2/5] gdiplus/tests: Add feature for loading emf files.
Vincent Povirk
madewokherd at gmail.com
Fri Aug 5 16:14:36 CDT 2016
From: Vincent Povirk <vincent at codeweavers.com>
This enables testing for mutual compatibility of emf's, by saving the files
on Wine and loading them on Windows, or vice versa.
Currently, the tests pass when saving/loading on the same platform, but not
on different platforms. All of the current failures are slight numerical
differences (rounding in different directions?), or todo_wine cases, and
I'm more concerned about making sure both implementations can parse the
other's files.
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
---
dlls/gdiplus/tests/metafile.c | 46 ++++++++++++++++++++++++++++++++-----------
1 file changed, 34 insertions(+), 12 deletions(-)
diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c
index e514eb5..a8fc67e 100644
--- a/dlls/gdiplus/tests/metafile.c
+++ b/dlls/gdiplus/tests/metafile.c
@@ -29,6 +29,7 @@
#define expectf(expected, got) expectf_((expected), (got), 0.001)
static BOOL save_metafiles;
+static BOOL load_metafiles;
typedef struct emfplus_record
{
@@ -239,15 +240,17 @@ static void play_metafile(GpMetafile *metafile, GpGraphics *graphics, const emfp
expect(Ok, stat);
}
-static void save_metafile(GpMetafile *metafile, const char *filename)
+/* When 'save' or 'load' is specified on the command line, save or
+ * load the specified filename. */
+static void sync_metafile(GpMetafile **metafile, const char *filename)
{
+ GpStatus stat;
if (save_metafiles)
{
GpMetafile *clone;
HENHMETAFILE hemf;
- GpStatus stat;
- stat = GdipCloneImage((GpImage*)metafile, (GpImage**)&clone);
+ stat = GdipCloneImage((GpImage*)*metafile, (GpImage**)&clone);
expect(Ok, stat);
stat = GdipGetHemfFromMetafile(clone, &hemf);
@@ -260,6 +263,20 @@ static void save_metafile(GpMetafile *metafile, const char *filename)
stat = GdipDisposeImage((GpImage*)clone);
expect(Ok, stat);
}
+ else if (load_metafiles)
+ {
+ HENHMETAFILE hemf;
+
+ stat = GdipDisposeImage((GpImage*)*metafile);
+ expect(Ok, stat);
+ *metafile = NULL;
+
+ hemf = GetEnhMetaFileA(filename);
+ ok(hemf != NULL, "%s could not be opened\n", filename);
+
+ stat = GdipCreateMetafileFromEmf(hemf, TRUE, metafile);
+ expect(Ok, stat);
+ }
}
static const emfplus_record empty_records[] = {
@@ -327,7 +344,7 @@ static void test_empty(void)
check_metafile(metafile, empty_records, "empty metafile", dst_points, &frame, UnitPixel);
- save_metafile(metafile, "empty.emf");
+ sync_metafile(&metafile, "empty.emf");
stat = GdipGetImageBounds((GpImage*)metafile, &bounds, &unit);
expect(Ok, stat);
@@ -479,7 +496,7 @@ static void test_getdc(void)
check_metafile(metafile, getdc_records, "getdc metafile", dst_points, &frame, UnitPixel);
- save_metafile(metafile, "getdc.emf");
+ sync_metafile(&metafile, "getdc.emf");
stat = GdipCreateBitmapFromScan0(100, 100, 0, PixelFormat32bppARGB, NULL, &bitmap);
expect(Ok, stat);
@@ -617,7 +634,7 @@ static void test_emfonly(void)
check_metafile(metafile, emfonly_records, "emfonly metafile", dst_points, &frame, UnitPixel);
- save_metafile(metafile, "emfonly.emf");
+ sync_metafile(&metafile, "emfonly.emf");
stat = GdipGetImageBounds((GpImage*)metafile, &bounds, &unit);
expect(Ok, stat);
@@ -806,7 +823,7 @@ static void test_fillrect(void)
check_metafile(metafile, fillrect_records, "fillrect metafile", dst_points, &frame, UnitPixel);
- save_metafile(metafile, "fillrect.emf");
+ sync_metafile(&metafile, "fillrect.emf");
stat = GdipCreateBitmapFromScan0(100, 100, 0, PixelFormat32bppARGB, NULL, &bitmap);
expect(Ok, stat);
@@ -910,7 +927,7 @@ static void test_clear(void)
stat = GdipDeleteGraphics(graphics);
expect(Ok, stat);
- save_metafile(metafile, "clear.emf");
+ sync_metafile(&metafile, "clear.emf");
stat = GdipCreateBitmapFromScan0(30, 30, 0, PixelFormat32bppRGB, NULL, &bitmap);
expect(Ok, stat);
@@ -1223,7 +1240,7 @@ static void test_pagetransform(void)
check_metafile(metafile, pagetransform_records, "pagetransform metafile", dst_points, &frame, UnitPixel);
- save_metafile(metafile, "pagetransform.emf");
+ sync_metafile(&metafile, "pagetransform.emf");
stat = GdipCreateBitmapFromScan0(100, 100, 0, PixelFormat32bppARGB, NULL, &bitmap);
expect(Ok, stat);
@@ -1382,7 +1399,7 @@ static void test_worldtransform(void)
check_metafile(metafile, worldtransform_records, "worldtransform metafile", dst_points, &frame, UnitPixel);
- save_metafile(metafile, "worldtransform.emf");
+ sync_metafile(&metafile, "worldtransform.emf");
stat = GdipCreateBitmapFromScan0(100, 100, 0, PixelFormat32bppARGB, NULL, &bitmap);
expect(Ok, stat);
@@ -1578,8 +1595,13 @@ START_TEST(metafile)
myARGC = winetest_get_mainargs( &myARGV );
- if (myARGC >= 3 && !strcmp(myARGV[2], "save"))
- save_metafiles = TRUE;
+ if (myARGC >= 3)
+ {
+ if (!strcmp(myARGV[2], "save"))
+ save_metafiles = TRUE;
+ else if (!strcmp(myARGV[2], "load"))
+ load_metafiles = TRUE;
+ }
test_empty();
test_getdc();
--
2.7.4
More information about the wine-patches
mailing list