-- v5: gdiplus: add new test cases to GdipCreateCustomLineCap
From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/gdiplus/customlinecap.c | 5 +++-- dlls/gdiplus/tests/customlinecap.c | 36 +++++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 7 deletions(-)
diff --git a/dlls/gdiplus/customlinecap.c b/dlls/gdiplus/customlinecap.c index f35fea90eba..e767f20e4b3 100644 --- a/dlls/gdiplus/customlinecap.c +++ b/dlls/gdiplus/customlinecap.c @@ -105,8 +105,9 @@ static GpStatus init_custom_linecap(GpCustomLineCap *cap, GpPathData *pathdata, return Ok; }
-/* FIXME: Sometimes when fillPath is non-null and stroke path is null, the native - * version of this function returns NotImplemented. I cannot figure out why. */ +/* Custom line cap position (0, 0) is a place corresponding to the end of line. +* If Custom Line Cap is too big and too far from position (0, 0), +* then NotImplemented will be returned, due to floating point precision limitation. */ GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath* fillPath, GpPath* strokePath, GpLineCap baseCap, REAL baseInset, GpCustomLineCap **customCap) { diff --git a/dlls/gdiplus/tests/customlinecap.c b/dlls/gdiplus/tests/customlinecap.c index a8bb5cf371b..9dee40e1af6 100644 --- a/dlls/gdiplus/tests/customlinecap.c +++ b/dlls/gdiplus/tests/customlinecap.c @@ -49,17 +49,22 @@ static BOOL compare_float(float f, float g, unsigned int ulps) static void test_constructor_destructor(void) { GpCustomLineCap *custom; - GpPath *path, *path2; + GpPath *path, *path2, *path3; GpStatus stat;
stat = GdipCreatePath(FillModeAlternate, &path); expect(Ok, stat); - stat = GdipAddPathRectangle(path, 5.0, 5.0, 10.0, 10.0); + stat = GdipAddPathRectangle(path, -5.0, -4.0, 10.0, 8.0); expect(Ok, stat);
stat = GdipCreatePath(FillModeAlternate, &path2); expect(Ok, stat); - stat = GdipAddPathRectangle(path2, 5.0, 5.0, 10.0, 10.0); + stat = GdipAddPathRectangle(path2, -5.0, -5.0, 10.0, 10.0); + expect(Ok, stat); + + stat = GdipCreatePath(FillModeAlternate, &path3); + expect(Ok, stat); + stat = GdipAddPathRectangle(path3, 5.0, 5.0, 10.0, 10.0); expect(Ok, stat);
/* NULL args */ @@ -74,18 +79,39 @@ static void test_constructor_destructor(void) stat = GdipDeleteCustomLineCap(NULL); expect(InvalidParameter, stat);
+ /* If both parameters is provided, then fillPath will be ignored. */ + custom = NULL; + stat = GdipCreateCustomLineCap(path, path2, LineCapFlat, 0.0, &custom); + expect(Ok, stat); + ok(custom != NULL, "Custom line cap was not created\n"); + stat = GdipDeleteCustomLineCap(custom); + expect(Ok, stat); + /* valid args */ + custom = NULL; stat = GdipCreateCustomLineCap(NULL, path2, LineCapFlat, 0.0, &custom); expect(Ok, stat); + ok(custom != NULL, "Custom line cap was not created\n"); + stat = GdipDeleteCustomLineCap(custom); + expect(Ok, stat); + + custom = NULL; + stat = GdipCreateCustomLineCap(path, NULL, LineCapFlat, 0.0, &custom); + expect(Ok, stat); + ok(custom != NULL, "Custom line cap was not created\n"); stat = GdipDeleteCustomLineCap(custom); expect(Ok, stat); - /* it's strange but native returns NotImplemented on stroke == NULL */ + + /* Custom line cap position (0, 0) is a place corresponding to the end of line. + * If Custom Line Cap is too big and too far from position (0, 0), + * then NotImplemented will be returned, due to floating point precision limitation. */ custom = NULL; - stat = GdipCreateCustomLineCap(path, NULL, LineCapFlat, 10.0, &custom); + stat = GdipCreateCustomLineCap(path3, NULL, LineCapFlat, 10.0, &custom); todo_wine expect(NotImplemented, stat); todo_wine ok(custom == NULL, "Expected a failure on creation\n"); if(stat == Ok) GdipDeleteCustomLineCap(custom);
+ GdipDeletePath(path3); GdipDeletePath(path2); GdipDeletePath(path); }
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=136059
Your paranoid android.
=== debian11b (64 bit WoW report) ===
urlmon: url.c:3988: Test failed: request failed: 12029 url.c:4104: Test failed: Skipping https tests
On Mon Aug 14 08:00:20 2023 +0000, Bartosz Kosiorek wrote:
changed this line in [version 4 of the diff](/wine/wine/-/merge_requests/3559/diffs?diff_id=62319&start_sha=47e7253ad28b9698f90c9e121758fd0914d2e46f#917f5d92da2dde5fe5b93bbfa395d4c3f6cedd60_104_105)
Fixed
On Mon Aug 14 09:01:45 2023 +0000, **** wrote:
Marvin replied on the mailing list:
Hi, It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated. The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details: The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=136059 Your paranoid android. === debian11b (64 bit WoW report) === urlmon: url.c:3988: Test failed: request failed: 12029 url.c:4104: Test failed: Skipping https tests
It is not related failure.