From 1df5f2fab7d5f61a6ce55393128ab3a2241edd09 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Tue, 10 Oct 2017 21:24:38 +0300 Subject: [PATCH] gdiplus/tests: Test EMF+ records flags. Signed-off-by: Nikolay Sivov Signed-off-by: Vincent Povirk Signed-off-by: Alexandre Julliard --- dlls/gdiplus/tests/metafile.c | 422 ++++++++++++++++++---------------- 1 file changed, 219 insertions(+), 203 deletions(-) diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c index 9770a8f6ab4..0e47607eac5 100644 --- a/dlls/gdiplus/tests/metafile.c +++ b/dlls/gdiplus/tests/metafile.c @@ -33,11 +33,13 @@ static BOOL load_metafiles; typedef struct emfplus_record { + DWORD record_type; + DWORD flags; /* Used for EMF+ records only. */ BOOL todo; - ULONG record_type; BOOL playback_todo; void (*playback_fn)(GpMetafile* metafile, EmfPlusRecordType record_type, unsigned int flags, unsigned int dataSize, const unsigned char *pStr); + DWORD broken_flags; } emfplus_record; typedef struct emfplus_check_state @@ -50,10 +52,21 @@ typedef struct emfplus_check_state static void check_record(int count, const char *desc, const struct emfplus_record *expected, const struct emfplus_record *actual) { + if (actual->record_type > GDIP_EMFPLUS_RECORD_BASE) + { + todo_wine_if (expected->todo) + ok(expected->record_type == actual->record_type && (expected->flags == actual->flags || + broken(expected->broken_flags == actual->flags)), + "%s.%i: Expected record type 0x%x, got 0x%x. Expected flags %#x, got %#x.\n", desc, count, + expected->record_type, actual->record_type, expected->flags, actual->flags); + } + else + { todo_wine_if (expected->todo) ok(expected->record_type == actual->record_type, - "%s.%i: Expected record type 0x%x, got 0x%x\n", desc, count, + "%s.%i: Expected record type 0x%x, got 0x%x.\n", desc, count, expected->record_type, actual->record_type); + } } typedef struct EmfPlusRecordHeader @@ -128,6 +141,7 @@ static int CALLBACK enum_emf_proc(HDC hDC, HANDLETABLE *lpHTable, const ENHMETAR { actual.todo = FALSE; actual.record_type = record->Type; + actual.flags = record->Flags; check_record(state->count, state->desc, &state->expected[state->count], &actual); state->count++; @@ -167,6 +181,7 @@ static int CALLBACK enum_emf_proc(HDC hDC, HANDLETABLE *lpHTable, const ENHMETAR { actual.todo = FALSE; actual.record_type = lpEMFR->iType; + actual.flags = 0; check_record(state->count, state->desc, &state->expected[state->count], &actual); @@ -202,6 +217,7 @@ static BOOL CALLBACK enum_metafile_proc(EmfPlusRecordType record_type, unsigned actual.todo = FALSE; actual.record_type = record_type; + actual.flags = flags; if (dataSize == 0) ok(pStr == NULL, "non-NULL pStr\n"); @@ -342,11 +358,11 @@ static void sync_metafile(GpMetafile **metafile, const char *filename) } static const emfplus_record empty_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_empty(void) @@ -541,17 +557,17 @@ static void test_empty(void) } static const emfplus_record getdc_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeGetDC}, - {0, EMR_CREATEBRUSHINDIRECT}, - {0, EMR_SELECTOBJECT}, - {0, EMR_RECTANGLE}, - {0, EMR_SELECTOBJECT}, - {0, EMR_DELETEOBJECT}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeGetDC }, + { EMR_CREATEBRUSHINDIRECT }, + { EMR_SELECTOBJECT }, + { EMR_RECTANGLE }, + { EMR_SELECTOBJECT }, + { EMR_DELETEOBJECT }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_getdc(void) @@ -679,34 +695,34 @@ static void test_getdc(void) } static const emfplus_record emfonly_records[] = { - {0, EMR_HEADER}, - {0, EMR_CREATEBRUSHINDIRECT}, - {0, EMR_SELECTOBJECT}, - {0, EMR_RECTANGLE}, - {0, EMR_SELECTOBJECT}, - {0, EMR_DELETEOBJECT}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EMR_CREATEBRUSHINDIRECT }, + { EMR_SELECTOBJECT }, + { EMR_RECTANGLE }, + { EMR_SELECTOBJECT }, + { EMR_DELETEOBJECT }, + { EMR_EOF }, + { 0 } }; static const emfplus_record emfonly_draw_records[] = { - {0, EMR_HEADER}, - {1, EMR_SAVEDC}, - {1, EMR_SETICMMODE}, - {1, EMR_SETMITERLIMIT}, - {1, EMR_MODIFYWORLDTRANSFORM}, - {1, EMR_EXTCREATEPEN}, - {1, EMR_SELECTOBJECT}, - {1, EMR_SELECTOBJECT}, - {1, EMR_POLYLINE16}, - {1, EMR_SELECTOBJECT}, - {1, EMR_SELECTOBJECT}, - {1, EMR_MODIFYWORLDTRANSFORM}, - {1, EMR_DELETEOBJECT}, - {1, EMR_SETMITERLIMIT}, - {1, EMR_RESTOREDC}, - {0, EMR_EOF}, - {1} + { EMR_HEADER }, + { EMR_SAVEDC, 0, 1 }, + { EMR_SETICMMODE, 0, 1 }, + { EMR_SETMITERLIMIT, 0, 1 }, + { EMR_MODIFYWORLDTRANSFORM, 0, 1 }, + { EMR_EXTCREATEPEN, 0, 1 }, + { EMR_SELECTOBJECT, 0, 1 }, + { EMR_SELECTOBJECT, 0, 1 }, + { EMR_POLYLINE16, 0, 1 }, + { EMR_SELECTOBJECT, 0, 1 }, + { EMR_SELECTOBJECT, 0, 1 }, + { EMR_MODIFYWORLDTRANSFORM, 0, 1 }, + { EMR_DELETEOBJECT, 0, 1 }, + { EMR_SETMITERLIMIT, 0, 1 }, + { EMR_RESTOREDC, 0, 1 }, + { EMR_EOF }, + { 0, 0, 1 } }; static void test_emfonly(void) @@ -1002,12 +1018,12 @@ static void test_emfonly(void) } static const emfplus_record fillrect_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_fillrect(void) @@ -1112,16 +1128,16 @@ static void test_fillrect(void) } static const emfplus_record clear_emf_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeClear}, - {1, EMR_SAVEDC}, - {1, EMR_SETICMMODE}, - {1, EMR_BITBLT}, - {1, EMR_RESTOREDC}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeClear }, + { EMR_SAVEDC, 0, 1 }, + { EMR_SETICMMODE, 0, 1 }, + { EMR_BITBLT, 0, 1 }, + { EMR_RESTOREDC, 0, 1 }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_clear(void) @@ -1316,20 +1332,20 @@ static void test_nullframerect(void) { } static const emfplus_record pagetransform_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeSetPageTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeSetPageTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeSetPageTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeSetPageTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeSetPageTransform, UnitPixel }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeSetPageTransform, UnitPixel }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeSetPageTransform, UnitInch }, + { EmfPlusRecordTypeFillRects, 0x8000 }, + { EmfPlusRecordTypeSetPageTransform, UnitDisplay }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_pagetransform(void) @@ -1517,24 +1533,24 @@ static void test_pagetransform(void) } static const emfplus_record worldtransform_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeScaleWorldTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeResetWorldTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeMultiplyWorldTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeRotateWorldTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeSetWorldTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeTranslateWorldTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeScaleWorldTransform }, + { EmfPlusRecordTypeFillRects, 0x8000 }, + { EmfPlusRecordTypeResetWorldTransform }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeMultiplyWorldTransform }, + { EmfPlusRecordTypeFillRects, 0x8000 }, + { EmfPlusRecordTypeRotateWorldTransform, 0x2000 }, + { EmfPlusRecordTypeFillRects, 0x8000 }, + { EmfPlusRecordTypeSetWorldTransform }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeTranslateWorldTransform, 0x2000 }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_worldtransform(void) @@ -1942,29 +1958,29 @@ static void test_frameunit(void) } static const emfplus_record container_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeBeginContainerNoParams}, - {0, EmfPlusRecordTypeScaleWorldTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeEndContainer}, - {0, EmfPlusRecordTypeScaleWorldTransform}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeSave}, - {0, EmfPlusRecordTypeRestore}, - {0, EmfPlusRecordTypeScaleWorldTransform}, - {0, EmfPlusRecordTypeBeginContainerNoParams}, - {0, EmfPlusRecordTypeScaleWorldTransform}, - {0, EmfPlusRecordTypeBeginContainerNoParams}, - {0, EmfPlusRecordTypeEndContainer}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeBeginContainer}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeEndContainer}, - {0, EmfPlusRecordTypeBeginContainerNoParams}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeBeginContainerNoParams }, + { EmfPlusRecordTypeScaleWorldTransform }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeEndContainer }, + { EmfPlusRecordTypeScaleWorldTransform }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeSave }, + { EmfPlusRecordTypeRestore }, + { EmfPlusRecordTypeScaleWorldTransform }, + { EmfPlusRecordTypeBeginContainerNoParams }, + { EmfPlusRecordTypeScaleWorldTransform }, + { EmfPlusRecordTypeBeginContainerNoParams }, + { EmfPlusRecordTypeEndContainer }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeBeginContainer, UnitInch }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeEndContainer }, + { EmfPlusRecordTypeBeginContainerNoParams }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_containers(void) @@ -2146,19 +2162,19 @@ static void test_containers(void) } static const emfplus_record clipping_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeSave}, - {0, EmfPlusRecordTypeSetClipRect}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeRestore}, - {0, EmfPlusRecordTypeSetClipRect}, - {0, EmfPlusRecordTypeFillRects}, - {0, EmfPlusRecordTypeObject, 1}, - {0, EmfPlusRecordTypeSetClipRegion, 1}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeSave }, + { EmfPlusRecordTypeSetClipRect }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeRestore }, + { EmfPlusRecordTypeSetClipRect, 0x300 }, + { EmfPlusRecordTypeFillRects, 0xc000 }, + { EmfPlusRecordTypeObject, ObjectTypeRegion << 8, 0, 1 }, + { EmfPlusRecordTypeSetClipRegion, 0x100, 0, 1 }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_clipping(void) @@ -2295,14 +2311,14 @@ static void test_gditransform_cb(GpMetafile* metafile, EmfPlusRecordType record_ } static const emfplus_record gditransform_records[] = { - {0, EMR_HEADER}, - {0, EMR_CREATEBRUSHINDIRECT}, - {0, EMR_SELECTOBJECT}, - {0, EMR_GDICOMMENT, 0, test_gditransform_cb}, - {0, EMR_SELECTOBJECT}, - {0, EMR_DELETEOBJECT}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EMR_CREATEBRUSHINDIRECT }, + { EMR_SELECTOBJECT }, + { EMR_GDICOMMENT, 0, 0, 0, test_gditransform_cb }, + { EMR_SELECTOBJECT }, + { EMR_DELETEOBJECT }, + { EMR_EOF }, + { 0 } }; static void test_gditransform(void) @@ -2399,45 +2415,45 @@ static void test_gditransform(void) } static const emfplus_record draw_image_bitmap_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeObject}, - {0, EmfPlusRecordTypeObject}, - {0, EmfPlusRecordTypeDrawImagePoints}, - {1, EMR_SAVEDC}, - {1, EMR_SETICMMODE}, - {1, EMR_BITBLT}, - {1, EMR_RESTOREDC}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeObject, ObjectTypeImage << 8 }, + { EmfPlusRecordTypeObject, (ObjectTypeImageAttributes << 8) | 1 }, + { EmfPlusRecordTypeDrawImagePoints, 0, 0, 0, NULL, 0x4000 }, + { EMR_SAVEDC, 0, 1 }, + { EMR_SETICMMODE, 0, 1 }, + { EMR_BITBLT, 0, 1 }, + { EMR_RESTOREDC, 0, 1 }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static const emfplus_record draw_image_metafile_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeObject}, + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeObject, ObjectTypeImage << 8 }, /* metafile object */ - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeObject}, - {0, EmfPlusRecordTypeObject}, - {0, EmfPlusRecordTypeDrawImagePoints}, - {1, EMR_SAVEDC}, - {1, EMR_SETICMMODE}, - {1, EMR_BITBLT}, - {1, EMR_RESTOREDC}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeObject, ObjectTypeImage << 8 }, + { EmfPlusRecordTypeObject, (ObjectTypeImageAttributes << 8) | 1 }, + { EmfPlusRecordTypeDrawImagePoints }, + { EMR_SAVEDC, 0, 1 }, + { EMR_SETICMMODE, 0, 1 }, + { EMR_BITBLT, 0, 1 }, + { EMR_RESTOREDC, 0, 1 }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, /* end of metafile object */ - {0, EmfPlusRecordTypeDrawImagePoints}, - {1, EMR_SAVEDC}, - {1, EMR_SETICMMODE}, - {1, EMR_BITBLT}, - {1, EMR_RESTOREDC}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EmfPlusRecordTypeDrawImagePoints }, + { EMR_SAVEDC, 0, 1 }, + { EMR_SETICMMODE, 0, 1 }, + { EMR_BITBLT, 0, 1 }, + { EMR_RESTOREDC, 0, 1 }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_drawimage(void) @@ -2542,17 +2558,17 @@ static void test_drawimage(void) } static const emfplus_record properties_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeSetTextRenderingHint}, - {0, EmfPlusRecordTypeSetPixelOffsetMode}, - {0, EmfPlusRecordTypeSetAntiAliasMode}, - {0, EmfPlusRecordTypeSetCompositingMode}, - {0, EmfPlusRecordTypeSetCompositingQuality}, - {0, EmfPlusRecordTypeSetInterpolationMode}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeSetTextRenderingHint, TextRenderingHintAntiAlias }, + { EmfPlusRecordTypeSetPixelOffsetMode, PixelOffsetModeHighQuality }, + { EmfPlusRecordTypeSetAntiAliasMode, (SmoothingModeAntiAlias << 1) | 1, 0, 0, NULL, 0x1 }, + { EmfPlusRecordTypeSetCompositingMode, CompositingModeSourceCopy }, + { EmfPlusRecordTypeSetCompositingQuality, CompositingQualityHighQuality }, + { EmfPlusRecordTypeSetInterpolationMode, InterpolationModeHighQualityBicubic }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_properties(void) @@ -2619,18 +2635,18 @@ static void test_properties(void) } static const emfplus_record draw_path_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeObject}, - {0, EmfPlusRecordTypeObject}, - {0, EmfPlusRecordTypeDrawPath}, - {1, EMR_SAVEDC}, - {1, EMR_SETICMMODE}, - {1, EMR_BITBLT}, - {1, EMR_RESTOREDC}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeObject, ObjectTypePen << 8 }, + { EmfPlusRecordTypeObject, (ObjectTypePath << 8) | 1 }, + { EmfPlusRecordTypeDrawPath, 1 }, + { EMR_SAVEDC, 0, 1 }, + { EMR_SETICMMODE, 0, 1 }, + { EMR_BITBLT, 0, 1 }, + { EMR_RESTOREDC, 0, 1 }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_drawpath(void) @@ -2685,17 +2701,17 @@ static void test_drawpath(void) } static const emfplus_record fill_path_records[] = { - {0, EMR_HEADER}, - {0, EmfPlusRecordTypeHeader}, - {0, EmfPlusRecordTypeObject}, - {0, EmfPlusRecordTypeFillPath}, - {1, EMR_SAVEDC}, - {1, EMR_SETICMMODE}, - {1, EMR_BITBLT}, - {1, EMR_RESTOREDC}, - {0, EmfPlusRecordTypeEndOfFile}, - {0, EMR_EOF}, - {0} + { EMR_HEADER }, + { EmfPlusRecordTypeHeader }, + { EmfPlusRecordTypeObject, ObjectTypePath << 8 }, + { EmfPlusRecordTypeFillPath, 0x8000 }, + { EMR_SAVEDC, 0, 1 }, + { EMR_SETICMMODE, 0, 1 }, + { EMR_BITBLT, 0, 1 }, + { EMR_RESTOREDC, 0, 1 }, + { EmfPlusRecordTypeEndOfFile }, + { EMR_EOF }, + { 0 } }; static void test_fillpath(void)