diff --git a/rostests/apitests/w32knapi/ntgdi/NtGdiDoPalette.c b/rostests/apitests/w32knapi/ntgdi/NtGdiDoPalette.c new file mode 100644 index 00000000000..93485817b12 --- /dev/null +++ b/rostests/apitests/w32knapi/ntgdi/NtGdiDoPalette.c @@ -0,0 +1,264 @@ +#include "../w32knapi.h" + +W32KAPI +LONG +APIENTRY +NtGdiDoPalette( + IN HPALETTE hpal, + IN WORD iStart, + IN WORD cEntries, + IN PALETTEENTRY *pPalEntries, + IN DWORD iFunc, + IN BOOL bInbound +) +{ + return (LONG)Syscall(L"NtGdiDoPalette", 6, &hpal); +} + +HPALETTE +CreateTestPalette() +{ + struct + { + LOGPALETTE logpal; + PALETTEENTRY entry[5]; + } palstruct = + { {0x300,5, + { {1,2,3,0} }}, + { {22,33,44,PC_RESERVED}, + {11,55,77,PC_EXPLICIT}, + {00,77,66,PC_RESERVED | PC_NOCOLLAPSE}, + {12,34,56,78}} }; + + return CreatePalette((LOGPALETTE*)&palstruct); +} + +INT +Test_NtGdiDoPalette_GdiPalAnimate(PTESTINFO pti) +{ + HPALETTE hPal; + PALETTEENTRY palEntries[5] = { + {0,0,0,0}, + {0xff,0xff,0xff,0}, + {0x33,0x66,0x99,0}, + {0x25,0x84,0x14,0}, + {0x12,0x34,0x56,0x11}}; + PALETTEENTRY palEntries2[5]; + + /* Test stock palette */ + SetLastError(ERROR_SUCCESS); + RTEST(NtGdiDoPalette(GetStockObject(DEFAULT_PALETTE), 0, 1, palEntries, GdiPalAnimate, FALSE) == 0); + RTEST(GetLastError() == ERROR_SUCCESS); + + + /* Test pEntries = NULL */ + hPal = CreateTestPalette(); + RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalAnimate, TRUE) == 0); + RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalAnimate, FALSE) == 0); + DeleteObject(hPal); + + /* Test PC_RESERVED */ + hPal = CreateTestPalette(); + RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, TRUE) == 2); + DeleteObject(hPal); + + hPal = CreateTestPalette(); + RTEST(NtGdiDoPalette(hPal, 1, 5, palEntries, GdiPalAnimate, TRUE) == 2); + DeleteObject(hPal); + + hPal = CreateTestPalette(); + RTEST(NtGdiDoPalette(hPal, 2, 5, palEntries, GdiPalAnimate, TRUE) == 1); + DeleteObject(hPal); + + hPal = CreateTestPalette(); + RTEST(NtGdiDoPalette(hPal, 3, 5, palEntries, GdiPalAnimate, TRUE) == 1); + DeleteObject(hPal); + + hPal = CreateTestPalette(); + RTEST(NtGdiDoPalette(hPal, 4, 5, palEntries, GdiPalAnimate, TRUE) == 0); + DeleteObject(hPal); + + hPal = CreateTestPalette(); + RTEST(NtGdiDoPalette(hPal, 5, 5, palEntries, GdiPalAnimate, TRUE) == 0); + DeleteObject(hPal); + + hPal = CreateTestPalette(); + RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, FALSE) == 2); + DeleteObject(hPal); + + hPal = CreateTestPalette(); + RTEST(NtGdiDoPalette(hPal, 3, 5, palEntries, GdiPalAnimate, FALSE) == 1); + DeleteObject(hPal); + + /* Test if entries are set correctly */ + hPal = CreateTestPalette(); + NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalAnimate, TRUE); + NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE); + RTEST(palEntries2[0].peRed == 1); + RTEST(palEntries2[0].peGreen == 2); + RTEST(palEntries2[0].peBlue == 3); + RTEST(palEntries2[0].peFlags == 0); + RTEST(palEntries2[1].peRed == palEntries[1].peRed); + RTEST(palEntries2[1].peGreen == palEntries[1].peGreen); + RTEST(palEntries2[1].peBlue == palEntries[1].peBlue); + RTEST(palEntries2[1].peFlags == palEntries[1].peFlags); + RTEST(palEntries2[2].peRed == 11); + RTEST(palEntries2[2].peGreen == 55); + RTEST(palEntries2[2].peBlue == 77); + TEST(palEntries2[2].peFlags == PC_EXPLICIT); + RTEST(palEntries2[3].peRed == palEntries[3].peRed); + RTEST(palEntries2[3].peGreen == palEntries[3].peGreen); + RTEST(palEntries2[3].peBlue == palEntries[3].peBlue); + RTEST(palEntries2[3].peFlags == palEntries[3].peFlags); + DeleteObject(hPal); + + + return APISTATUS_NORMAL; +} + +INT +Test_NtGdiDoPalette_GdiPalSetEntries(PTESTINFO pti) +{ + HPALETTE hPal; + PALETTEENTRY palEntries[5] = { + {0,0,0,0}, + {0xff,0xff,0xff,0}, + {0x33,0x66,0x99,0}, + {0x25,0x84,0x14,0}, + {0x12,0x34,0x56,0x11}}; + PALETTEENTRY palEntries2[5]; + + hPal = CreateTestPalette(); + + /* Test invalid handle */ + SetLastError(ERROR_SUCCESS); + RTEST(NtGdiDoPalette((HPALETTE)23, 0, 1, palEntries, GdiPalSetEntries, TRUE) == 0); + RTEST(GetLastError() == ERROR_SUCCESS); + + /* Test system palette */ + RTEST(NtGdiDoPalette(GetStockObject(DEFAULT_PALETTE), 0, 1, palEntries, GdiPalSetEntries, TRUE) == 0); + RTEST(GetLastError() == ERROR_SUCCESS); + + RTEST(NtGdiDoPalette(hPal, 0, 1, palEntries, GdiPalSetEntries, TRUE) == 1); + RTEST(NtGdiDoPalette(hPal, 0, 2, palEntries, GdiPalSetEntries, TRUE) == 2); + RTEST(NtGdiDoPalette(hPal, 0, 3, palEntries, GdiPalSetEntries, TRUE) == 3); + RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE) == 5); + RTEST(NtGdiDoPalette(hPal, 0, 6, palEntries, GdiPalSetEntries, TRUE) == 5); + RTEST(NtGdiDoPalette(hPal, 3, 6, palEntries, GdiPalSetEntries, TRUE) == 2); +// TEST(NtGdiDoPalette(hPal, 4, 23247, palEntries, GdiPalSetEntries, TRUE) == 0); + + /* Test bInbound == FALSE */ + NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE); + ZeroMemory(palEntries2, sizeof(palEntries2)); + RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalSetEntries, FALSE) == 5); + /* we should get the old values returned in our buffer! */ + TEST(memcmp(palEntries2, palEntries, sizeof(palEntries)) == 0); + + /* check what we have in our palette now */ + ZeroMemory(palEntries2, sizeof(palEntries2)); + RTEST(NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE) == 5); + TEST(memcmp(palEntries2, palEntries, sizeof(palEntries)) == 0); + + RTEST(NtGdiDoPalette(hPal, 0, 4, palEntries2, GdiPalSetEntries, TRUE) == 4); + RTEST(GetLastError() == ERROR_SUCCESS); + + /* Test if entries are set correctly */ + hPal = CreateTestPalette(); + NtGdiDoPalette(hPal, 0, 5, palEntries, GdiPalSetEntries, TRUE); + NtGdiDoPalette(hPal, 0, 5, palEntries2, GdiPalGetEntries, FALSE); + RTEST(palEntries2[0].peRed == 0); + RTEST(palEntries2[0].peGreen == 0); + RTEST(palEntries2[0].peBlue == 0); + RTEST(palEntries2[0].peFlags == 0); + + /* Test that the buffer was not changed */ + + /* Test pEntries = NULL */ + RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, TRUE) == 0); + + return APISTATUS_NORMAL; +} + +INT +Test_NtGdiDoPalette_GdiPalGetEntries(PTESTINFO pti) +{ + HPALETTE hPal; + + hPal = CreateTestPalette(); + + /* Test pEntries = NULL */ + RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, TRUE) == 0); + RTEST(NtGdiDoPalette(hPal, 0, 1, NULL, GdiPalGetEntries, FALSE) == 5); + RTEST(NtGdiDoPalette(hPal, 2, 1, NULL, GdiPalGetEntries, FALSE) == 5); + RTEST(NtGdiDoPalette(hPal, 20, 1, NULL, GdiPalGetEntries, FALSE) == 5); + RTEST(NtGdiDoPalette(hPal, -20, 1, NULL, GdiPalGetEntries, FALSE) == 5); + RTEST(NtGdiDoPalette(hPal, 2, 0, NULL, GdiPalGetEntries, FALSE) == 5); + + +// Test flags 0xf0 + + return APISTATUS_NORMAL; +} + +INT +Test_NtGdiDoPalette_GetSystemPalette(PTESTINFO pti) +{ + return APISTATUS_NORMAL; +} + +INT +Test_NtGdiDoPalette_GetBIBColorTable(PTESTINFO pti) +{ + return APISTATUS_NORMAL; +} + +INT +Test_NtGdiDoPalette_SetDIBColorTable(PTESTINFO pti) +{ + return APISTATUS_NORMAL; +} + + +INT +Test_NtGdiDoPalette(PTESTINFO pti) +{ + INT ret; + + ret = Test_NtGdiDoPalette_GdiPalAnimate(pti); + if (ret != APISTATUS_NORMAL) + { + return ret; + } + + ret = Test_NtGdiDoPalette_GdiPalSetEntries(pti); + if (ret != APISTATUS_NORMAL) + { + return ret; + } + + ret = Test_NtGdiDoPalette_GdiPalGetEntries(pti); + if (ret != APISTATUS_NORMAL) + { + return ret; + } + + ret = Test_NtGdiDoPalette_GetSystemPalette(pti); + if (ret != APISTATUS_NORMAL) + { + return ret; + } + + ret = Test_NtGdiDoPalette_GetBIBColorTable(pti); + if (ret != APISTATUS_NORMAL) + { + return ret; + } + + ret = Test_NtGdiDoPalette_SetDIBColorTable(pti); + if (ret != APISTATUS_NORMAL) + { + return ret; + } + + return APISTATUS_NORMAL; +} diff --git a/rostests/apitests/w32knapi/testlist.c b/rostests/apitests/w32knapi/testlist.c index cebce054f6f..bc1a9b1cfa6 100644 --- a/rostests/apitests/w32knapi/testlist.c +++ b/rostests/apitests/w32knapi/testlist.c @@ -9,7 +9,7 @@ #include "ntgdi/NtGdiArcInternal.c" #include "ntgdi/NtGdiCreateBitmap.c" #include "ntgdi/NtGdiCreateCompatibleBitmap.c" -//#include "ntgdi/NtGdiDoPalette.c" +#include "ntgdi/NtGdiDoPalette.c" #include "ntgdi/NtGdiGetBitmapBits.c" #include "ntgdi/NtGdiGetRandomRgn.c" #include "ntgdi/NtGdiSetBitmapBits.c" @@ -29,7 +29,7 @@ TESTENTRY TestList[] = { L"NtGdiArcInternal", Test_NtGdiArcInternal }, { L"NtGdiCreateBitmap", Test_NtGdiCreateBitmap }, { L"NtGdiCreateCompatibleBitmap", Test_NtGdiCreateCompatibleBitmap }, -// { L"NtGdiDoPalette", Test_NtGdiDoPalette }, + { L"NtGdiDoPalette", Test_NtGdiDoPalette }, { L"NtGdiGetBitmapBits", Test_NtGdiGetBitmapBits }, { L"NtGdiGetRandomRgn", Test_NtGdiGetRandomRgn }, { L"NtGdiSetBitmapBits", Test_NtGdiSetBitmapBits },