From afc9bc7f2a681b978bbcccef7e8b27358e4a06fd Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 4 Apr 2015 12:53:05 +0000 Subject: [PATCH] [GDI32_APITEST] Add more tests for ExtCreatePen. This adds tests for almost all thinkable combinations of parameters. On win7: "ExtCreatePen: 7594830 tests executed (0 marked as todo, 0 failures), 0 skipped." After evaluating the results on WHS2003, this test will be disabled, since it is expected that most of these fail on ros atm. svn path=/trunk/; revision=67040 --- rostests/apitests/gdi32/ExtCreatePen.c | 538 ++++++++++++++++++++++++- 1 file changed, 518 insertions(+), 20 deletions(-) diff --git a/rostests/apitests/gdi32/ExtCreatePen.c b/rostests/apitests/gdi32/ExtCreatePen.c index 3c625477021..df4fca8472b 100644 --- a/rostests/apitests/gdi32/ExtCreatePen.c +++ b/rostests/apitests/gdi32/ExtCreatePen.c @@ -11,35 +11,533 @@ #include #include #include +#include -void Test_ExtCreatePen() +#define ok_lasterror(err) \ + ok(GetLastError() == err, "expected last error " #err " but got 0x%lx\n", GetLastError()); + +#define ok_elp(hPen, elp, pstyle, width, bstyle, color, hatch, cstyle) \ + ok(GetObjectA(hPen, sizeof(elpBuffer), elp) != 0, "GetObject failed\n"); \ + ok((elp)->elpPenStyle == (pstyle), "Wrong elpPenStyle, expected 0x%lx, got 0x%lx\n", pstyle, (elp)->elpPenStyle); \ + ok((elp)->elpWidth == width, "Wrong elpWidth, expected %lu, got %lu\n", width, (elp)->elpWidth); \ + ok((elp)->elpBrushStyle == (bstyle), "Wrong elpBrushStyle, expected 0x%lx, got 0x%lx\n", bstyle, (elp)->elpBrushStyle); \ + ok((elp)->elpColor == color, "Wrong elpColor, expected 0x%lx, got 0x%lx\n", color, (elp)->elpColor); \ + ok((elp)->elpHatch == hatch, "Wrong elpHatch, expected 0x%p, got 0x%p\n", (PVOID)hatch, (PVOID)(elp)->elpColor); \ + ok((elp)->elpNumEntries == cstyle, "Wrong elpNumEntries, expected %lu got %lu\n", cstyle, (elp)->elpNumEntries); + +void Test_ExtCreatePen_Params() { - HPEN hPen; - LOGBRUSH logbrush; - DWORD dwStyles[17] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}; + HPEN hPen; + LOGBRUSH logbrush; + struct + { + EXTLOGPEN extlogpen; + ULONG styles[16]; + } elpBuffer; + PEXTLOGPEN pelp = &elpBuffer.extlogpen; - logbrush.lbStyle = BS_SOLID; - logbrush.lbColor = RGB(1,2,3); - logbrush.lbHatch = 0; - hPen = ExtCreatePen(PS_COSMETIC, 1,&logbrush, 0, 0); - ok(hPen != 0, "ExtCreatePen failed\n"); - if (!hPen) return; + DWORD adwStyles[17] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}; - /* Test if we have an EXTPEN */ - ok(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN, "hPen=%p\n", hPen); - DeleteObject(hPen); + /* Test NULL logbrush */ + SetLastError(0); + _SEH2_TRY + { + hPen = ExtCreatePen(PS_COSMETIC, 1, NULL, 0, 0); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + SetLastError(0xdeadc0de); + } + _SEH2_END; + ok_lasterror(0xdeadc0de); - /* test userstyles */ - hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 17, (CONST DWORD*)&dwStyles); - ok(hPen == 0, "\n"); - hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 16, (CONST DWORD*)&dwStyles); - ok(hPen != 0, "\n"); + logbrush.lbStyle = BS_SOLID; + logbrush.lbColor = RGB(1, 2, 3); + logbrush.lbHatch = 0; + hPen = ExtCreatePen(PS_COSMETIC, 1, &logbrush, 0, 0); + ok(hPen != NULL, "ExtCreatePen failed\n"); + ok_elp(hPen, pelp, PS_COSMETIC, 1, BS_SOLID, RGB(1,2,3), 0, 0); + + /* Test if we have an EXTPEN */ + ok(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN, "hPen=%p\n", hPen); + DeleteObject(hPen); + + /* Test invalid style mask (0x0F) */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(9, 1, &logbrush, 0, 0); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test PS_ALTERNATE with PS_GEOMETRIC */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_ALTERNATE | PS_GEOMETRIC, 1, &logbrush, 0, NULL); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test invalid endcap mask (0xF00) */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(0x300, 1, &logbrush, 0, 0); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test invalid join mask (F000) */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(0x3000, 1, &logbrush, 0, 0); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test invalid type mask (F0000) */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(0x20000, 1, &logbrush, 0, 0); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test PS_COSMETIC with dwWidth != 1 */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_COSMETIC, -1, &logbrush, 0, 0); + ok(hPen != NULL, "ExtCreatePen failed\n"); + ok_lasterror(0xdeadc0de); + ok_elp(hPen, pelp, PS_COSMETIC, 1, BS_SOLID, RGB(1,2,3), 0, 0); + DeleteObject(hPen); + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_COSMETIC, 2, &logbrush, 0, 0); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_COSMETIC, 0, &logbrush, 0, 0); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test PS_COSMETIC with PS_ENDCAP_SQUARE */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_COSMETIC | PS_ENDCAP_SQUARE, 1, &logbrush, 0, NULL); + ok(hPen != NULL, "ExtCreatePen failed\n"); + ok_lasterror(0xdeadc0de); + ok_elp(hPen, pelp, PS_COSMETIC | PS_ENDCAP_SQUARE, 1, BS_SOLID, RGB(1,2,3), 0, 0); + DeleteObject(hPen); + + /* Test styles without PS_USERSTYLE */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_GEOMETRIC, 1, &logbrush, 16, adwStyles); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_GEOMETRIC, 1, &logbrush, 0, adwStyles); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_GEOMETRIC, 1, &logbrush, 16, NULL); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test PS_USERSTYLE */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 16, adwStyles); + ok(hPen != NULL, "ExtCreatePen failed\n"); + ok_lasterror(0xdeadc0de); + ok_elp(hPen, pelp, PS_GEOMETRIC | PS_USERSTYLE, 5, BS_SOLID, RGB(1,2,3), 0, 16); + DeleteObject(hPen); + + /* Test PS_USERSTYLE with PS_COSMETIC */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_COSMETIC | PS_USERSTYLE, 5, &logbrush, 16, adwStyles); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test PS_USERSTYLE with 17 styles */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 17, adwStyles); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test PS_USERSTYLE with 1 style */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 1, adwStyles); + ok(hPen != NULL, "ExtCreatePen failed\n"); + ok_lasterror(0xdeadc0de); + ok_elp(hPen, pelp, PS_GEOMETRIC | PS_USERSTYLE, 5, BS_SOLID, RGB(1,2,3), 0, 1); + DeleteObject(hPen); + + /* Test PS_USERSTYLE with NULL lpStyles */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 1, &logbrush, 2, NULL); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test PS_NULL */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_NULL, 1, &logbrush, 0, NULL); + ok(hPen == GetStockObject(NULL_PEN), "ExtCreatePen should return NULL_PEN, but returned %p\n", hPen); + ok_lasterror(0xdeadc0de); + + /* When the size is anything other than sizeof(EXTLOGPEN), we will get a LOGPEN! */ + ok(GetObjectA(hPen, sizeof(EXTLOGPEN) + 1, pelp) == sizeof(LOGPEN), "GetObject failed\n"); + + /* ACHTUNG: special handling, we want sizeof(EXTLOGPEN) and nothing else */ + ok(GetObjectA(hPen, sizeof(EXTLOGPEN), pelp) == sizeof(EXTLOGPEN), "GetObject failed\n"); + ok(pelp->elpPenStyle == PS_NULL, "Wrong elpPenStyle, expected PS_NULL, got 0x%lx\n", pelp->elpPenStyle); + ok(pelp->elpWidth == 0, "Wrong elpWidth, expected 0, got %lu\n", pelp->elpWidth); + ok(pelp->elpBrushStyle == BS_SOLID, "Wrong elpBrushStyle, expected BS_SOLID, got 0x%lx\n", pelp->elpBrushStyle); + ok(pelp->elpColor == 0, "Wrong elpColor, expected 0, got 0x%lx\n", pelp->elpColor); + ok(pelp->elpHatch == 0, "Wrong elpHatch, expected 0, got 0x%p\n", (PVOID)pelp->elpColor); + ok(pelp->elpNumEntries == 0, "Wrong elpNumEntries, expected %lu got %lu\n", 0, pelp->elpNumEntries); + + /* Test PS_NULL with styles */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_NULL, 1, &logbrush, 1, adwStyles); + ok(hPen == NULL, "ExtCreatePen should fail\n"); + ok_lasterror(ERROR_INVALID_PARAMETER); + + /* Test 0 width */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_GEOMETRIC, 0, &logbrush, 0, 0); + ok(hPen != NULL, "ExtCreatePen failed\n"); + ok_lasterror(0xdeadc0de); + ok_elp(hPen, pelp, PS_GEOMETRIC, 0, BS_SOLID, RGB(1,2,3), 0, 0); + DeleteObject(hPen); + + /* Test negative width */ + SetLastError(0xdeadc0de); + hPen = ExtCreatePen(PS_GEOMETRIC, -7942, &logbrush, 0, 0); + ok(hPen != NULL, "ExtCreatePen failed\n"); + ok_lasterror(0xdeadc0de); + ok_elp(hPen, pelp, PS_GEOMETRIC, 7942, BS_SOLID, RGB(1,2,3), 0, 0); + DeleteObject(hPen); + +} + +BOOL +Test_ExtCreatePen_Expect( + DWORD dwPenStyle, + DWORD dwWidth, + DWORD dwStyleCount, + PDWORD pdwStyles, + UINT lbStyle, + ULONG_PTR lbHatch, + PBOOL pbExpectException, + PEXTLOGPEN pelpExpect) +{ + *pbExpectException = FALSE; + + if ((dwPenStyle & PS_STYLE_MASK) == PS_USERSTYLE) + { + if (pdwStyles == NULL) + { + return FALSE; + } + } + else + { + if ((dwStyleCount != 0) || (pdwStyles != NULL)) + { + return FALSE; + } + } + + if (lbStyle == BS_PATTERN) + { + if (lbHatch == 0) return FALSE; + } + + if (lbStyle == BS_DIBPATTERNPT) + { + if (lbHatch == 0) return FALSE; + if (lbHatch < 0xFFFF) + { + *pbExpectException = TRUE; + return FALSE; + } + } + + if (lbStyle == BS_DIBPATTERN) + { + return FALSE; + } + + if ((dwPenStyle & PS_STYLE_MASK) == PS_USERSTYLE) + { + if (dwStyleCount == 0) + { + return FALSE; + } + + if (dwStyleCount > 16) + { + return FALSE; + } + + if ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) + { + if (pdwStyles[0] == 0) + { + return FALSE; + } + } + else + { + if ((pdwStyles[0] == 0) && (dwStyleCount == 1)) + { + return FALSE; + } + } + } + + if ((dwPenStyle & PS_STYLE_MASK) == PS_NULL) + { + pelpExpect->elpPenStyle = PS_NULL; + pelpExpect->elpWidth = 0; + pelpExpect->elpBrushStyle = BS_SOLID; + pelpExpect->elpColor = 0; + pelpExpect->elpHatch = 0; + pelpExpect->elpNumEntries = 0; + return TRUE; + } + + + if (((dwPenStyle & PS_STYLE_MASK) >> 0) > PS_ALTERNATE) return FALSE; + if (((dwPenStyle & PS_ENDCAP_MASK) >> 8) > 2) return FALSE; + if (((dwPenStyle & PS_JOIN_MASK) >> 12) > 2) return FALSE; + if (((dwPenStyle & PS_TYPE_MASK) >> 16) > 1) return FALSE; + + dwWidth = abs(((LONG)dwWidth)); + + if ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) + { + if (dwWidth != 1) return FALSE; + + if ((lbStyle != BS_SOLID) && + (lbStyle != BS_HATCHED)) + { + return FALSE; + } + + if (lbStyle == BS_HATCHED) + { + if ((lbHatch != 8) && + (lbHatch != 10) && + (lbHatch != 12)) + { + return FALSE; + } + + if (lbHatch >= HS_API_MAX) + { + return FALSE; + } + } + + if ((dwPenStyle & PS_STYLE_MASK) == PS_INSIDEFRAME) + { + return FALSE; + } + } + else + { + if ((dwPenStyle & PS_STYLE_MASK) == PS_ALTERNATE) + { + return FALSE; + } + + if (((dwPenStyle & PS_STYLE_MASK) != PS_SOLID) && + ((dwPenStyle & PS_STYLE_MASK) != PS_INSIDEFRAME) && + ((dwPenStyle & PS_STYLE_MASK) != PS_USERSTYLE)) + { + if (dwWidth == 0) + { + return FALSE; + } + } + + if (lbStyle == BS_NULL) + { + pelpExpect->elpPenStyle = PS_NULL; + pelpExpect->elpWidth = 0; + pelpExpect->elpBrushStyle = BS_SOLID; + pelpExpect->elpColor = 0; + pelpExpect->elpHatch = 0; + pelpExpect->elpNumEntries = 0; + return TRUE; + } + + if (lbStyle > BS_HATCHED) + { + return FALSE; + } + + if (lbStyle == BS_HATCHED) + { + if (lbHatch >= HS_API_MAX) + { + return FALSE; + } + } + + } + + pelpExpect->elpPenStyle = dwPenStyle; + pelpExpect->elpWidth = dwWidth; + pelpExpect->elpBrushStyle = lbStyle; + pelpExpect->elpColor = RGB(1,2,3); + pelpExpect->elpHatch = lbHatch; + pelpExpect->elpNumEntries = dwStyleCount; + //pelpExpect->elpStyleEntry[1]; + + return TRUE; +} + +void +Test_ExtCreatePen_Helper( + DWORD dwPenStyle, + DWORD dwWidth, + DWORD dwStyleCount, + PDWORD pdwStyles, + UINT lbStyle, + ULONG_PTR lbHatch) +{ + LOGBRUSH lb; + HPEN hpen; + BOOL bExpectSuccess, bExpectException, bGotException = FALSE; + struct + { + EXTLOGPEN extlogpen; + ULONG styles[16]; + } elpBuffer; + PEXTLOGPEN pelp = &elpBuffer.extlogpen; + EXTLOGPEN elpExpect; + + lb.lbStyle = lbStyle; + lb.lbColor = RGB(1,2,3); + lb.lbHatch = lbHatch; + + bExpectSuccess = Test_ExtCreatePen_Expect( + dwPenStyle, + dwWidth, + dwStyleCount, + pdwStyles, + lbStyle, + lbHatch, + &bExpectException, + &elpExpect); + + _SEH2_TRY + { + hpen = ExtCreatePen(dwPenStyle, dwWidth, &lb, dwStyleCount, pdwStyles); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + bGotException = TRUE; + } + _SEH2_END; + +#define ok2(expression, text, expected, got) \ + ok(expression, text \ + "(dwPenStyle=0x%lx, dwWidth=%lu, dwStyleCount=%lu, pdwStyles=%p, lbStyle=%lu, lbHatch=%p)\n", \ + expected, got, dwPenStyle, dwWidth, dwStyleCount, pdwStyles, lbStyle, (PVOID)lbHatch); + + //ok(bGotException == bExpectException, "ExtCreatePen expected exception=%lu for " + // "dwPenStyle=0x%lx, dwWidth=%lu, dwStyleCount=%lu, pdwStyles=%p, lbStyle=%lu, lbHatch=%p\n", + // bExpectException, dwPenStyle, dwWidth, dwStyleCount, pdwStyles, lbStyle, (PVOID)lbHatch); + + ok2(bGotException == bExpectException, "ExtCreatePen expception, expected %lu, got %lu", bExpectException, bGotException); + + if (!bExpectSuccess) + { + ok(hpen == NULL, "ExtCreatePen should fail for " + "dwPenStyle=0x%lx, dwWidth=%lu, dwStyleCount=%lu, pdwStyles=%p, lbStyle=%lu, lbHatch=%p\n", + dwPenStyle, dwWidth, dwStyleCount, pdwStyles, lbStyle, (PVOID)lbHatch); + } + else + { + ok(hpen != NULL, "ExtCreatePen failed for " + "dwPenStyle=0x%lx, dwWidth=%lu, dwStyleCount=%lu, pdwStyles=%p, lbStyle=%lu, lbHatch=%p\n", + dwPenStyle, dwWidth, dwStyleCount, pdwStyles, lbStyle, (PVOID)lbHatch); + if (hpen != NULL) + { + if (GetObjectA(hpen, sizeof(elpBuffer), pelp) < sizeof(EXTLOGPEN)) + { + if (!GetObjectA(hpen, sizeof(EXTLOGPEN), pelp)) + { + ok(0, "failed again?\n"); + return; + } + } + + ok2(pelp->elpPenStyle == elpExpect.elpPenStyle, "elpPenStyle, expected 0x%lx, got 0x%lx\n", elpExpect.elpPenStyle, pelp->elpPenStyle); + ok2(pelp->elpWidth == elpExpect.elpWidth, "elpWidth, expected 0x%lx, got 0x%lx\n", elpExpect.elpWidth, pelp->elpWidth); + ok2(pelp->elpBrushStyle == elpExpect.elpBrushStyle, "elpBrushStyle, expected 0x%lx, got 0x%lx\n", elpExpect.elpBrushStyle, pelp->elpBrushStyle); + ok2(pelp->elpColor == elpExpect.elpColor, "elpColor, expected 0x%lx, got 0x%lx\n", elpExpect.elpColor, pelp->elpColor); + ok2(pelp->elpHatch == elpExpect.elpHatch, "elpHatch, expected 0x%lx, got 0x%lx\n", elpExpect.elpHatch, pelp->elpHatch); + ok2(pelp->elpNumEntries == elpExpect.elpNumEntries, "elpNumEntries, expected 0x%lx, got 0x%lx\n", elpExpect.elpNumEntries, pelp->elpNumEntries); + //for (i = 0; i < pelp->elpNumEntries; i++) + //{ + // ok2(pelp->elpStyleEntry[i] == elpExpect.elpStyleEntry[i], "elpHatch, expected 0x%lx, got 0x%lx\n", elpExpect.elpStyleEntry[i], pelp->elpStyleEntry[i]); + //} + } + } + +} + +void Test_ExtCreatePen_Params2() +{ + ULONG aflPenType[] = {PS_COSMETIC, PS_GEOMETRIC, 0x20000}; + ULONG iType, iStyle, iEndCap, iJoin, iWidth, iStyleCount, iStyles, iBrushStyle, iHatch; + DWORD adwStyles[17] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}; + DWORD adwStyles2[17] = {0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}; + + printf("adwStyles=%p, adwStyles2=%p\n", adwStyles, adwStyles2); + + //for (iType = 0; iType < sizeof(aflPenType) / sizeof(aflPenType[0]); iType++) + for (iType = 0; iType < 3; iType++) + { + ULONG aflPenStyle[] = {PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT, PS_NULL, PS_INSIDEFRAME, PS_USERSTYLE, PS_ALTERNATE, 9}; + //for (iStyle = 0; iStyle < sizeof(aflPenStyle) / sizeof(aflPenStyle[0]); iStyle++) + for (iStyle = 0; iStyle < 10; iStyle++) + { + ULONG aflEndCap[] = {PS_ENDCAP_ROUND, PS_ENDCAP_SQUARE, PS_ENDCAP_FLAT, 0x300, 0x400}; + for (iEndCap = 0; iEndCap < sizeof(aflEndCap) / sizeof(aflEndCap[0]); iEndCap++) + { + ULONG aflJoin[] = {PS_JOIN_ROUND, PS_JOIN_BEVEL, PS_JOIN_MITER, 0x3000, 0x4000}; + for (iJoin = 0; iJoin < sizeof(aflJoin) / sizeof(aflJoin[0]); iJoin++) + { + DWORD adwWidth[] = {0, 1, 2}; + ULONG flPenStyle = aflPenType[iType] | aflPenStyle[iStyle] | aflEndCap[iEndCap] | aflJoin[iJoin]; + + for (iWidth = 0; iWidth < sizeof(adwWidth) / sizeof(adwWidth[0]); iWidth++) + { + ULONG adwStyleCount[] = {0, 1, 2, 16, 17}; + for (iStyleCount = 0; iStyleCount < sizeof(adwStyleCount) / sizeof(adwStyleCount[0]); iStyleCount++) + { + PULONG apdwStyles[] = {NULL, adwStyles, adwStyles2}; + for (iStyles = 0; iStyles < sizeof(apdwStyles) / sizeof(apdwStyles[0]); iStyles++) + { + UINT albStyle[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + for (iBrushStyle = 0; iBrushStyle < sizeof(albStyle) / sizeof(albStyle[0]); iBrushStyle++) + { + ULONG_PTR alHatch[] = {0, 1, 6, 7, 8, 9, 10, 11, 12, 13}; + + for (iHatch = 0; iHatch < sizeof(alHatch) / sizeof(alHatch[0]); iHatch++) + { + Test_ExtCreatePen_Helper(flPenStyle, + adwWidth[iWidth], + adwStyleCount[iStyleCount], + apdwStyles[iStyles], + albStyle[iBrushStyle], + alHatch[iHatch]); + } + } + } + } + } + } + } + } + } - DeleteObject(hPen); } START_TEST(ExtCreatePen) { - Test_ExtCreatePen(); + Test_ExtCreatePen_Params(); + Test_ExtCreatePen_Params2(); }